一、数据库约束的概述

  1、约束的作用

    对表中的数据进行限制,保证数据的正确性、有效性和完整性。

    一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。

  2、约束的种类

约束名约束关键字
主键约束primary key
唯一约束unique
非空约束not null
外键约束foreign key
检查约束check 注:MySQL不支持

二、主键约束

  1、主键的作用

    主键的作用:用来唯一标识数据库中的每一条记录。

  2、哪些字段应该作为表的主键

    通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。

    主键就是给数据库和程序使用的,不是给最终的客户使用的,所以主键有没有含义没有关系,只有不重复,非空就行。

  3、创建主键

    •    主键关键字:primary key
    •    主键的特点: ① 非空 not  null; ② 唯一
    •    基本语法     

      在创建表时,添加主键约束

create table student(
	id int primary key,-- 给id添加主键约束
	name varchar(20)
);

      ② 删除主键

ALTER TABLE student DROP PRIMARY KEY;

     

      ③ 创建完表后添加主键(两种方式)

ALTER TABLE student MODIFY id int PRIMARY KEY;   
ALTER TABLE student add primary key(字段名);

    注意

      ① 主键非空且唯一

      ② 一张表只能有一个字段(组)作为主键

      ③ 主键就是表中记录的唯一标识

  4、主键自增

    主键如果让自己添加很有可能重复,所以希望在每次插入新记录时,数据库自动生成主键字段的值。

    基本语法格式:

    ① 创建表时,添加主键约束,并且完成主键自增长(字段类型必须是整数类型)

create table student(
	id int primary key auto_increment,-- 给id添加主键约束
	name varchar(20)
);

    ② 删除自动增长

ALTER TABLE stu MODIFY id INT;

    ③ 创建表完后,添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

  5、修改自增长的默认值起始值

    默认 auto_increment 的开始值是 1,如果希望修改起始值,使用下面语法。

    ① 创建时指定起始值

CREATE TABLE 表名(
    列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

    ② 创建好以后修改起始值

ALTER TABLE 表名 AUTO_INCREMENT=起始值;

  6、delete 和 truncate 对自增长的影响

    •   delete:删除所有记录之后,自增长没有影响。
    •   truncate:删除以后,自增长又重新开始。

三、唯一约束

  1、概念

    唯一约束概念:表中的某一列不能出现重复的值,必须保证值的唯一性。

  2、基本语法格式

    ① 创建表时,添加唯一约束

CREATE TABLE student(
	id INT,
	phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);

              注意:在MySQL中,唯一约束限定的列的值可以有多个 null。(null表示不确定,即不相等)

    ② 删除唯一约束

ALTER TABLE student DROP INDEX phone_number;

    ③ 在创建表后,添加唯一约束

ALTER TABLE student MODIFY phone_number VARCHAR(20) UNIQUE;

四、非空约束

  1、非空约束概念

    非空约束:即数据表的某一列不能为 null。

  2、基本语法格式

    ① 创建表时添加约束

CREATE TABLE student(
	id INT,
	NAME VARCHAR(20) NOT NULL -- name为非空
);

    ② 创建表完后,添加非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

    ③ 删除 某个字段的非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20);

  3、为某字段设置默认值

    语法格式

字段名 字段类型 DEFAULT 默认值

          Demo:

 1 create table student(
 2     id int,
 3     name varchar(20),
 4     sex varchar(2) default '男'
 5 )
 6
 7 -- 添加一条记录,使用默认值
 8 insert into student values(6,'赵六',default)
 9 -- 添加一条记录,不适用默认值
10 insert into student values(8,'钱九','男')

   扩展:如果一个字段设置了非空和为约束,该字段与主键有什么区别?

     (1)主键在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列

     (2)自增长只能用在主键上。

五、外键约束

  1、单表存储数据的缺点

    单表存储数据可能会造成的缺点:

      ① 数据冗余

      ② 后期还会出现增删改的问题

    解决方式:使用外键约束

  2、外键约束

    外键约束概念:foreign key,让从表中与主表主键对应的那一列,从而保证数据的正确性。

    主表:一方,用来约束别人的表。

    从表:多方,被别人约束的表。

    示意图

    

  3、创建约束的语法

    ① 创建表时增加外键

create table 表名(
	....
	外键列
	[constraint] [外键名称] foreign key (外键列名称) references 主表名称(主表列名称)
);

    ② 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

    ③ 创建表之后添加外键

ALTER TABLE 表名 ADD [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

  4、外键的级联操作

    当改变主表中的主键时,修改失败;在删除主表中的记录时,也出现删除失败。

    级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作。

    级联操作语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
on update cascade; 表示级联更新操作
on delete cascade; 表示级联删除操作

六、数据约束总结

约束名关键字说明
主键primary key

① 唯一

② 非空

默认default如果一列没有值,使用默认值
非空not null这一列必须有值
唯一unique这一列不能有重复值
外键foreign key主表中主键列,在从表中外键列
01-19 13:20