约束是作用于表中字段上的规则,用于限制储存在表中的数据;其目的是保证数据的正确,有效和完整性。
活动地址:CSDN21天学习挑战赛
一、主键约束
1、创建
(1)单列主键
方式1:创建字段时
字段名 数据类型 primary key,
create table emp1 (
-- primary key 主键约束
-- 不能为空且不能重复
eid int primary key,
name varchar(20),
deptld int,
salary double
);
方式2:字段创建好后
constraint 约束名 primary key(字段名)
主键作用
-- 主键可以唯一标识对应行
-- 主键约束的列非空而且唯一
insert into emp2 values(1001,'张三',10,5000),
-- (1001,'李四',20,6000),不可
(1002,'李四',20,6000),
-- (null,'王五',30,7000),不可
(1003,'李四',20,6000);
(2)联合主键
方式1:字段创建好后
constraint 约束名 primary key(字段1,字段2);
create table emp3(
name varchar(20),
deptId int,
salary double,
-- name deptId 为联合主键
constraint kp2 primary key(name,deptId)
);
注意
-- 只要主键的列不要同时都相同就可
insert into emp3 value('张三',10,4000);
insert into emp3 value('张三',20,4000);
insert into emp3 value('李四',10,4000);
-- 联合主键的每一列都不能为空
insert into emp3 values(null,10,5000);
insert into emp3 values('王五',null,5000);
方式2:通过修改表结构
alter table 表名 add primary key (字段1,字段2);
-- 通过修改表结构添加主键
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table emp4 add primary key (eid,name);
2、删除
alter table 表名 drop primary key;
alter table emp1 drop primary key;-- 单列
alter table emp4 drop primary key;-- 联合
二、自增长约束
1、创建
方式1:
字段名 数据类型 primary key auto_increment,
一个表只能有一个 与主键一致
create table t_user1 (
id int primary key auto_increment,
name varchar(20)
);
insert into t_user1 (name) values('张三');
insert into t_user1 values(null,'李四');
方式2:指定自增长初始值
创建表时
create table 表名(
字段名 数据类型 primary key auto_increment,
...
)auto_increment = 初始值;
create table t_user2(
id int primary key auto_increment,
name varchar(20)
)auto_increment = 100;
insert into t_user2 (name) values('张三');
insert into t_user2 (name) values('张三');
创建表后
alter table 表名 auto_increment = 初始值;
create table t_user3(
id int primary key auto_increment,
name varchar(20)
);
alter table t_user3 auto_increment = 200;
insert into t_user3 (name) values('张三');
insert into t_user3 (name) values('张三');
2、删除
delete/truncate from 表名;
delete from t_user3; -- delete 会在之前的记录上继续追加
insert into t_user3 (name) values('张三');
insert into t_user3 (name) values('张三');
truncate t_user3; -- truncate 不论是否有默认值都从1开始
insert into t_user3 (name) values('张三');
insert into t_user3 (name) values('张三');
三、非空约束
1、创建
方式1:
字段 数据类型 not null,
create table mydb1.t_user4(
id int,
name varchar(20) not null,
address varchar(20) not null -- 指定非空约束
);
insert into t_user4 values(1001); -- 不可以
insert into t_user4(id,name,address) values(1001,null,null); -- 不可以
insert into t_user4(id,name,address) values(1001,'null','null'); -- 字符串null 可以
insert into t_user4(id,name,address) values(1001,'',''); -- 空字符串 可以
方式2:
alter table 表名 modify 字段 数据类型 not null;
create table mydb1.t_user5(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user5 modify name varchar(20) not null;
alter table t_user5 modify address varchar(20) not null;
2、删除
alter table 表名 modify 字段 数据类型;
alter table t_user5 modify name varchar(20);
四、唯一约束
1、创建
方式1:
字段 数据类型 unique;
create table mydb1.t_user6(
id int,
name varchar(20),
phone_number varchar(20) unique -- 设置唯一约束
);
insert into t_user6(phone_number) values(123);
insert into t_user6(phone_number) values(124);
insert into t_user6(phone_number) values(null); -- 可以为空且多个
insert into t_user6(phone_number) values(null);
方式2:
alter table 表名 add constraint 约束名 unique(字段);
create table mydb1.t_user7(
id int,
name varchar(20),
phone_number varchar(20)
);
alter table t_user7 add constraint unique_pn unique(phone_number);
2、删除
alter table 表名 drop index 约束名;
alter table t_user7 drop index unique_pn; -- index后面加约束名
alter table t_user6 drop index phone_number; -- 加字段名字
五、默认约束
1、创建
方式1:
字段 数据类型 default '默认值',
create table mydb1.t_user8(
id int,
name varchar(20),
address varchar(20) default '北京' -- 指定非空约束
);
insert into t_user8(id) values(1);
insert into t_user8(address) values(null);
方式2:
alter 表名 modify 字段 数据类型 default '默认值';
insert into t_user8(id) values(1);
insert into t_user8(address) values(null);
create table mydb1.t_user9(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user9 modify address varchar(20) default '深圳';
insert into t_user9(id) values(1);
insert into t_user9(address) values(null);
2、删除
alter table 表名 modify 字段 数据类型 default null;
alter table t_user9 modify address varchar(20) default null;
六、零填充约束
1、创建
字段 数据类型 zerofill,
create table mydb1.t_user10(
id int zerofill, -- 零填充约束 默认为无符号
name varchar(20),
address varchar(20)
);
insert into t_user10(id) values(1);
insert into t_user10(id) values(22);
2、删除
alter 表名 modify 字段 数据类型;
alter table t_user10 modify id int;
七、检查约束
字段 数据类型 check(条件)
create table t_user11(
age int check(age > 0 && age < 120) comment '年龄'
);
insert into emp5 values(1),(2),(3),(4),(5); -- 可以
insert into emp5 values(111),(1111),(11112),(-10) -- 不可以
八、外键约束
用来让两张表的数据建立联系,从而保证数据的一致性和完整性。
1、创建
方式1:
[constraint <外键名>] foreigin key(字段名) references<主表名>(字段名)
-- 主表
create table if not exists dapt(
detpno varchar(20) primary key,
name varchar(20)
);
-- 从表
create table if not exists emp(
eid varchar(20) primary key,
ename varchar(20),
age int,
dept_id varchar(20),
-- 创建外键约束
-- [constraint <外键名>] foreigin key(字段名) references<主表名>(字段名)
constraint emp_fk foreign key(dept_id) references dapt(detpno)
);
方式2:
alter table 从表 add constraint 外键名 foreign key(字段名) references 主表(字段名);
create table if not exists dapt2(
detpno varchar(20) primary key,
name varchar(20)
);
create table if not exists emp2(
eid varchar(20) primary key,
ename varchar(20),
age int,
dept_id varchar(20)
);
-- 创建外键约束
alter table emp2 add constraint emp_fk2 foreign key(dept_id) references dapt2(detpno);
注意
1、必须先给主表添加数据
2、给从表添加数据时,外键列的值必须依赖主表的主键列
3、主表被依赖的数据不能删除
2、删除
alter table 从表 drop foreign key 字段;
alter table emp drop foreign key emp_fk;