第1章 数据库和SQL-SQL基础教程
1-1 数据库是什么
数据库(Database,DB) 是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合
用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)
关系数据库使用专门的 SQL(Structured Query Language,结构化查询语言) 对数据进行操作
这种类型的 DBMS 称为关系数据库管理系统(Relational Database Management System,RDBMS)。比较具有代表性的 RDBMS 有如下 5 种:
● Oracle Database:甲骨文公司的RDBMS
● SQL Server:微软公司的RDBMS
● DB2:IBM公司的RDBMS
● PostgreSQL:开源的RDBMS
● MySQL:开源的RDBMS
1-2 数据库的结构
关系数据库采用被称为数据库表的二维表来管理数据
数据库表由表示数据项目的列(字段)和表示一条数据的行(记录)所组
成,以记录为单位进行数据读写
1-3 SQL概要
SQL语句以分号(;)结尾
关键字不区分大小写,但是插入到表中的数据是区分大小写的
字符串和日期常数需要使用单引号(’)括起来
数字常数无需加注单引号(直接书写数字即可)
1-4 表的创建
数据库的创建:CREATE DATABASE <数据库名称>;
create database shop;
查看创建好的数据库:SHOW CREATE DATABASE <数据库名称>;
查看所有数据库列表:SHOW DATABASES
使用数据库:USE <数据库名称>;
删除数据库:DROP DATABASE <数据库名称>;
表的创建:CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
<列名4> <数据类型> <该列所需约束>,
.
.
.
<该表的约束1>, <该表的约束2>,……);
create table product(
product_id char(4) primary key,
product_name varchar(100) not null,
product_type varchar(32) not null,
sale_price int,
purchase_price int,
regist_date date
);
查看基本表结构:DESCRIBE(DESC) <表名>;
查看详细表结构:SHOW CREATE TBLE <表名>;
命名规则
只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称
名称必须以半角英文字母作为开头
在同一个数据库中不能创建两个相同名称的表,在同一个表中也不能创建两个名称相同的列
数据类型的指定
数据类型表示数据的种类,包括数字型、字符型和日期型等
所有的列都必须指定数据类型,每一列都不能存储与该列数据类型不符的数据
●INT型
用来指定存储整数的列的数据类型(数字型),不能存储小数
●CHAR型
CHAR 是 CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符型)
字符串以定长字符串的形式存储在被指定为 CHAR 型的列中。所谓定长字符串,就是当列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足
●VARCHAR型
VARCHAR中 的VAR是VARING(可变的)的缩写,也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度(最大长度)
但该类型的列是以可变长字符串的形式来保存字符串的。可变长字符串即使字符数未达到最大长度,也不会用半角空格补足
●DATE型
用来指定存储日期(年月日)的列的数据类型(日期型)
使用char和varchar时,指定的字符串长度一定要大于实际的字符串长度,以便完整保存我们输入的信息
varchar有一位要用来存储长度信息,所以varchar指定的字节是L+1(eg.存储5位长度的字符串,就需要指定varchar长度为6)
何时使用char/varchar?
① 数据长度相同,首选char(选用varchar会多占用空间,因为它有一位是用来存储长度的);数据长度不同,首选varchar(varchar不用补位,输入几位就是几位加一的字符串长度,不像char,如果位数小于指定长度的话,还需要用空格来填充)
② 如果长度出入不大,首选char(处理固定长度字符串运算效率更高)
约束的设置
① 主键约束:用来唯一地标识数据记录中的每一行记录,要求在主键约束中的数据记录是非空和唯一的
单字段主键:单一字段可以作为主键使用(主键约束可以直接写在该字段后)
多字段联合主键:多个字段组合而成的复合主键(主键约束要写在所有定义好的字段的下方)
② 非空约束:限制了在指定not null约束条件的字段中,记录的数据信息不能有空值
③ 唯一约束:限定了在录入有唯一约束的数据中,不能出现重复值
④ 自增字段:自动增加数值的字段,默认从1开始、步长为1(123456789…)
⑤ 默认值:为字段设置默认值,为某个字段导入数据时,一旦出现空值,将会按照default设定的默认值进行填充
1-5 表的删除和更新
表的删除(DROP TABLE语句)
DROP TABLE <表名>;
drop table product;
删除了的表是无法恢复的,在执行DROP TABLE语句之前请务必仔细确认
表定义的更新(ALTER TABLE语句)
增加字段:ALTER TABLE <表名> ADD <列的定义>;
alter table product add product_name_pinyin varchar(100);
删除字段:ALTER TABLE <表名> DROP <列名>;
alter table product drop product_name_pinyin;
ALTER TABLE 语句和DROP TABLE 语句一样,执行之后无法恢复
-- 修改表名
alter table product rename goods;
or
rename product to goods;
向Product表中插入数据
-- 插入数据
insert into product
values
('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20'),
('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20'),
('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15'),
('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20'),
('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28'),
('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');
-- 导入外部文件(MySQL8.0此语法只能在命令行中使用,在Workbench中使用会报错)
load data local infile '文件绝对路径.txt'
into table <表名>
fields terminated by '\t'
ignore 1 lines;