数据表的基本操作
1. 创建数据表
1.1.1 规则
create table table_name(
字段名1,数据类型 [列级别约束条件][默认值],
字段名2,数据类型 [列级别约束条件][默认值],
字段名3,数据类型 [列级别约束条件][默认值],
字段名4,数据类型 [列级别约束条件][默认值],
......
[表级别约束条件]
);
使用create table 创建表时,必须要指定以下信息:
要创建表的名称,不区分大小写,不能使用SQL语言中的关键字
数据表中的每一列(字段)的名称和数据类型,如果创建多个列,需要用逗号隔开。
示例:
create database test;
use test;
create table tb_emp1(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
1.1.2 显示所有的表
show tables;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lL8jVIW-1611202987424)(C:\Users\book\AppData\Roaming\Typora\typora-user-images\image-20210115164810220.png)]
1.1.3 显示特定的表内结构
desc tb_emp1;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UETVIjyH-1611202987426)(C:\Users\book\AppData\Roaming\Typora\typora-user-images\image-20210115165114932.png)]
1.1.4 使用主键约束
主键数据唯一,并且不允许为空。
可以唯一的标识表中的一条记录,可以加快查询速度
分为两种类型:单字段主键&多字段联合主键。
1.1.4.1 单字段主键
主键由一个字段组成
SQL语句格式分为以下两种个情况
1.1.4.1.1 在定义列的同时指定主键
语法规则:
字段名 数据类型 PRIMARY KEY [默认值]
实例:
create table tb_emp2(
id INT(11) primary key,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
desc tb_emp2结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9NKLy5T-1611202987428)(C:\Users\book\AppData\Roaming\Typora\typora-user-images\image-20210115170141304.png)]
可以发现在id行KEY列有一个PRI标记,即主键标记
1.1.4.1.2 在定义完所有的列之后指定主键
语法规则:
[CONSTRAINT]PRIMARY KEY [字段名]
示例:
create table tb_emp3(
id INT(11),
name VARCHAR(25),
deptld INT(11),
salary FLOAT,
primary key(id)
)
可以产生同样的结果
1.1.4.2 多字段联合主键
主键由多个字段联合组成
语法规则:
PRIMARY KEY [字段1,字段2,...,字段n]
示例:
假设表中没有主键id,为了唯一确定一个员工,可以联合使用name和deptId作为主键。
create table tb_emp4(
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(name, deptID)
)
显示表结构
desc tb_emp4;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnbOz35H-1611202987430)(C:\Users\book\AppData\Roaming\Typora\typora-user-images\image-20210115183924452.png)]
1.1.5 使用外键约束
外键:用来在两个表的数据之间简历链接,它可以时一列或者多列。一个表可以由一个或者多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空,则每一个外键值必须等于另一个表中主键的某个值
语法规则
[CONSTRAINT]FOREIGN KEY 字段名1[,字段名2,字段名3,······]
REFERENCE 主表列1[,主表列2,主表列3,······]
示例:
部门表:主表
create table tb_dept(
id int(11)primary key,
name varchar(25),not null,
location varchar(25)
);
数据表:从表
create table tb_emp5(
id int(11)primary key,
name varchar(25),
deptd int(11),
salary float,
constraint fk_emp_dept foreign key(deptId) references tb_dept1(id)
);
1.1.6 使用非空约束
指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
字段名 数据类型 not null
1.1.7 使用唯一约束
要求该列唯一,允许为空。但只能出现一个空值
两种定义方式:
在定义完列之后直接指定唯一约束 字段名 数据类型 UNIQUE
示例:
create table tb_dept2(
id int(11) primary key,
name varchar(25) unique,
location varchar(50)
);
在定义完所有列之后指定唯一约束 [constraint ] UNIQUE()
示例:
create table tb_dept3(
id int(11) primary key,
name varchar(25),
location varchar(50),
constraint sth unique(name)
);
1.1.8 使用默认约束
字段名 数据类型 DEFAULT 默认值
1.1.9 设置表的属性值自动增加
一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分
字段名 数据类型 AUTO_INCREMENT
示例:
create table tb_emp8(
id int(11) primary key auto_increment,
name varchar(25) not null,
deptld int(11),
salary float
)
2. 查看数据表结构
desc 表名
查看表基本结构
shwo create table
显示创建表时的语句,不加G会使格式不易阅读。
3. 修改数据表
主要是通过 alter table 实现的
3.1 修改表名
alter table rename ;
3.2 修改字段的数据类型
alter table modify
3.3 修改字段名
alter table change ;
3.4 添加字段
alter table add [约束条件][first|after 已存在字段名]:
[]内的为可选
first代表在第一个的位置添加字段
after 已存在的字段名,表示在已经存在的字段名之后添加字段
3.5 删除字段
alter table drop ;
最好在删除前desc一下查看表内有哪些字段
3.6 修改字段的排列位置
在建成表之后,修改其排列顺序
alter table modify first|after ;
first 为将 字段1 改为 第一个 的位置
after 为将 字段1 放到 字段2 之后的位置
3.7 更改表的存储引擎
alter table engine=;
3.8 删除表的外键约束
alter table drop foreign key
4.删除数据表
删除数据表就是将数据库中已经存在的表删除
注意!
在删除的时候表的,表的定义和表中的所有数据也会被删除。因此,在进行表的删除操作前,最好对表中的数据做一个备份,以免造成无法挽回的后果。
4.1 删除没有被关联的表
drop table [if exists] 表1,表2,······,表n;
drop table 可以删除一个或者多个没有被其他表关联的数据表。
如果要删除的表不存在,会报错误信息:ERROR 1051 (42S02): Unknow table ‘表名’。
参数 [ if exists] 用来判断要删除的表是否存在,如果加上这个参数,在删除表的时候,如果表不存在,SQL语句也会执行成功。只不过会发出warning。
4.2 删除被其他表关联的主表
一个表作为父表是不能直接被删除的,可以先删除子表,再删除父表;但有时候我们要留下子表,删除父表,这个时候解除子表和父表的链接就可以删除父表了。
解除关系
alter table 父表 drop foreign key 连接名;
创建关系
constraint 链接名 foreign key (子表字段) references 父表(父表字段)
野生NOTES
使用TIME类型的DHH时,注意如果表示小时,不要直接写7,要写成07。
修改时区 set time_zone='+10:00'; # 设置为东十区
正则表达式 '^' # 匹配其后面的字符开头的字符
'$' # 匹配其后面的字符结尾的字符
'.' # 匹配任何一个单个字符
'[...]' # 匹配在方括号里面的任何字符,例如[a-z]匹配任意字符,[0-9]匹配任意数字,[a,b,c]匹配a,b或者c
'*' # 匹配零个或者多个在它前面的字符,例如 x* 匹配任意多个x,”.*“匹配任何数量的任意字符