⽇常-SQL批量插⼊MySQL⾮⾃增主键
⽂章⽬录
环境
MyBatis-Plus
MySQL 5.7
前⾔
最近因业务需要,需要在⼀张主键⾮⾃增的表⾥使⽤ SQL 插⼊数据,表结构如下:
CREATE TABLE non_inc
(
mysql帮助文档id BIGINT NOT NULL
PRIMARY KEY
-
- 其他字段
);
原 id ⽣成策略是 IdType::ASSIGN_ID,此时 SQL 插⼊数据时若不提供主键将会报错,提供的主键需要满⾜以下条件:
1. 不能修改原来的表结构
2. 数字类型
3. 唯⼀且不能和未来的 id 冲突
解决⽅案
根据需求与约束我打开了 MySQL 的⽂档 查有关数字的函数,查看了⼀轮貌似可以根据 和 相组合完成 id 的⽣成,但是会有⼀个致命的弱点,⽣成的随机数字有可能冲突,想到这⾥直接放弃该⽅案。
要是能能添加 AUTO INC 约束就好了,我不经这么想着,既然不能添加约束,那我模拟⽣成不就⾏了?想到这马上开⼲,实现步骤为:
1. 若是第⼀步,⽣成⼀个不会和历史与未来冲突的 id
2. 若不是第⼀步,获取上⼀个 id + 1 当作当前 id
查阅⽂档 能很好的解决我的问题,于是乎就得到了下⾯ SQL:
INSERT INTO non_inc(id)
SELECT IF(LAST_INSERT_ID()=0,
LAST_INSERT_ID(NOW()*1000),
LAST_INSERT_ID(LAST_INSERT_ID()+1));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论