
1 Takamine 2019-06-09 22:25:04 +08:00 via Android emmmmm ……我感觉万恶的存储过程应该可以帮你。(づ ●─● )づ |
2 chendy 2019-06-09 22:30:19 +08:00 取个巧,先批量插入前 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 你这个实现应该是非线程安全的吧? |