完整性约束

什么是完整性约束?

完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始就不能添加到表中。

数据完整性约束指的是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
–百度百科

主键约束

指定主键约束使用PRIMARY KEY关键字
注意:主键列的值不能为NULL,不能重复!
主键最大的特点就是可以唯一的标识一条记录

  • 创建表:定义列时指定主键:
    CREATE TABLE stu(
    sid CHAR(6) PRIMARY KEY,
    sname VARCHAR(20),
    age INT,
    gender VARCHAR(10)
    );
  • 创建表:定义列之后独立指定主键:
    CREATE TABLE stu(
    sid CHAR(6),
    sname VARCHAR(20),
    age INT,
    gender VARCHAR(10),
    PRIMARY KEY(sid)
    );
  • 修改表时指定主键:
    ALTER TABLE stu ADD PRIMARY KEY(sid);
  • 删除主键(只是删除主键约束,而不会删除主键列):
    ALTER TABLE stu DROP PRIMARY KEY;

主键自增长

MySQL提供了主键自动增长的功能!当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大主键值+1,也就不会出现重复主键的可能了。

  • 创建表时设置主键自增长(主键必须是整型才可以自增长):
    CREATE TABLE stu(
    sid INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(20),
    age INT,
    gender VARCHAR(10)
    );

  • 修改表时设置主键自增长:
    ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;

  • 修改表时删除主键自增长:
    ALTER TABLE stu CHANGE sid sid INT;

非空和唯一约束

非空(不允许该列的值为空)

NOT NULL

CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
age INT,
gender VARCHAR(10)
);

注意:如果某列被设置为非空约束!那么插入记录的时候就必须有值否则就报错!

唯一(该列的值不能重复,但可以为null值)

UNIQUE

CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) UNIQUE
);

外键约束(重点)

外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。
主外键是构成表与表关联的唯一途径!

(从表引用主表,从表是依赖主表的。通常多的一方就是从表,或者说要引用主表的表就是从表)

1) 一对一:

例如person表和card表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:

  1. 在card表中添加外键列(相对person表),并且给外键添加唯一约束;

    – 一对一(夫妻表,丈夫表)
    – 从表 外键是定义在从表里的
    CREATE TABLE wife(
    wid INT PRIMARY KEY,
    wname VARCHAR(20),
    hid INT UNIQUE, – 外键 唯一
    CONSTRAINT fk_wife_husband FOREIGN KEY(hid) REFERENCES husband(hid)
    );
    – 主表,
    CREATE TABLE husband(
    hid INT PRIMARY KEY,
    hname VARCHAR(20)
    );

  2. 给card表的主键添加外键约束(相对person表),即card表的主键也是外键。

    – 从表 外键是定义在从表里的
    CREATE TABLE wife(
    wid INT PRIMARY KEY,
    wname VARCHAR(20),
    – 不需要单独指定外键列
    – 把主键作为外键
    CONSTRAINT fk_wife_husband2 FOREIGN KEY(wid) REFERENCES husband(hid)
    );
    – 主表,
    CREATE TABLE husband(
    hid INT PRIMARY KEY,
    hname VARCHAR(20)
    );

2) 一对多(多对一):

最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。emp和dept的关系,从dept来看就是一对多,而从emp的角度来看就是多对一!这种情况都是在多方创建外键!

部门表
CREATE TABLE dept(
deptno INT primary key,
dname varchar(14),
loc varchar(13)
);

员工表
CREATE TABLE emp(
empno INT primary key,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT,
– 添加外键约束
CONSTRAINT fk_dept_emp FOREIGN KEY(deptno) REFERENCES dept(deptno)
) ;

移除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 约束名称

添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名称 FOREIGN KEY(外键列) REFERENCE 主表(主键)

3) 多对多:

例如stu和teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表stu_tea表,给出两个外键,一个相对stu表的外键,另一个相对teacher表的外键。

在这里插入图片描述

CREATE TABLE student(
	id INT PRIMARY KEY,
	`name` VARCHAR(20)
);


CREATE TABLE teacher(
	id INT PRIMARY KEY,
	`name` VARCHAR(20)
);

-- 建立多对多的关系
-- 通过第三张表存储关系
CREATE TABLE stu_tea(
	id INT PRIMARY KEY,
	sid INT,  -- 外键列
	tid INT,  -- 外键列
	CONSTRAINT fk_st_s FOREIGN KEY(sid) REFERENCES student(id),
	CONSTRAINT fk_st_t FOREIGN KEY(tid) REFERENCES teacher(id)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值