innodb_autoinc_lock_mode

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