目录

概念

表的约束类型

非空约束

唯一约束

主键约束

外键约束

默认约束

数据完整性

数据完整性是指数据的可靠性和准确性

  1. 实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过索引,唯一约束,主键约束或标识列属性)
  2. 域完整性:限制类型(数据类型),格式(通过检查约束规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)
  3. 引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系,引用完整性确保键值在所有表中一致,这样的一致辞性要求不能引用不存在的值,如果一个键值更改了,那么在整个数据库中,对该键值对的引用要进行一致的更改。
  4. 自定义完整性:用户自己定义的业务规则。

概念

        约束是在表上强制执行的数据校验规则。约束主要用于保证数据库的完整性。当表中数据又相互依赖时,可以保护相关数据不被删除。约束的存在保证了数据库中数据的正确性、有效性和完整性。约束在创建表的时候添加比较合适。

大部分数据库支持下面五类完整性约束:

  • 非空约束:关键字是 NOT NULL
    保证列中所有的数据不能有null值。
  • 唯一约束:关键字是 UNIQUE
    保证列中所有数据各不相同
  • 主键约束:关键字是 PRIMARY KEY
    主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给每张表添加一个主键列用来唯一标识数据。
  • 检查约束:关键字是 CHECK
    保证列中的值满足某一条件。
    例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。
    注意:MySQL不支持检查约束
    这样是不是就,没办法保证年龄在指定的范围内了?从数据层面不能保证,以后可以在Java代码中进行限制,一样也可以实现要求
  • 外键约束:关键字是 FOREIGN KEY
    外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性  
  • 默认约束:关键字是 DEFAULT
    保存数据时,未指定值采用默认值

创建约束的时机

  1. 在创建表的同时创建(列级约束)
    语法:
    列定义 约束类型
  2. 在创建表后创建(修改表,表级约束)
    语法:
# 1
alter table 表名 add constraint 约束名 约束类型(要约束的列名);

#2
ALTER TABLE 表名 MODIFY 字段名 数据类型 约束类型;

表的约束类型

非空约束

概念:非空约束用于保证列中所有数据不能有NULL值

添加约束

-- 创建表时添加非空约束
CREATE TABLE 表名(
    列名 数据类型 NOT NULL,
    ...
);


--创建表后添加非空约束
-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 NOT NULL(要约束的字段);  MySQL不支持这种建表后添加非空约束

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;

删除约束

ALTER TABLE 表名 MODIFY 字段名 数据类型;

唯一约束

概念:唯一约束用于保证列中所有数据各不相同

唯一约束条件的字段允许出现多个null
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引
如果不给唯一约束起名,该唯一约束默认与列名相同

添加约束

-- 创建表时添加唯一约束
CREATE TABLE 表名(
    字段名 数据类型 UNIQUE [AUTO_INCREMENT],
    -- AUTO_INCREMENT:当不指定值的时候会自动增长
    ...
);


-- 建表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);

删除约束

ALTER TABLE 表名 DROP INDEX 字段名;

主键约束

概念
        主键是一行数据的唯一标准,要求非空且唯一,一张表只能有一个主键

  • 主键字段可以是单字段或者是多字段的组合
  • 当建立主键约束时,MySQL为主键创建对应的索引

语法

添加约束

-- 创建表时添加主键约束
CREATE YABLE 表名(
    字段名 数据类型 PRIMARY KEY [AUTO_INCREAMENT],
    ...
);

CREATE TABLE 表名(
    列名 数据类型,
    [constraint] [约束名称] PRIMARY KEY(列名)
);


-- 建表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY;

外键约束

概念 
        外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
        外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
        外键确保了相关的两个字段的两个关系:
        子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束)
        当主表的记录被子表参照时,主表记录不允许被删除
        外键参照的只能是主表主键或者时唯一键,保证子表记录可以准确定位到被参照的记录。

语法

添加外键约束

-- 格式
FOREIGN KEY (外键列名) REFERENCES 主表(参照列)

CREATE TABLE tb_dept(
    dept_id int PRIMARY KEY,
    NAME VARCHAR(18),
    description VARCHAR(255)
);

CREATE TABLE te_employee(
    employee_id int PRIMARY KEY,
    NAME VARCHAR(18),
    gender VARCHAR(10),
    dept_id int REFERENCES tb_dept(dept_id),
    address VARCHAR(255) 
);



-- 建表之后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

删除外键约束

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

默认约束

概念
       
保存数据时,对未指定值采用默认值

语法

添加约束

-- 创建表时添加默认约束
CREATE TABLE 表名(
    列名 数据类型 DEFAULT 默认值,
    ...
);

-- 建完表之后田间默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

删除约束

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;