mysql batchinsert怎么获取主键id

mysql batchinsert怎么获取主键id,第1张

1 SELECT MAX(id) FROM tablename;

2 LAST_INSERT_ID() 函数

LAST_INSERT_ID 是与table无关的,与你最近一个插入数据的表有关。如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下MAX(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update *** 作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。

使用单条INSERT语句插入多条记录, LAST_INSERT_ID返回的是列表中插入的第一条记录的id。

3 SELECT @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。它也是基于connection的,每个线程独立使用的。使用@@identity的前提是在进行insert *** 作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

4 SHOW TABLE STATUS where name ="tablename";

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值。根据表自增列设置的自增量,以这个值减去自增量,就是当前该表数据记录的最大自增ID。

它也是基于connection的,每个线程独立使用的。

主键一般有几种选择:

一般DBA会推荐InnoDB表必须建主键,而且推荐使用整型的自增主键。

三种选择的优先级是 自增id > 业务整型字段 > UUID。

如果使用UUID作为主键,那么B+树的聚集索引的key就是UUID,UUID通常会比整型字段要长,而且字符串的比较是需要逐个字节比较,所以得出两个缺点

比起自增id,虽然都是整型,但是业务字段有可能不是按顺序插入到表,考虑下图。

此时要插入索引值为4的节点,而B+树每页最多存放两个节点,插入4节点后,树变为

B+树特点是,所有节点从左右往右排好序,自增id插入B+是有序的,只会在节点放满了之后,才会新增一个页去存放,比起非自增id,会减少页分裂次数,提高性能。

对非主键进行索引,就是普通索引。

与聚集索引一样,每个普通索引建立后,会用一个B+树进行维护,但是叶子节点并非存储索引对应行的所有记录,而是只存储了主键值,此时得到主键值后,再回到聚集索引上查找一次,即可得到数据记录,即回表。

这个不带行数据完整信息的索引,就叫二级索引(secondary index),也叫辅助索引。

对多个字段同时建索引,就是联合索引。

当查询条件同时涉及多个字段,就可以使用联合索引。

联合索引会根据字段的出现顺序在B+树中排好序,例如先入name排序,当name相同时就使用age,直到比较出大小为止。 利用这个特性,可以使用最左前缀原则优化SQL。

以上就是关于mysql batchinsert怎么获取主键id全部的内容,包括:mysql batchinsert怎么获取主键id、MySQL - InnoDB主键索引、普通索引、唯一索引、联合索引、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9328034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存