【MySQL】 表的约束(下)

06-01 1343阅读

欢迎拜访:雾里看山-CSDN博客
本篇主题:【MySQL】 表的约束(下)
发布时间:2025.2.12
隶属专栏:MySQL

【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: t16
Create Table: CREATE TABLE `t16` (
  `id` int(10) 
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码