1
luckyrayyy 2020-10-15 23:59:26 +08:00
完全想不到这么做的意义....
|
2
meteor2013 OP @luckyrayyy 兄台,有些时候一言难尽。能否只提供办法
|
3
Jacky23333 2020-10-16 00:04:45 +08:00 via Android
分两步啊
|
4
wsfdljy 2020-10-16 00:17:11 +08:00
建个 view 查询的时候用,然后把 id 那个字段取两个别名。
|
5
wsfdljy 2020-10-16 00:25:16 +08:00 1
非要存两列,可以试下在一个事务里:先 insert,然后 update table set xx=LAST_INSERT_ID() where id = LAST_INSERT_ID();
只是一个想法,没验证过,你自己试一下。 |
6
lpts007 2020-10-16 00:54:36 +08:00 2
“一言难尽”的事能具体说说吗,大家对此很好奇。问题本身根本不关心。
e.g. 我坐地铁前必须把拳头塞进嘴里,但是嘴巴撑得慌,请问大家有什么好办法? 提出这种问题,不要怪大家问你为什么要塞进嘴里 |
7
lpts007 2020-10-16 00:57:28 +08:00 1
|
8
airqj 2020-10-16 07:31:51 +08:00 via Android
虚拟列也许可以
|
9
GiantHard 2020-10-16 07:58:56 +08:00 via iPhone
|
10
iminto 2020-10-16 08:42:03 +08:00
很简单,模拟序列就好了
|
11
defage 2020-10-16 09:36:17 +08:00
来个存储过程就好了。
这个在很多需要审计的数据中很常见,DB 一层记录行为,防止有人利用程序干涉数据安全 |
12
defage 2020-10-16 09:37:44 +08:00
不用触发器相当于就是要尿尿又不让用 jj
|
13
makia98 2020-10-16 09:59:31 +08:00
用事务啊
|
14
1194129822 2020-10-16 10:45:02 +08:00
没什么一步方法,LAST_INSERT_ID()线程安全,但是是 connection 连接后上一个插入的自增 id,没插入前还没生成。
select auto_increment from information_schema.tables where table_schema ='db_name' and table_name='xxx'; 线程不安全,auto_increment connection 共享。 所以保证原子性,一致性。只能用事务,先插入再更新。 |
15
DavidNineRoc 2020-10-16 10:52:37 +08:00
所以说有什么用呢?
|
16
gochat 2020-10-16 11:02:05 +08:00
@lpts007 我说一个我之前看到的很傻的场景,前端要求后端生成分享的 url,一个表里面假设有 id,share_url 两个字段,而 share_url (假设为: https://www.test.com/test/test?id=xxx )中的 GET 参数有个 id 字段,等于当前表里的 id,你在新增表记录的时候,并不知道这个 id 是多少,只能 insert 后再去 update 。
|
17
seanxx 2020-10-16 11:21:11 +08:00
手动生成,不用自增
|
20
gochat 2020-10-16 14:01:50 +08:00
@lpts007 接口读不大到这个 url,那就出出错啊,我说的是这个场景,这个 url 必须你提供,但 url 地址又跟自增 id 有关系,在新增的时候你又不知道 id 是多少,听明白了之间的矛盾了不
|
22
lpts007 2020-10-16 14:14:04 +08:00 via Android
|