在实际开发中,数据表的数据是非常多的,保证数据的准确是至关重要的。MySQL 提供了数据的完整性约束,主要包括实体完整性,域完整性和引用完整性。
实体完整性是对关系中的记录进行约束,即对行的约束。
一,主键约束
主键(promary key)用于唯一的标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自另一个表中的特定记录。一个表的主键可以由多个关键字共同组成,并且主键的列不能包含空值。主键的值能唯一标识表中的每一行,这就好比所有人都有身份证,每个人的身份证号是不同的,能唯一标识每一个人。
通过一个案例演示未设置组件会出现的问题。首先创建一张订单表 orders。
然后向表中添加一条数据。
再次向表中插入数据,新插入数据的 oid 仍然为1。
该表中此时有两个订单数据,并且两个订单的 oid 都为1.但订单号相同,商品的付款,送货等流程可能会出现问题。为了避免这种问题,在此处可以为表添加主键约束,为已经存在的表设置主键的语法如下:
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
在以上语法中,表名表示需要修改的已存在的表,PRIMARY KEY 代表主键,列名表示需要设置为主键的列。
为 orders 表添加主键约束,设置 oid 为主键。因为表中已经存在两条 oid 相同的数据,所以不可以直接添加主键,需要删除其中一条。
设置主键。
ALTER TABLE orders ADD PRIMARY KEY(oid);
oid 字段的 Key 值为 PRI,代表主键。再向表中添加一条数据,oid 仍然为1.
添加数据失败,这是因为主键对其进行了约束,新插入的数据主键不能重复。
注意:定义了主键的字段值不能为 NULL 。
在创建表时就可以为字段添加主键约束,具体语法格式:
CREATE TABLE 表名(
字段名 数据类型 PRIMARY KEY
);
创建订单表 order2,在创建表的同时为 oid 列添加主键约束。
CREATE TABLE orders2(
-> oid INT PRIMARY KEY,
-> total DOUBLE,
-> name VARCHAR(20),
-> phone VARCHAR(20),
-> addr VARCHAR(50)
-> );
oid 字段的 Key 值为 PRI ,说明主键约束添加成功。
随着业务的复杂,可能会需要多字段的主键约束,列如手机接收信息,这时通过手机号就不能够唯一确定一条记录,可能一个手机号在一天中接收了很多信息。解决这个问题可以添加主键约束为手机号和时间戳两个列,根据两个列的数据能够唯一确定一条记录,添加多字段的主键约束的语法格式如下:
CREATE TABLE 表名(
字段名1 数据类型,
字段名2 数据类型,
.....
PRIMARY KEY(字段名1, 字段名2, 字段名n)
);
PRIMARY KEY 中的参数表示构成主键的多个字段的名称。
创建订单表 orders3, 在创建表时同时为 oid 和 pid 两列添加主键约束。
CREATE TABLE orders3(
-> oid INT,
-> pid INT,
-> total DOUBLE,
-> name VARCHAR(20),
-> phone VARCHAR(20),
-> addr VARCHAR(50),
-> PRIMARY KEY(oid,pid)
-> );
oid 字段和 pid 字段的 Key 值都为 PRI ,多个字段主键约束添加成功。
二,唯一约束
唯一约束用于保证数据表中字段值的唯一性,在 MySQL 中使用 UNIQUE 关键字添加唯一约束。在创建表时为某个字段添加唯一约束的具体语法格式如下:
CREATE TABLE 表名(
字段名 数据类型 UNIQUE,
....
);
通过具体案例演示唯一约束的用法。
创建员工表 emp。
CREATE TABLE emp(
-> id INT PRIMARY KEY,
-> name VARCHAR(20),
-> phone VARCHAR(20) UNIQUE,
-> addr VARCHAR(50)
-> );
id 字段 Key 值为PRI,主键约束添加成功。phone 字段 Key 值为 UNI ,唯一约束添加成功。向表中插入两条数据。
注意:被定义成唯一约束的字段,字段值不能相同。但是可以为 NULL。
唯一约束也可以添加到已经创建完成的表中,语法格式如下:
ALTER TABLE 表名 ADD UNIQUE(列名);
三,自动增长列
数据表中的 id 字段一般从1开始插入,不断增加,每次插入新数据时,都要添加一个 id 字段的值,当数据内容庞大时,容易出错。为了解决这个问题,可以将 id 字段的值设置为自动增加。在 MySQL 中使用 AUTO_INCREMENT 关键字设置表字段值自动增加。在创建表时将某个字段的值设置为自动增长,语法格式如下:
CREATE TABLE 表名(
字段名 数据类型 AUTO_INCREMENT,
....
);
通过具体案例演示自动增长列的用法。
创建员工表 emp2。
CREATE TABLE emp2(
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(20),
-> phone VARCHAR(20)
-> );
此时向 emp2 表添加数据进行验证。
数据在插入的同时 id 字段自动生成了数值1,2。
此外,也可以为已经创建完成的表字段设置自动增长列,语法格式如下:
ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY AUTO_INCREMENTL;