【MySQL】 表的约束(下)
欢迎拜访:雾里看山-CSDN博客
本篇主题:【MySQL】 表的约束(下)
发布时间:2025.2.12
隶属专栏:MySQL
目录
- 自增长
-
- 基本介绍
- 案例使用
- auto_increment值的查找
-
- 查找下一次插入时的值
- 查找最后一次插入时的值
- 创建表时设置 auto_increment值
- 索引
- 唯一键
-
- 介绍
- 使用
- 关于唯一键和主键的区别:
- 非空唯一键
- 外键
-
- 介绍
- 创建主表并插入数据
- 创建从表并确认从属关系
- 从表的插入受主表的约束
- 主表也受从表的约束
- 如何理解外键约束
- 综合案例实现
自增长
基本介绍
auto_increment
:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
- 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
- 自增长字段必须是整数
- 一张表最多只能有一个自增长
案例使用
mysql> create table if not exists t16( -> id int unsigned primary key auto_increment, -> name varchar(20) not null -> );Query OK, 0 rows affected (0.02 sec)mysql> desc t16;+-------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+------------------+------+-----+---------+----------------+| id | int(10) unsigned | NO | PRI | NULL | auto_increment || name | varchar(20) | NO | | NULL | |+-------+------------------+------+-----+---------+----------------+2 rows in set (0.01 sec)
自增长的值默认从 1
开始
mysql> insert into t16 (name) values (\'a\');Query OK, 1 row affected (0.00 sec)mysql> insert into t16 (name) values (\'b\');Query OK, 1 row affected (0.00 sec)mysql> insert into t16 (name) values (\'c\');Query OK, 1 row affected (0.01 sec)mysql> select * from t16;+----+------+| id | name |+----+------+| 1 | a || 2 | b || 3 | c |+----+------+3 rows in set (0.00 sec)
当自增长的值被更改以后,会从最大值开始自增长
mysql> insert into t16 (id, name) values (1000, \'d\');Query OK, 1 row affected (0.01 sec)mysql> select * from t16;+------+------+| id | name |+------+------+| 1 | a || 2 | b || 3 | c || 1000 | d |+------+------+4 rows in set (0.00 sec)mysql> insert into t16 (id, name) values (1000, \'d\');ERROR 1062 (23000): Duplicate entry \'1000\' for key \'PRIMARY\'mysql> insert into t16 (name) values (\'d\');Query OK, 1 row affected (0.00 sec)mysql> select * from t16;+------+------+| id | name |+------+------+| 1 | a || 2 | b || 3 | c || 1000 | d || 1001 | d |+------+------+5 rows in set (0.00 sec)
auto_increment值的查找
查找下一次插入时的值
mysql> show create table t16 \\G*************************** 1. row *************************** Table: t16Create Table: CREATE TABLE `t16` ( `id` int(