本文源自:http://www.himigame.com/mysql/781.html

3.6.9. 使用AUTO_INCREMENT

可以通过AUTO_INCREMENT属性为新的行产生唯一的标识:

  1. CREATE TABLE animals (
  1.      id MEDIUMINT NOT NULL AUTO_INCREMENT,
  1.      name CHAR(30) NOT NULL,
  1.      PRIMARY KEY (id)
  1. );
  1. INSERT INTO animals (name) VALUES
  1.     ('dog'),('cat'),('penguin'),
  1.     ('lax'),('whale'),('ostrich');
  1. SELECT * FROM animals;

将返回:

  1. +----+---------+
  1. | id | name    |
  1. +----+---------+
  1. |  1 | dog     |
  1. |  2 | cat     |
  1. |  3 | penguin |
  1. |  4 | lax     |
  1. |  5 | whale   |
  1. |  6 | ostrich |
  1. +----+---------+

你可以使用LAST_INSERT_ID()SQL函数或mysql_insert_id() C API函数来查询最新的AUTO_INCREMENT值。这些函数与具体连接有关,因此其返回值不会被其它执行插入功能的连接影响。

注释:对于多行插入,LAST_INSERT_ID()和mysql_insert_id()从插入的第一行实际返回AUTO_INCREMENT关键字。在复制设置中,通过该函数可以在其它服务器上正确复制多行插入。

对于MyISAM和BDB表,你可以在第二栏指定AUTO_INCREMENT以及多列索引。此时,AUTO_INCREMENT列生成的值的计算方法为:MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。如果想要将数据放入到排序的组中可以使用该方法。

  1. CREATE TABLE animals (
  1.     grp ENUM('fish','mammal','bird') NOT NULL,
  1.     id MEDIUMINT NOT NULL AUTO_INCREMENT,
  1.     name CHAR(30) NOT NULL,
  1.     PRIMARY KEY (grp,id)
  1. )ENGINE=MyISAM;
  1. INSERT INTO animals (grp,name) VALUES
  1.     ('mammal','dog'),('mammal','cat'),
  1.     ('bird','penguin'),('fish','lax'),('mammal','whale'),
  1.     ('bird','ostrich');
  1. SELECT * FROM animals ORDER BY grp,id;

将返回:

  1. +--------+----+---------+
  1. | grp    | id | name    |
  1. +--------+----+---------+
  1. | fish   |  1 | lax     |
  1. | mammal |  1 | dog     |
  1. | mammal |  2 | cat     |
  1. | mammal |  3 | whale   |
  1. | bird   |  1 | penguin |
  1. | bird   |  2 | ostrich |
  1. +--------+----+---------+

请注意在这种情况下(AUTO_INCREMENT列是多列索引的一部分),如果你在任何组中删除有最大AUTO_INCREMENT值的行,将会 重新用到AUTO_INCREMENT值。对于MyISAM表也如此,对于该表一般不重复使用AUTO_INCREMENT值。

如果AUTO_INCREMENT列是多索引的一部分,MySQL将使用该索引生成以AUTO_INCREMENT列开始的序列值。。例如,如果 animals表含有索引PRIMARY KEY (grp, id)和INDEX(id),MySQL生成序列值时将忽略PRIMARY KEY。结果是,该表包含一个单个的序列,而不是符合grp值的序列。

要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:

  1. mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;

关于AUTO_INCREMENT的详细信息:

·         如何为列指定AUTO_INCREMENT属性:13.1.5节,“CREATE TABLE语法”和 13.1.2节,“ALTER TABLE语法”

·         AUTO_INCREMENT的动作取决于SQL模式:5.3.2节,“SQL服务器模式”

·         找出含有最新AUTO_INCREMENT值的行:12.1.3节,“比较函数和操作符”

·         设置将用到的AUTO_INCREMENT值: 13.5.3节,“SET语法” 。

·         AUTO_INCREMENT和复制:6.7节,“复制特性和已知问题”.

·         AUTO_INCREMENT相关的可用于复制的Server-system变量(auto_increment_increment和auto_increment_offset):5.3.3节,“服务器系统变量”

更多API,可以参考,http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html#retrieving-data

