MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。

本章我们将介绍如何使用MySQL的序列。

使用AUTO_INCREMENT

MySQL中最简单使用序列的方法就是使用 MySQL AUTO_INCREMENT 来定义列。

实例

以下实例中创建了数据表insect, insect中id无需指定值可实现自动增长。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> CREATE TABLE insect
    ->
(
    ->
id 
INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL,
# type 
of insect
    -> date DATE NOT NULL,
date collected
    ->
origin 
VARCHAR(30) NOT NULL where collected
);
Query
OK, 0 
rows affected
(0.02 sec)
mysql> INSERT INTO insect
(id,
name,date,origin) VALUES
    ->
(
NULL,'housefly','2001-09-10','kitchen'),
    ->
(
NULL,'millipede','2001-09-10','driveway'),
    ->
(
NULL,'grasshopper','2001-09-10','front
yard'
);
Query
OK, 3 
rows affected
(0.02 sec)
Records:
3  Duplicates: 0  Warnings: 0
mysql> SELECT FROM insect ORDER BY id;
+----+-------------+------------+------------+
|
id | 
name        date       |
origin     |
+----+-------------+------------+------------+

1 | housefly    | 2001-09-10 | kitchen    |

2 | millipede   | 2001-09-10 | driveway   |

3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
rows in set (0.00
sec)

获取AUTO_INCREMENT值

MySQL的客户端中你可以使用 SQL中的LAST_INSERT_ID(
) 函数来获取最后的插入表中的自增列的值。

PHP或PERL脚本中也提供了相应的函数来获取最后的插入表中的自增列的值。

PERL实例

使用 mysql_insertid 属性来获取 AUTO_INCREMENT 的值。 实例如下:

1
2
3
$dbh->do ("INSERT
INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq $dbh->{mysql_insertid};

PHP实例

PHP 通过 mysql_insert_id ()函数来获取执行的插入SQL语句中
AUTO_INCREMENT列的值。

1
2
3
mysql_query
("INSERT INTO insect (name,
date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq =
mysql_insert_id (
$conn_id);

  

重置序列

如果你删除了数据表中的多条记录,并希望对剩下数据的AUTO_INCREMENT列进行重新排列,那么你可以通过删除自增的列,然后重新添加来实现。 不过该操作要非常小心,如果在删除的同时又有新记录添加,有可能会出现数据混乱。操作如下所示:

1
2
3
4
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
    -> ADD PRIMARY KEY (id);

设置序列的开始值

一般情况下序列的开始值为1,但如果你需要指定一个开始值100,那我们可以通过以下语句来实现:

1
2
3
4
5
6
7
8
mysql> CREATE TABLE insect
    ->
(
    ->
id 
INT UNSIGNED NOT NULL AUTO_INCREMENT
= 100,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL,
# type 
of insect
    -> date DATE NOT NULL,
date collected
    ->
origin 
VARCHAR(30) NOT NULL where collected
);

或者你也可以在表创建成功后,通过以下语句来实现:

1
mysql> ALTER TABLE t
AUTO_INCREMENT = 100;

  

原文地址:http://www.manongjc.com/mysql/mysql_using_sequences.html

mysql相关阅读:

mysql div除法的取模运算和 mod取余运算

mysq div除法的取模运算

mysql MOD()求余函数实例讲解

mysql least()函数获取最小值

mysql GREATEST()函数获取集合中最大的值

MySQL 序列 AUTO_INCREMENT的更多相关文章

  1. mysql 序列与pg序列的比较

    mysql序列(这里只谈innodb引擎): 在使用mysql的AUTO_INCREMENT时,使用AUTO_INCREMENT的字段必须建有索引,也可以为索引的一部分.当没有索引时会报错:      ...

  2. MySQL 序列使用

    MySQL 序列使用 MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍如 ...

  3. 二十九、MySQL 序列使用

    MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍 ...

  4. DB-MySQL:MySQL 序列使用

    ylbtech-DB-MySQL:MySQL 序列使用 1.返回顶部 1. MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想 ...

  5. MySQL序列解决方案

    MySQL序列解决方案 MySQLOracleSQL  MySQL自增长与Oracle序列的区别: 自增长只能用于表中的其中一个字段 自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 自增 ...

  6. 吴裕雄--天生自然MySQL学习笔记:MySQL 序列使用

    MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 使用 AUTO_INCREMENT ...

  7. MySQL使用AUTO_INCREMENT列的表注意事项之update自增列篇

    1)对于MyISAM表,如果用UPDATE更新自增列,如果列值与已有的值重复,则会出错:如果大于已有的最大值,则会自动更新表的AUTO_INCREMENT,操作是安全的. (2)对于innodb表,u ...

  8. mysql 约束条件 auto_increment 自动增长目录

    mysql 约束条件 auto_increment 自动增长 mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量 mysql 约束条件 auto_increment ...

  9. MySQL中auto_increment的基本特性

    创建数据表时,经常会出现auto_increment这个词,下面就来了解一下它吧. MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,可在一定程度上代替Oracl ...

随机推荐

  1. 一起来点React Native——常用组件之TextInput

    一.前言 文本输入框,相当于OC中的UITextField,在用法和属性方面,两者都有很大的借鉴之处:通过键盘将文本输入到应用程序的一个基本的组件: 二.TextInput的常见属性 因为TextIn ...

  2. django会话跟踪技术

    目录 django中的会话跟踪技术 什么是会话跟踪技术 HTTP无状态协议 Cookie概述 什么是cookie cookie源码 cookie超长时间 cookie超长时间 cookie生效路径 删 ...

  3. Java一个简单的线程池实现

    线程池代码 import java.util.List; import java.util.Vector; public class ThreadPool  {     private static  ...

  4. C++ 内存拷贝函数 memcpy

    在C/C++中经常会遇到对一段固定的连续内存进行拷贝操作,   这时候我们就需要用到   <cstring>  头文件  中的  memcpy  函数. 具体使用如下: 其中   ,   ...

  5. hello1与hello2的代码分析

    1.hello1代码分析 hello.java package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped ...

  6. vue components

    https://github.com/vuejs/awesome-vue#components--libraries

  7. streamsets 集成 minio s3测试

    具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考: https://www.cnblog ...

  8. FastAdmin 插件刷新缓存出现 200 红色提示框解决 always_populate_raw_post_data

    使用 phpStudy 全新安装了 FastAdmin,PHP 版本是 5.6. 安装完成后在刷新插件缓存时出现红色 提示消息,但状态 为 200. 打开 F12 看,发现有以下信息. <br ...

  9. 使用 ASMCMD 工具管理ASM目录及文件

    ============================== -- 使用ASMCMD 工具管理ASM目录及文件 --============================== 在ASM实例中,所有的 ...

  10. map的put和putIfAbsent使用

    源码中传入key和value,根据key获取看是否存在value,如果value==null,然后调用put方法把传入的key和value  put进map,返回根据key获取的老value 意思就是 ...