目录
概念
表的约束类型
非空约束
唯一约束
主键约束
外键约束
默认约束
数据完整性
数据完整性是指数据的可靠性和准确性
- 实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过索引,唯一约束,主键约束或标识列属性)
- 域完整性:限制类型(数据类型),格式(通过检查约束规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)
- 引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系,引用完整性确保键值在所有表中一致,这样的一致辞性要求不能引用不存在的值,如果一个键值更改了,那么在整个数据库中,对该键值对的引用要进行一致的更改。
- 自定义完整性:用户自己定义的业务规则。
概念
约束是在表上强制执行的数据校验规则。约束主要用于保证数据库的完整性。当表中数据又相互依赖时,可以保护相关数据不被删除。约束的存在保证了数据库中数据的正确性、有效性和完整性。约束在创建表的时候添加比较合适。
大部分数据库支持下面五类完整性约束:
- 非空约束:关键字是 NOT NULL
保证列中所有的数据不能有null值。 - 唯一约束:关键字是 UNIQUE
保证列中所有数据各不相同 - 主键约束:关键字是 PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给每张表添加一个主键列用来唯一标识数据。 - 检查约束:关键字是 CHECK
保证列中的值满足某一条件。
例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。
注意:MySQL不支持检查约束
这样是不是就,没办法保证年龄在指定的范围内了?从数据层面不能保证,以后可以在Java代码中进行限制,一样也可以实现要求 - 外键约束:关键字是 FOREIGN KEY
外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性 - 默认约束:关键字是 DEFAULT
保存数据时,未指定值采用默认值
创建约束的时机:
- 在创建表的同时创建(列级约束)
语法:
列定义 约束类型 - 在创建表后创建(修改表,表级约束)
语法:
# 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;