auto_increment

MySQL分表自增ID解决方案

心不动则不痛 提交于 2021-02-08 12:42:42
当我们对MySQL进行分表操作后,将不能依赖MySQL的自动增量来产生唯一ID了,因为数据已经分散到多个表中。 应尽量避免使用自增IP来做为主键,为数据库分表操作带来极大的不便。 在postgreSQL、oracle、db2数据库中有一个特殊的特性---sequence。 任何时候数据库可以根据当前表中的记录数大小和步长来获取到该表下一条记录数。然而,MySQL是没有这种序列对象的。 可以通过下面的方法来实现sequence特性产生唯一ID: 1. 通过MySQL表生成ID 在《 关于MySQL分表操作的研究 》提到了一种方法: 对于插入也就是insert操作,首先就是获取唯一的id了,就需要一个表来专门创建id,插入一条记录,并获取最后插入的ID。代码如下: CREATE TABLE `ttlsa_com`.`create_id` ( `id` BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = MYISAM 也就是说,当我们需要插入数据的时候,必须由这个表来产生id值,我的php代码的方法如下: <?php function get_AI_ID() { $sql = "insert into create_id (id) values('')"; $this->db->query($sql); return

[Mysql]mysql原理之Auto_increment

╄→尐↘猪︶ㄣ 提交于 2019-11-30 15:08:17
引言 MySQL中auto_increment字段估计大家都经常用到,特别是innodb引擎。我也经常用,只知道mysql可以保证这个字段在多进程操作时的原子性,具体原理又是什么,后来查阅了MySQL手册以及相关资料,了解了个大概。 本文只探究了mysql5.5中innodb引擎auto_increment的问题。 定义 使用auto_increment的字段可能生成唯一的标识。 如何使用 可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。 可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。 使用规范 AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。 设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。 AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。 AUTO_INCREMENT数据列必须具备NOT NULL属性。 AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限, AUTO_INCREMENT就会失效。 当进行全表删除时,MySQL