MySQL: 5.约束

本文深入探讨了MySQL数据库中的约束,包括主键约束(单列与复合主键的创建与修改)、外键约束(确保数据一致性)、唯一约束、检查约束(MySQL中被忽略)和默认值及非空约束。此外,还介绍了如何查看和管理这些约束。
摘要由CSDN通过智能技术生成

约束

一、主键约束 PRIMARY KEY

MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。

主键应该遵守下面的规则:

  • 每个表只能定义一个主键。
  • 唯一性原则。主键值必须唯一标识表中的每一行,且不能为NULL,即表中不可能存在两行数据有相同的主键值。
  • 最小化原则。复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。

创建表时设置主键约束

(1)定义列时设置主键约束

在定义列的同时指定主键,语法规则如下:

<字段名> <数据类型> PRIMARY KEY [默认值],

这种方法不允许将多个列同时声明为主键,多个列同时被声明为主键的话会报错。

例子:

mysql> CREATE TABLE `stu` (`id` INT(11) PRIMARY KEY, `name` VARCHAR(20), `score` FLOAT(4,1));
Query OK, 0 rows affected (0.11 sec)

mysql> DESC `stu`;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| score | float(4,1)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
(2)定义完所有列之后设置主键约束

在定义完所有列之后,指定主键的语法格式为:

<列定义1>, ..., <列定义n>, PRIMARY KEY (字段名)

例如:

mysql> CREATE TABLE `stu` (`id` INT(11), `name` VARCHAR(20), PRIMARY KEY (`id`));
Query OK, 0 rows affected (0.05 sec)

mysql> DESC `stu`;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
(3)创建表时设置复合主键

设置复合主键的话只能在所有列定义的最后统一声明主键约束,在列定义中声明主键的话只能设置单个主键,不能设置复合主键。

语法,定义完所有列之后:

<列定义1>, ..., <列定义n>, PRIMARY KEY (字段1,字段2,…,字段n)

例如:
如果没有id的话,可以将员工姓名与部门id作为复合主键。

mysql> CREATE TABLE `staff` (`name` VARCHAR(20), `deptId` INT(11), `salary` DEC(10,2), PRIMARY KEY (`name`, `deptId`));
Query OK, 0 rows affected (0.06 sec)

mysql> DESC `staff`;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| name   | varchar(20)   | NO   | PRI | NULL    |       |
| deptId | int(11)       | NO   | PRI | NULL    |       |
| salary | decimal(10,2) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

修改表时添加主键约束

AL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值