MySQL 02:表约束与表关系

表约束

1.非空约束(NULL )

数据库字段的某个值是否可以为空, NULL 字段值可以为空, NOT NULL 字段值不能为空。当字段设置为空时,插入值就必须插入值,否则就会报错。

(1) 设置非空约束(修改)

ALTER TABLE 表名 MODIFY 字段名 类型 NOT NULL

mysql> ALTER TABLE `student` MODIFY `name` VARCHAR(20) NOT NULL;

(2)取消非空约束(修改)

ALTER TABLE 表名 MODIFY 字段名 类型 NULL

mysql> ALTER TABLE `student` MODIFY `name` VARCHAR(20) NULL;

2.唯一约束(unique key)

(1)添加唯一约束

字段添加唯一约束之后,该字段的值不重复,也就是该字段的值在该表中唯一,unique key
添加唯一约束。(UNI 表示唯一键)

ALTER TABLE 表名 ADD UNIQUE KEY(字段)

ALTER TABLE 表名 ADD CONSTRAINT 键名 UNIQUE KEY(字段)

mysql> ALTER TABLE `student` ADD UNIQUE KEY('id');
mysql> DESC `student`;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

(2)取消唯一约束

ALTER TABLE 表名 DROP KEY 约束名

mysql> ALTER TABLE `student` DROP KEY `id`;
mysql> DESC `student`;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

3.主键约束(primary)

主键保证记录的唯一性,主键自动为 NOT NULL, 每张数据表只能存在一个主键。相当于唯一约束+非空约束,如果该表格没有定义主键,那么第一个添加非空+唯一约束的视为主键。这种情况你还是可以添加字段为主键的,添加成功之后,非空+唯一约束的字段就不再视为主键。

(1)添加主键约束

ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

 ALTER TABLE `student` ADD PRIMARY KEY (`age`);
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | UNI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   | PRI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

(2)取消主键约束

mysql> ALTER TABLE `student` DROP PRIMARY KEY;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

4.自增约束(auto_increment)

AUTO_INCREMENT 自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次的增量为1。例如,如果将 id 设为自增约束,在增加元素而不设置 id 的情况下就会将 id 自动进行 + 1 。

(1)增加自增约束

mysql> ALTER TABLE `student` CHANGE `age` `age` INT NOT NULL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

(2)取消自增约束

mysql> ALTER TABLE `student` CHANGE `age` `age` INT NOT NULL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

5.默认约束(default)

DEFAULT(默认约束) 初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。例如,将年龄设置为默认约束且为18,在增加元素而你添加年龄的时候会默认将年龄设置为18。

(1)增加默认约束

mysql> ALTER TABLE `student` ALTER `age` SET DEFAULT 18;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   |     | 18      |       |
+-------+-------------+------+-----+---------+-------+

(2)取消默认约束

mysql> ALTER TABLE `student` ALTER `age` DROP DEFAULT;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | int(11)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

6.外键约束

之前讲到的约束,都是表内约束自身,而外键约束约束其他表。数据表的存储引擎只能为InnoDB。外键列和参照列数据类型一致,外键必须关联到键上面去,外键在名在数据库要唯一。字段添加唯一约束之后,该字段的值不重复,也就是该字段的值在该表中唯一unique key 。当存在外键关联时,默认是不允许删除的,这样来保证数据的完整性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南风和云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值