SQL 使用序列

序列是根据需要产生的一组有序整数:1, 2, 3 ... 序列在数据库中经常用到,因为许多应用要求数据表中的的每一行都有一个唯一的值,序列为此提供了一种简单的方法。

本节阐述在 MySQL 中如何使用序列。

使用 AUTO_INCREMENT 列:

在 MySQL 中使用序列最简单的方式是,把某列定义为 AUTO_INCREMENT,然后将剩下的事情交由 MySQL 处理:

示例:

试一下下面的例子,该例将会创建一张新表,然后再里面插入几条记录,添加记录时并不需要指定记录的 ID,因为该列的值由 MySQL 自动增加。

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 |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

获取 AUTO_INCREMENT 值:

LAST_INSERT_ID() 是一个 SQL 函数,可以用在任何能够执行 SQL 语句地方。另外,Perl 和 PHP 各自提供了其独有的函数,用于获得最后一条记录的 AUTO_INCREMENT 值。

Perl 示例:

使用 mysql_insertid 属性来获取 SQL 查询产生的 AUTO_INCREMENT 值。根据执行查询的方式不同,该属性可以通过数据库句柄或者语句句柄来访问。下面的示例通过数据库句柄取得自增值:

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

PHP 示例:

在执行完会产生自增值的查询后,可以通过调用 mysql_insert_id() 来获取此值:

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

重新编号现有序列:

当你从表中删除了很多记录后,可能会想要对所有的记录重新定序。只要略施小计就能达到此目的,不过如果你的表与其他表之间存在连接的话,请千万小心。

当你觉得不得不对 AUTO_INCREMENT 列重新定序时,从表中删除该列,然后再将其添加回来,就可以达到目的了。下面的示例展示了如何使用这种方法,为 INSECT 表中的 ID 值重新定序:

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

从特定值的序列

默认情况下,MySQL 中序列的起始值为 1,不过你可以在创建数据表的时候,指定任意其他值。下面的示例中,MySQL 将序列的起始值设为 100:

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
);

或者,你也可以先创建数据表,然后使用 ALTER TABLE 来设置序列的起始值:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

SQL 使用序列的更多相关文章

  1. SQL Server 序列(SEQUENCE)使用

    众所周知,在之前的SQL SERVER版本中,一般采用GUID或者IDENTITY来作为标示符,但是IDENTITY是一个表对象,只能保证在一张表里面的序列,当我们遇到以下情况时, 如上表,我们需要在 ...

  2. ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

    如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...

  3. SQL基础--序列

    序列是一种数据库对象,用来自动产生一组唯一的序号:序列是一种共享式的对象,多个用户可以共同使用序列中的序号. 序列的创建语法 CREATE SEQUENCE sequencename [INCREME ...

  4. Oracle SQL之 序列使用限制

    Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in thefollowing constructs:■ A su ...

  5. Mybatis 通过动态SQL获取序列值

      配置文件 <select id="getSeq" parameterType="string" resultType="long" ...

  6. oracle sql修改序列为当前序列开始

    declare   v_num integer;  last_value integer;Begin  select SEQ_TBM_ID.NEXTVAL into last_value from d ...

  7. SQL server 和Oracle 序列

    1,SQL Server序列创建与使用 BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE name = 'event_seq') DROP SEQUENC ...

  8. 自己实现一个SQL解析引擎

    自己实现一个SQL解析引擎 功能:将用户输入的SQL语句序列转换为一个可运行的操作序列,并返回查询的结果集. SQL的解析引擎包含查询编译与查询优化和查询的执行,主要包含3个步骤: 查询分析: 制定逻 ...

  9. Oracle11g R2学习系列 之六数据库链接,快照及序列

    Create public database link link_name Connect to user identified by password using 'DBName' 为'DBName ...

随机推荐

  1. Linux环境进程间通信(一)

    1. 管道概述及相关API应用 1.1 管道相关的关键概念 管道是Linux支持的最初Unix IPC形式之中的一个.具有下面特点: 管道是半双工的,数据仅仅能向一个方向流动.须要两方通信时.须要建立 ...

  2. 整理 pandas 常用函数

    1. df.head(n): 显示数据前n行,不指定n,df.head则会显示所有的行 2. df.columns.values获取所有列索引的名称 3. df.column_name: 直接获取列c ...

  3. 使用Sigar获取服务器信息

    Sigar简介 Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件.它用来从许多平台收集系统和处理信息. 这些平台包括:Linux, Windows, Solari ...

  4. MongoDB,还有一个角度看数据

    传智-玄痛(传智播客北京校区C/C++学院技术指导老师) MongoDB的起源 几年前 10gen 公司做了 SaaS 方面的研发,由于公司一个 MongoDB 产品存储接口的易用性,用户评价很好,公 ...

  5. Decoration3:增删改的实现

    下面我们完成数据的增加.删除.修改,这里的主要知识就是前端Angularjs,遇到的问题 1.路由组件采用ui.router,链接的写法有两种: <a href="#/coach/cr ...

  6. queue for max elem, pop, push

    queue for max elem, pop, push 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人 ...

  7. ENGINE_API CXSroll

    #ifndef __XSROLL_H__ #define __XSROLL_H__ #include "CocoHead.h" #include "XWindow.h&q ...

  8. Python 数据驱动ddt 使用

    准备工作: pip install ddt 知识点: 一,数据驱动和代码驱动: 数据驱动的意思是  根据你提供的数据来测试的  比如 ATP框架 需要excel里面的测试用例 代码驱动是必须得写代码  ...

  9. 人工打jar包

    (一)将可执行程序打成一个jar包 其中Yoyo为入口程序,因此将当前目录下workhard和Book.class.testEx.class.Yoyo.class打成一个jar包的命令如下: jar ...

  10. 访问子节点childNodes

    访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...