文章目录
一、表的约束
1、约束类型
非空约束
不能为空值NULL
not null
主键约束
唯一非空,能唯一标识一行记录,一个表只能有一个主键
primary key
唯一约束
唯一,并且可以为空值NULL
,并且空值NULL
可以不唯一
unique
外键约束
主表 → 引用列
外键表 → 外键列
被引用的列必须是主键(primary key
)或者唯一键(unique
)
扫描二维码关注公众号,回复:
10811558 查看本文章
外键表的外键列 引用 主表的引用列
foreign key
检查约束
在MySQL中,check
关键字是不起作用的。
如果想要限制某一列的取值范围,应该使用触发器来实现。
默认值约束
设置默认值
Tips:有些分类中也不把默认值当成约束
default
2、添加约束
添加约束的时机
- 创建表的时候
- 修改表的时候
添加约束的分类
- 列级别:所有约束都可以在列级别(MySQL中,外键约束写在列级别是不起作用的)
- 表级别:除了非空约束、默认值约束以外,其他约束都支持写在表级别
二、表的CRUD操作(DDL语句)
1、C(Create):创建
总体格式
create table if not exists 表名(
列名1 数据类型1 [default 值1] [列级别约束],
列名2 数据类型1 [default 值2] [列级别约束],
......
列名n 数据类型n [default 值n] [列级别约束],
[表级别约束],
[表级别约束],
......
[表级别约束]
) engine=INNODB default charset=utf8;
创建举例(创建学生表)
create table if not exists student(
sno int primary key,
sname varchar(20) not null,
gender enum('男', '女') default '男',
interest set('游泳', '打球', '跑步'),
age int default 18
);
create table if not exists student(
sno int,
sname varchar(20) not null,
gender enum('男', '女') default '男',
interest set('游泳', '打球', '跑步'),
age int default 18,
constraint stu_sno_pk primary key(sno)
);
2、R(Retrieve):查询
查询当前数据库下所有表的信息
show tables;
查询创建表的结构、信息(字符集等)
show create table 表名;
desc 表名;
Tips:具体的查询数据的操作放到以后讲
3、U(Update):更新
修改表的名字
alter table 表名 rename to 新表名;
rename table 表名 to 新表名;
修改表的字符集
alter table 表名 character set 字符集名称;
给表添加一列
alter table 表名 add 列名 数据类型;
修改表中某一列的名字、数据类型
alter table 表名 change [column] 列名 新列名 新数据类型;
alter table 表名 modify [column] 列名 新数据类型;
删除表中某一列
alter table 表名 drop [column] 列名;
给表添加一个约束
- 添加非空约束
alter table 表名 modify [column] 列名 列类型 not null;
- 添加默认值
alter table 表名 modify [column] 列名 列类型 default 默认值;
- 添加主键约束(列级别)
alter table 表名 modify [column] 列名 列类型 primary key;
- 添加主键约束(表级别)
alter table 表名 add [constraint 约束名] primary key(列名);
- 添加唯一约束(列级别)
alter table 表名 modify [column] 列名 列类型 unique;
- 添加唯一约束(表级别)
alter table 表名 add [constraint 约束名] unique(列名);
- 添加外键约束
alter table 表名 add [constraint 约束名] foreign key(外键列) references 主表名(引用列);
删除表中一个约束
-
删除非空约束
alter table 表名 modify [column] 列名 列类型 [null];
(Tips:要注意之前有没有默认值之类的,否则直接写上面的语句会把默认值也一并删除)
-
删除默认值
alter table 表名 modify [column] 列名 列类型;
(Tips:要注意之前有没有非空约束之类的,否则直接写上面的语句会把默认值也一并删除)
-
删除主键约束 (上面的两种方式是删不掉主键的)
alter table 表名 drop primary key;
-
删除唯一约束
alter table 表名 drop index(列名) 约束名;
(Tips:如果没有具体约束名是无法删除的)
-
删除外键约束
alter table 表名 drop foreign key(列名) 约束名;
(Tips:如果没有具体约束名是无法删除的)
4、D(Delete):删除
删除表
drop table 表名;
drop table 表名 if exists 表名;
三、小练习
假设现在有员工表(emp),需要作出以下修改
- 在【员工表】中添加【性别】一列,列名为
gender
、类型为char(2)
、默认值为'男'
alter table emp add column gender char(2) default '男';
- 修改【员工表】中【性别】一列,使其数据类型为
char(4)
alter table emp modify column gender char(4) default '男';
- 修改【员工表】中【性别】一列,使其默认值为
'女'
alter table emp modify column gender char(4) default '女';
- 删除【员工表】中【性别】一列
alter table emp drop column gender;