MySQL数据库的基础语法(三)-表的约束-20.5.26

MySQL数据库语言基础-表的约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性

分类:

	1.主键约束	primary key
	2.非空约束 	not null
	3.唯一约束	unique
	4.外键约束	foreign key

主键约束 primary key

	1.非空且唯一
	2.一张表只能有一个字段为主键
	3.主键就是表中记录的唯一标识

	创建表时添加主键约束
create table student
(
	id int primary key,
	name varchar(20) not null
);	

-- 删除主键约束
alter table student drop primary key;
	创建表之后添加主键约束
alter table student modify id int primary key;

主键的自动增长

	如果某一列是数值类型的,使用auto_increment可以完成数值的自动增长
	创建表时添加自动增长约束
create table student
(
	id int primary key auto_increment,
	name varchar(20) not null
);	
-- 这种情况下 可以对用auto_increment修饰的列用null值,语法不会出错
insert into student values (1,'李四');
insert into student values (null,'王五');		-- null值是与上个行记录来进行自增
-- 删除自动增长
alter table student modify id int;
-- 添加自动增长
alter table student modify id int auto_increment;

非空约束 not null

	创建表时添加约束
create table student
( 
 id int    
 name varchar(20) not null; -- 非空约束
);
insert into student values (1,'张三');
insert into student values (2,null);	-- name添加了非空约束条件 所以此条语句会报错

-- 删除 name 的非空约束
alter table student modify name varchar(20); 
-- 此时 name 的非空约束条件取消了 name可以为null
insert into student values (2,null);	-- 这条语句不会报错
	创建表完之后添加非空约束
alter table student modify name varchar(20) not null;

唯一约束 unique

	创建表时添加唯一约束
drop table student; 
create table student
( 
 id int    
 name varchar(20) unique; -- 唯一约束
);
-- 删除唯一约束
alter table student drop index name;


	创建表之后添加唯一约束
alter table student modify name varchar(20) unique;

外键约束 foreign key

	1.涉及多张表之间的相互关系
-- 创建一个表格 用于部门分配活动
create table emp
(
	id int primary key auto_increment,
	name varchar20),
	age int,
	dep_name varchar(20),	-- 部门名称
	dep_location varchar(20) -- 部门位置
);

insert into emp (name,age,dep_name,dep_location) values ('张三',20,'研发部','深圳');
insert into emp (name,age,dep_name,dep_location) values ('李四',21,'创意部','北京');
insert into emp (name,age,dep_name,dep_location) values ('王五',22,'研发部','深圳');
insert into emp (name,age,dep_name,dep_location) values ('赵六',23,'研发部','深圳');
insert into emp (name,age,dep_name,dep_location) values ('田七',25,'创意部','北京');
insert into emp (name,age,dep_name.dep_location) values ('洪八',21,'创意部','北京');
通过观察发现上面添加的数据存在冗余成分,对于操作数据库有很多的不方便,
针对如此情况,我们可以对其表采用拆分的形式,这样就会去除很多冗余成分,
大大提高效率
-- 部门表
create table department
(	
	id int primary key auto_increment,
	dep_name varchar(20),
	dep_location varchar(20)
);
-- 员工表
create table employee
(	
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int	-- 外键对应主表主键的主键

);

insert into department values (null,'研发部','深圳');
insert into department values (null,'创意部','北京');

insert into employee values ('张三',20,1);
insert into employee values ('李四',21,2);
insert into employee values ('王五',22,1);
insert into employee values ('赵六',23,1);
insert into employee values ('田七',25,2);
insert into employee values ('洪八',21,2);

上面将一个表拆分成了两个独立的表,从整体上看,效率的到了很大的提高,但是,只有拆分,还不算完善,拆分的两个表格没有关联性,这不符合我们拆表的初衷。因此,这时就需要用到外键约束条件,使得两个表格能够相互关联。

	在创建表的时候添加外键约束条件
		外键约束的语法
		constraint  外键名称 foreign key 外键字段 references 对应表(主键列名)
-- 部门表
create table department
( 
 id int primary key auto_increment,
 dep_name varchar(20),
 dep_location varchar(20)
);
-- 员工表
create table employee
(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,	-- 外键对应主表的主键
	constraint emp_dep_id 	foreign key dep_id references department(id)
);	

-- 删除外键
alter table employee drop foreign key emp_dep_id;
-- 添加外键
alter table employee add constraint emp_dep_id foreign key dep_id references department(id);

带有外键关联的表格,安全性更高。

	级联操作
		通俗的讲就是一个表关联外键的表主键更新数据,主表中外键字段数据也要自动更新
	语法
	constraint 外键名称 foreign key 外键字段 references 关联表(主键)on update cascade
-- 添加级联更新操作
alter table employee add constraint emp_dep_id foreign key emp_id references department(id) on update cascade;
-- 级联删除操作	慎用
alter table employee add constraint emp_dep_id foreign key emp_id references department(id) on update cascade on delete cascade;

鄙人刚入坑不久
请多多指教

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值