添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
英姿勃勃的课本  ·  mysql 5 recursive ...·  1 年前    · 
个性的草稿本  ·  用 Python 打造 AIGC ...·  1 年前    · 
MySQL数据表的基本操作
7 MySQL约束、函数和运算符
7.1 MySQL约束概述
7.2 MySQL主键
7.3 MySQL主键自增长
7.4 MySQL外键约束
7.5 MySQL唯一约束
7.6 MySQL检查约束
7.7 MySQL默认值
7.8 MySQL非空约束
7.9 MySQL查看表中的约束
7.10 MySQL常用运算符
7.11 MySQL算术运算符
7.12 MySQL逻辑运算符
7.13 MySQL比较运算符
7.14 MySQL位运算符
7.15 MySQL运算符优先级
7.16 MySQL IN和NOT IN
7.17 MySQL函数简介
MySQL操作表中数据 MySQL视图、索引 MySQL存储过程和触发器 MySQL事务和字符集 MySQL用户管理 MySQL数据库备份与恢复 MySQL日志 MySQL性能优化
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长。语法格式如下: 字段名 数据类型 AUTO_INCREMENT

默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。 AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。 AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等) 。 AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。 定义数据表 tb_student,指定表中 id 字段递增,SQL 语句和运行结果如下: mysql> CREATE TABLE tb_student( -> id INT(4) PRIMARY KEY AUTO_INCREMENT, -> name VARCHAR(25) NOT NULL Query OK, 0 rows affected (0.07 sec) 上述语句执行成功后,会创建名为 tb_student 的数据表。其中,id 为主键,每插入一条新记录,id 的值就会在前一条记录的基础上自动加 1。name 为非空字段,该字段的值不能为空值(NULL)。
向 tb_student 表中插入数据,SQL 语句如下所示:
INSERT INTO tb_student(name) VALUES('Java')('MySQL')('Python'); 语句执行完后,tb_student 表中增加了 3 条记录,在这里并没有输入 id 的值,但系统已经自动添加该值,使用 SELECT 命令查看记录,如下所示。
mysql> SELECT * FROM tb_student; +----+--------+ | id | name | +----+--------+ | 1 | Java | | 2 | MySQL | | 3 | Python | +----+--------+ 4 rows in set (0.01 sec) 加上 AUTO_INCREMENT 约束条件后,字段中的每个值都是自动增加的。因此,这个字段不可能出现相同的值。通常情况下,AUTO_INCREMENT 都是作为 id 字段的约束条件,并且将 id 字段作为表的主键。
指定自增字段初始值 如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加。 下面创建表 tb_student2,指定主键从 100 开始自增长。SQL 语句和运行结果如下: mysql> CREATE TABLE tb_student2 ( -> id INT NOT NULL AUTO_INCREMENT, -> name VARCHAR(20) NOT NULL, -> PRIMARY KEY(ID) -> )AUTO_INCREMENT=100; Query OK, 0 rows affected (0.03 sec) 向 tb_student2 表中插入数据,并使用 SELECT 命令查询表中记录。
mysql> INSERT INTO tb_student2 (name)VALUES('Java'); Query OK, 1 row affected (0.07 sec) mysql> SELECT * FROM tb_student2; +-----+------+ | id | name | +-----+------+ | 100 | Java | +-----+------+ 由结果可以看出,id 值从 100 开始自动增长。 自增字段值不连续 下面我们通过一个实例分析自增字段的值为什么不连续。
创建表 tb_student3,其中 id 是自增主键字段,name 是唯一索引,SQL 语句和执行结果语句如下:
mysql> CREATE TABLE tb_student3( -> id INT PRIMARY KEY AUTO_INCREMENT, -> name VARCHAR(20) UNIQUE KEY, -> age INT DEFAULT NULL Query OK, 0 rows affected (0.04 sec) 向 tb_student3 表中插入数据,SQL 语句如下: INSERT INTO tb_student3 VALUES(1,1,1);

此时,表 tb_student3 中已经有了(1,1,1)这条记录,这时再执行一条插入数据命令: mysql> INSERT INTO tb_student3 VALUES(null,1,1);
ERROR 1062 (23000): Duplicate entry '1' for key 'name'

由于表中已经存在 name=1 的记录,所以报 Duplicate key error(唯一键冲突)。在这之后,再插入新的数据时,自增 id 就是 3,这样就出现了自增字段值不连续的情况。

关注公众号「 站长严长生 」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

微信扫码关注公众号