澳门新萄京使用MySQL的LAST_INSERT_ID来确定各分表的
分类:数据库

分表除了表名的目录分歧之外,表结构都以同意气风发的,即使各表的‘ID'字段仍使用‘AUTO_INCREMENT'的措施的话,ID就不能够唯明显一条记下了。 那个时候就要求风流倜傥种处于各样分表之外的机制来生成ID,我们日常选用一张单独的数据表(不要紧假若表名称叫‘ticket_mutex'卡塔尔国来保存那几个ID,无论哪个分表有数量扩充时,都是先到ticket_mutex表把ID值加1,然后拿走ID值。 这几个取ID的操作看似很复杂,所幸的是,MySQL提供了LAST_INSERT_ID机制,让我们能一步成功。 1、新建数据表ticket_mutex 复制代码 代码如下: CREATE TABLE ticket_mutex NOT NULL PEvoqueIMAEscortY KEY COMMENT '业务名称', value bigint UNSIGNED NOT NULL COMMENT 'ID值' )Engine=InnoDB DEFAULT CHAPRADOSET=UTF8 COMMENT '保存分表ID表'; 字段‘name'用来证实这几个ID是哪些业务的,举例‘顾客'的ID,大家得以定为‘USE传祺'; 字段‘value'即该专门的职业的ID值。 2、早先化业务和其ID值 复制代码 代码如下: INSERT INTO ticket_mutex values,; ------ ------- | name | value | ------ ------- | POST | 0 | | USE福特Explorer | 0 | ------ ------- 大家早先化了2条记下,即有2个不相同的作业,分别表示‘客商新闻'和‘核心消息',它们开端ID值均为‘0'; 3、获取分表唯生机勃勃ID 这时就要动用MySQL提供的LAST_INSERT_ID()机制了。 在往客户表里新添一条数据时,获取‘客户ID': 复制代码 代码如下: UPDATE ticket_mutex SET value=LAST_INSERT_ID WHERE name='USER';SELECT LAST_INSERT_ID(); ------------------ | LAST_INSERT_ID() | ------------------ | 1 | ------------------ 通过那条语句之后,我们获取结果为1,这一个值正是大家所急需的值。再来查看数据记录,大家发掘记录总的数量未有改过,不过‘客户'的ID已经为1了; 复制代码 代码如下: ------ ------- | name | value | ------ ------- | POST | 0 | | USE昂Cora | 1 | ------ ------- 查看全数的笔录: 复制代码 代码如下: ------ ------- | name | value | ------ ------- | POST | 1 | | USELacrosse | 1 | ------ ------- 从上得以见见,通过MySQL的LAST_INSERT_ID机制,大家能够确定保证在笔录总量不增加的情况下,让职业ID在不断的增多,进而确认保障了分表ID的唯生龙活虎性。 4、LAST_INSERT_ID说明 从名字能够见到,LAST_INSERT_ID即为最后插入的ID值,依据MySQL的官方手册表达,它有2种选择方法 一是不带参数:LAST_INSERT_ID(),这种措施和AUTO_INCREMENT属性一齐行使,当往带有‘AUTO_INCREMENT'属性字段的表中新增记录时,LAST_INSERT_ID()即再次来到该字段的值,大家可试下; 二是带有表明式:如下面介绍的LAST_INSERT_ID,它回到的是表明式的值,即‘value 1';

little 神
id生成器, 替代mysql自带的 auto_increment, 这么些事情场景稍微严谨点,用 redis 自增没数据库稳当(豆蔻梢头旦redis重启,很难保障不丢几秒的数目。而豆蔻梢头旦并发量又大,那大概好几百个id重复了)

方今和Sobin在做三个精品课程的类别,因为用到多个永久的id作为表间关联,所以在前叁个表插入数据后要把插入数据变动的自增id传递给下三个表。斟酌了生机勃勃番决定接受Mysql提供了贰个LAST_INSERT_ID()的函数。

无锁,也不须求专业扶助, 有锁的话品质怎么撑得住, 会现身五个 session 同时update 的景观, 不过这一个操作是原子性的,只要您能确定保障叁个操作是原子性的。就不必要锁,也没有供给职业
以此只是生成id。
至于 insert 记录退步,关那么些 id 生成器什么事?
决不这几个 id 跳过去就是了呗。auto_increatment 不也是相像在 rollback 的时候不会苏醒么, id 不自然必定要连接。
任何工作来问多个id,小编给一个新的id 1给专业,保障并发量再大,都不会给重新就足以了。至于事情用不用那么些id,如故暂停了也许其他怎么的都不关id生成器的事。低耦合。

复制代码 代码如下:LAST_INSERT_ID returns the first automatically generated value that was set for an AUTO_INCREMENT column by the most recently executed INSERT or UPDATE statement to affect such a column. For example, after inserting a row that generates an AUTO_INCREMENT value, you can get the value like this:mysql> SELECT LAST_INSERT_ID();-> 195

参考 http://www.jb51.net/article/28017.htm

轻便说来,便是那个函数将回来插入的那条记下在表中自增的卓殊字段的值,平时我们都给那多少个自增字段命名称为ID。那样就足以重回刚插入的记录的ID值了。

分表除了表名的目录差别之外,表结构都以黄金年代致的,若是各表的‘ID'字段仍使用‘AUTO_INCREMENT'的法子的话,ID就不可能唯分明一条记下了。 当时就需求风流浪漫种处于种种分表之外的体制来生成ID,大家常常选用一张单独的数据表(不要紧要是表名字为‘ticket_mutex'卡塔尔国来保存那个ID,无论哪个分表有多少扩展时,都以先到ticket_mutex表把ID值加1,然后拿走ID值。 这么些取ID的操作看似很复杂,所幸的是,MySQL提供了LAST_INSERT_ID机制,让我们能一步成功。

复制代码 代码如下:$query="INSERT INTO `testtable` VALUES ";mysql_query;$query="SELECT LAST_INSERT_ID()";$result=mysql_query;$rows=mysql_fetch_row;echo $rows[0];

  1. 新建数据表ticket_mutex

本条函数是基于connection的,也正是不会被其余顾客端的connection影响到,所以结果是正确的。假若应用select max from table,在高密度的插入央求下,是有望出题指标,重返错误值

LAST_INSERT_ID说明

CREATE TABLE ticket_mutex ( 
    name varchar(32) NOT NULL PRIMARY KEY COMMENT '业务名称', 
    value bigint(20) UNSIGNED NOT NULL COMMENT 'ID值' 
)Engine=InnoDB DEFAULT CHARSET=UTF8 COMMENT '保存分表ID表'; 

从名字能够见见,LAST_INSERT_ID即为最终插入的ID值,根据MySQL的合法手册表明,它有2种选拔办法

字段‘name'用来证实这些ID是哪些业务的,比方‘顾客'的ID,大家得以定为‘USE大切诺基'; 字段‘value'即该专业的ID值。

一是不带参数:LAST_INSERT_ID(),这种办法和AUTO_INCREMENT属性一齐行使,当往带有‘AUTO_INCREMENT'属性字段的表中新增添记录时,LAST_INSERT_ID()即再次回到该字段的值,大家可试下;二是含有表明式:如上边介绍的LAST_INSERT_ID,它回到的是表明式的值,即‘value 1';##################################LAST_INSERT_澳门新萄京使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值_Mysql_脚本之家。ID() 自动重回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的率先个表发生的值。

  1. 伊始化业务和其ID值

MySQL的LAST_INSERT_ID的注意事项:

第生龙活虎、查询和插入所选择的Connection对象必得是同一个手艺够,不然重临值是不可预料的。

INSERT INTO ticket_mutex(name, value) values('USER', 0),('POST', 0); 
 ------ -------  
| name | value | 
 ------ -------  
| POST | 0 | 
| USER | 0 | 
 ------ -------  

mysql> SELECT LAST_INSERT_澳门新萄京使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值_Mysql_脚本之家。ID();

大家起头化了2条记下,即有2个例外的事情,分别代表‘客户音讯'和‘核心音信',它们领头ID值均为‘0';

应用那函数向二个给定Connection对象回来的值是该Connection对象发生对影响AUTO_INCREMENT列的新颖讲话第叁个AUTO_INCREMENT值的。那个值不可能被其余Connection对象的熏陶,即它们发出它们本人的AUTO_INCREMENT值。

  1. 获得分表唯后生可畏ID
    其不经常候将在选用MySQL提供的LAST_INSERT_ID()机制了。 在往客户表里新添一条数据时,获取‘顾客ID':

第二、LAST_INSERT_ID 是与table毫无干系的,要是向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

其三、 如若你接收一条INSERT语句插入四个行, LAST_INSERT_ID() 只回去插入的率先行数据时发生的值。其原因是那使借助任何服务器复制雷同的 INSERT语句变得简单。

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value 1) WHERE name='USER';
SELECT LAST_INSERT_ID(); 
 ------------------  
| LAST_INSERT_ID() | 
 ------------------  
| 1 | 
 ------------------  

mysql> INSERT INTO t VALUES

由此这条语句之后,大家得到结果为1,这么些值就是我们所急需的值。再来查看数据记录,大家发现记录总量未有改良,但是‘客户'的ID已经为1了;
**从上能够观望,通过MySQL的LAST_INSERT_ID机制,大家能够保险在记录总的数量不升高的意况下,让事情ID在不停的增加,进而保证了分表ID的唯风姿浪漫性。 **

mysql> SELECT * FROM t;

  1. LAST_INSERT_ID说明
    澳门新萄京,从名字能够看出,LAST_INSERT_ID即为最终插入的ID值,依据MySQL的合法手册表达,它有2种选择办法
    一是不带参数:LAST_INSERT_ID(),这种办法和AUTO_INCREMENT属性一齐利用,当往带有‘AUTO_INCREMENT'属性字段的表中新扩展记录时,LAST_INSERT_ID()即再次回到该字段的值
    二是含有表明式:如上面介绍的LAST_INSERT_ID(value 1),它回到的是表明式的值,即‘value 1';

| id | name |

5.** 唯后生可畏性测量试验**

| 1 | Bob |

| 2 | Mary |

| 3 | Jane |

| 4 | Lisa |

mysql> SELECT LAST_INSERT_ID(); //那便是本身要表明的关键难题。

| LAST_INSERT_ID() |

虽说将3 个新行插入 t, 对那个行的首先行产生的 ID 为 2, 那也是 LAST_INSERT_ID()再次回到的值。

以上所述正是本文的全体内容了,希望我们能够赏识。

请你花一点小时将稿子分享给您的爱侣依然留下钻探。大家将会由衷多谢您的帮衬!

本文由澳门新萄京发布于数据库,转载请注明出处:澳门新萄京使用MySQL的LAST_INSERT_ID来确定各分表的

上一篇:澳门新萄京STCRUISERICT_TRANS_TABLES使用图解教程, 下一篇:没有了
猜你喜欢
热门排行
精彩图文