1
Takamine 2019-06-09 22:25:04 +08:00 via Android
emmmmm ……我感觉万恶的存储过程应该可以帮你。(づ ●─● )づ
|
2
chendy 2019-06-09 22:30:19 +08:00 3
取个巧,先批量插入前 n-1 个,最后单独插入最后一个拿 id
|
3
luckylo 2019-06-09 22:33:00 +08:00 via Android
last_insert_id+插入的条数?
|
4
kj1 2019-06-09 23:01:31 +08:00 via Android
c++ Java go API 都有返回值的,你是问用 SQL 语言查,而不是驱动返回值? SQL 语言无法保证一致性的
|
6
xnotepad OP @kj1 go 的哪个驱动可以正确返回?我目前用的是 https://github.com/go-sql-driver/mysql,返回的是最小值,我猜应该是采用官方的 last_insert_id() 函数实现的。
而且我要的也是当前会话的 id,不需要全局的。 |
7
kj1 2019-06-09 23:22:29 +08:00 via Android
golang lastinsertid+rowsaffected 如果插入 0 条,那么 last inserted+rows affected=0
|
8
kj1 2019-06-09 23:25:10 +08:00 via Android
if rowsaffected <= 0
logwarning else lastinsertid+rowsaffected-1 |
9
kj1 2019-06-09 23:27:26 +08:00 via Android
如果是 insert on duplicate update 那么各种判断要多很多
|
10
CFO 2019-06-09 23:39:46 +08:00 via Android
必须要自增 id 吗 自己生成 id 放进去行不行?
|
11
gavindexu 2019-06-09 23:41:36 +08:00 via iPhone
靠 timestamp 实现?
|
12
agostop 2019-06-10 08:59:01 +08:00
jdbc 不行吗?单条是能返回的,多条没试过
|
13
agostop 2019-06-10 09:00:08 +08:00
喔,没看到是 go,那不清楚,抱歉
|
14
xnotepad OP @kj1 这个就和我前面说的一样了。需要自己再操作一步。我是想如果有类似于 postgres 中的 lastval 之类的函数可以直接返回就更好了。
毕竟自己实现还需要考虑步长等问题,比较麻烦。 |
15
kj1 2019-06-10 15:05:57 +08:00 via Android
@xnotepad 自增功能主要是去重的,dba 装机时一般没有必要将默认步长改为大于 1 吧,自己写几行代码也很快,没有必要希望 MySQL 加个新接口
|
16
superalsrk 2019-06-10 15:50:32 +08:00
select table_name, AUTO_INCREMENT from information_schema.tables where table_name="get_max_id";
|
18
xnotepad OP @superalsrk 你这个实现应该是非线程安全的吧?
|