MySql之约束

发布于:2023-01-19 ⋅ 阅读:(443) ⋅ 点赞:(0)

​约束是作用于表中字段上的规则,用于限制储存在表中的数据;其目的是保证数据的正确,有效和完整性。

活动地址: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;

本文含有隐藏内容,请 开通VIP 后查看