约束——主键约束&外键约束&级联更新/删除
* 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。
* 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、
员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、
hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、
薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)
6、主键约束-primary key-PK
6.1 主键涉及到的术语:
-主键约束
-主键字段
-主键值
6.2主键约束、主键字段、主键值的关系?
表中的某个字段添加主键约束之后,该字段被称为主键字段,主键字段中出现的每一个数据被称为主键值。
6.3主键的作用:作为某行纪录的唯一标识
给某个字段添加主键约束(primary key)之后,该字段不能重复,且不能为空。
效果和not null unique相同,但是本质不同。
主键约束除了可以做到not null unique之外,主键字段还会默认添加‘索引-index’。
6.4一张表应该有主键字段,若没有,表示这张表是无效的。
主键值是当前行数据的唯一标识,是当前行数据的身份证号。
即使表中的两行记录相关的数据是相同的,但是只要主键值不同,便认为这两行是完全不同的数据。
6.5 【单一主键】:给一个字段添加主键约束。
//单一主键
//列级定义方式/列级约束
drop table if exists t_user;
create table t_user(
id int(10) primary key,
name varchar(32)
);
//单一主键
//表级定义方式/表级约束
drop table if exists t_user;
create table t_user(
id int(10),
name varchar(32),
primary(key)
);
//单一主键
//表级定义方式/表级约束
//起名
drop table if exists t_user;
create table t_user(
id int(10),
name varchar(32),
constraint t_user_id_pk primary key(id)
);
mysql> desc t_user;
+-------+-------------+------+-----+---------+-------+
| Field | Type |Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | |
| name | varchar(32) |YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
6.6 【复合主键】:给多个字段联合添加一个联合主键。
//单一主键
//表级定义方式/表级约束
//起名
drop table if exists t_user;
create table t_user(
id int(10),
name varchar(32),
email varchar(128),
constraint t_user_ib_name_pk primary key(id,name)
);
mysql>desc t_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type |Null | Key | Default | Extra |
+-------+--------------+------+-----+--