myslq的索引类型为MyISAM和BDB的表:复合索引下的自增长的更多相关文章

  1. SQL精华总结索引类型优化SQL优化事务大表优化思维导图❤️

    索引类型 从数据结构角度: B+树索引, hash索引,基于哈希表实现,只有全值匹配才有效.以链表的形式解决冲突.查找速度非常快 O(1) 全文索引,查找的是文本中的关键词,而不是直接比较索引中的值, ...

  2. mysql索引之八:myisam压缩(前缀压缩)索引

    myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其 ...

  3. mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

    一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database  table  -c  #检查单 ...

  4. Oracle索引碎片检查及定期重建常用表的索引

    背景说明: 今天查阅书籍时,偶然间发现“在对某个索引行执行删除操作时,只是为该行增加了一个删除标记,这个索引行并不会释放它的存储空间,Insert产生的新的索引行也不能被插入到该位置.索引列的修改过程 ...

  5. 什么是索引?Mysql目前主要的几种索引类型

    一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...

  6. MYSQL里的索引类型介绍

    首先要明白索引(index)是在存储引擎(storage engine)层面实现的,而不是在server层面.不是所有的存储引擎支持有的索引类型. 1.B-TREE 最常见的索引类型,他的思想是所有的 ...

  7. mysql数据库索引类型和原理

    索引初识: 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. CREATE TABLE mytable ( id serial primary key, c ...

  8. MongoDB的学习--索引类型和属性

    索引类型 MongDB的索引分为以下几种类型:单键索引.复合索引.多键索引.地理空间索引.全文本索引和哈希索引 单键索引(Single Field Indexes) 在一个键上创建的索引就是单键索引, ...

  9. MYSQL 索引类型、什么情况下用不上索引、什么情况下不推荐使用索引

    mysql explain的使用: http://blog.csdn.net/kaka1121/article/details/53394426 索引类型 在数据库表中,对字段建立索引可以大大提高查询 ...

随机推荐

  1. 如何判断SCI期刊投稿难易度和审稿周期

    如何判断SCI期刊投稿难易度和审稿周期 要发SCI论文,前提当然是必须有一篇写好的英文论文,SCI都是英文的杂志,这个大家应该都懂的     首先谈谈投稿难易程度很多人似乎都一种误解,认为拒稿率高的杂 ...

  2. Laravel 事件系统用法总结(监听事件,观察者模式)

    看这篇文章先复习一下设计模式 : https://www.cnblogs.com/fps2tao/p/9640338.html 在理解了观察者模式后,我们开始正文 Laravel 的事件提供了一个简单 ...

  3. Install Ambari 2.2.0 from Public Repositories(Hadoop)

    Step1: Download the Ambari repository on the Ambari Server host For Redhat/CentOS/Oracle:   cd /etc/ ...

  4. 分享下今天研究的流量上限DDos攻击分析和解决方式

    分享下今天研究的流量上限DDos攻击分析和解决方式 常常听到或者碰到某个站点被攻击.一般都是流量攻击.今天自己写了个程序測下相关的上限,程序仅仅简单做了个get html操作(不包括图片等资源文件). ...

  5. SpringDaoSupport

    @Component public class SuperDAO extends HibernateDaoSupport { @Resource(name="sessionFactory&q ...

  6. e到底是什么?

    e到底是什么? 今天看到一个下面这么一个简单的求极限问题- 一时恍惚了,为什么结果是e^m. 这个e是什么呢? 然后就百度了下,发现不少文章介绍这个e. 有几篇写得很赞 - An Intuitive ...

  7. 枚举操作的常用方法,包括获得枚举的value,name,description

    public enum SendInfoStateEnum    {   [Description("等待提交")]        等待提交 = 1, [Description(& ...

  8. shell学习笔记之变量(一)

    一.普通变量 1.使用变量之前通常并不需要事先声明,通常赋值的时候创建他们2.默认所有的变量都被看做字符串,并且以字符串存储3.变量区分大小写4.变量名前面添加$符号来访问变量,赋值的时候只需要使用变 ...

  9. tomcat架构分析(valve源码导读)

    出处:http://gearever.iteye.com 源码面前,了无秘密                              ----侯捷 在tomcat架构分析(valve机制)(http ...

  10. iOS 为什么使用xcode8上传app包到appStore无法构建版本

    使用xcode8或者application loader上传代码包到AppStore提示上传成功,但是我们在iTunes Connect中的构建版本或者活动中看不到已上传的代码包.这个问题原因是:ap ...