mysql(4)--数据库约束

约束

概念和分类

概念

  • 约束是作用域表中列上的规则,用于限制加入表的数据
  • 约束的存在保证了数据库中数据的正确性,有效性和完整性

约束的分类

约束名称 描述 关键字
非空约束 保证列中所有数据不能有null值 NOT NULL
唯一约束 保证列中所有数据各不相同 UNIQUE
主键约束 主键是一行数据的唯一标识,要求非空且唯一 PRIMARY KEY
检查约束 保证列中的值满足某一个条件 CHECK
默认约束 保存数据时,未指定值则采用默认值 DEFAULT
外键约束 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 FOREIGN KEY

mysql不支持检查约束
自增长主键需要在primary key后面添加上auto_increment

约束和案例

约束的使用

在创建表的语句中,在类型后添加约束的名称即可,但是如果要使用自增长,首先要确保自增长的键是数字类型,其次在创建的语句里要添加上auto_increment,并且该键要是唯一约束

非空约束

添加约束

  1. 在创建表的时候添加约束
create table 表名(
	列名 数据类型 not null,
	...
);
  1. 创建完表后添加
alter table 表名 modify 字段名 数据类型 not null;

删除约束

alter table 表名 modify 字段名 数据类型;

唯一约束

添加约束

  1. 在创建表的时候添加约束
create table 表名(
	列名 数据类型 unique[auto_increment],
	...
);

create table 表名(
	列名 数据类型,
	...
	[constraint] [约束名称] unique(列名)
);
  1. 创建完表后添加
alter table 表名 modify 字段名 数据类型 unique;

删除约束

alter table 表名 drop index 字段名;

主键约束

添加约束

  1. 在创建表的时候添加约束
create table 表名(
	列名 数据类型 primary key[auto_increment],
	...
);

create table 表名(
	列名 数据类型,
	...
	[constraint] [约束名称] primary key(列名)
);
  1. 创建完表后添加
alter table 表名 add primary key(字段名);

删除约束

alter table 表名 drop primary key;

默认约束

添加约束

  1. 在创建表的时候添加约束
create table 表名(
	列名 数据类型 default 默认值,
	...
);
  1. 创建完表后添加
alter table 表名 alter 列名 set default 默认值;

删除约束

alter table 表名 alter 列名 drop default;

案例

create table emp(
id int primary key auto_increment,-- 主键且自增长
ename varchar(50) not null,-- 姓名,非空
joindate date not null,-- 入职日期,非空
salary double(7,2) not null,-- 工资,非空
bonus double(7,2) DEFAULT 0 -- 奖金,没有的话默认为0
);
insert into emp(id,ename,joindate,salary,bonus) values(1,'张三','1999-11-11',8800,5000);
insert into emp(id,ename,joindate,salary) values(2,'李四','1999-11-11',8800);
insert into emp(ename,joindate,salary,bonus) values('王五','1999-1-12',9900,4500);
insert into emp(ename,joindate,salary,bonus) values('赵六','2011-12-12',11000,4000);
select * from emp;
+----+-------+------------+----------+---------+
| id | ename | joindate   | salary   | bonus   |
+----+-------+------------+----------+---------+
|  1 | 张三  | 1999-11-11 |  8800.00 | 5000.00 |
|  2 | 李四  | 1999-11-11 |  8800.00 |    0.00 |
|  3 | 王五  | 1999-01-12 |  9900.00 | 4500.00 |
|  4 | 赵六  | 2011-12-12 | 11000.00 | 4000.00 |
+----+-------+------------+----------+---------+
4 rows in set (0.02 sec)

外键约束

概念
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.

语法

  1. 创建表时添加外键约束
create table 表名(
	列名 数据类型,
	...
	[constraint] [外键名称] foreign key(外键列名) references 主表(主表列名)
);

注:外键名称是给自己设置的外键起的名字,对原表的列名没有影响,作为标注,可以用fk_表1_表2来表示两个表的关联关系

  1. 建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主表名称(主表列名称);
  1. 删除约束
alter table 表名 drop foreign key 外键名称;

案例
在部门中删去某一个部门后,如果原先没有构成外键约束,部门的消失对emp表格中的dep_id不会产生影响。

image

由于是emp员工表中的dep_id与dept表的id相关联,所以emp员工表是从表,dept部门表是主表

创建相关信息

create table dept(
	id int primary key auto_increment,
	dep_name varchar(20),
	addr varchar(20)
);

create table emp(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,
	-- 添加外键 dep_id , 关联 dept 表的di主键
	constraint fk_emp_dept foreign key(dep_id) references dept(id)
);

insert into dept(id,dep_name,addr) values(1,'研发部','广州');

insert into dept(id,dep_name,addr) values(2,'销售部','深圳');

insert into emp(name,age,dep_id) values('张三',20,1);
insert into emp(name,age,dep_id) values('李四',20,1);
insert into emp(name,age,dep_id) values('王五',20,1);
insert into emp(name,age,dep_id) values('赵六',20,2);
insert into emp(name,age,dep_id) values('孙七',22,2);
insert into emp(name,age,dep_id) values('周八',18,2);

注:由于添加了外键后两个表是有从属关系的,比如在这里emp是从表,而dept是主表,所以必须先创建dept,先插入dept,才能对emp表进行创建和数据的插入;另外删除也保证以一定的规则,删除的时候,先删除从表里的元素,才能删除主表的对应元素

posted @ 2022-05-07 22:33  ShaunY  阅读(18)  评论(0编辑  收藏  举报