MySQL 数据的完整性——实体完整性

在实际开发中,数据表的数据是非常多的,保证数据的准确是至关重要的。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;
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值