数据表的基本操作

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,”.*“匹配任何数量的任意字符