请问有没有比较好的办法在插入 mysql 的时候,把自动生成 id 同时加到另一个字段

2020-10-15 23:29:18 +08:00
 meteor2013
谢谢啊

对了,不用 trigger 实现
3216 次点击
所在节点    PHP
25 条回复
luckyrayyy
2020-10-15 23:59:26 +08:00
完全想不到这么做的意义....
meteor2013
2020-10-16 00:03:08 +08:00
@luckyrayyy 兄台,有些时候一言难尽。能否只提供办法
Jacky23333
2020-10-16 00:04:45 +08:00
分两步啊
wsfdljy
2020-10-16 00:17:11 +08:00
建个 view 查询的时候用,然后把 id 那个字段取两个别名。
wsfdljy
2020-10-16 00:25:16 +08:00
非要存两列,可以试下在一个事务里:先 insert,然后 update table set xx=LAST_INSERT_ID() where id = LAST_INSERT_ID();
只是一个想法,没验证过,你自己试一下。
lpts007
2020-10-16 00:54:36 +08:00
“一言难尽”的事能具体说说吗,大家对此很好奇。问题本身根本不关心。


e.g. 我坐地铁前必须把拳头塞进嘴里,但是嘴巴撑得慌,请问大家有什么好办法?
提出这种问题,不要怪大家问你为什么要塞进嘴里
lpts007
2020-10-16 00:57:28 +08:00
https://www.v2ex.com/t/685827#reply9


问题最终怎么解决的,也不回来做记录。再过 100 天又是一贴~
airqj
2020-10-16 07:31:51 +08:00
虚拟列也许可以
GiantHard
2020-10-16 07:58:56 +08:00
iminto
2020-10-16 08:42:03 +08:00
很简单,模拟序列就好了
defage
2020-10-16 09:36:17 +08:00
来个存储过程就好了。
这个在很多需要审计的数据中很常见,DB 一层记录行为,防止有人利用程序干涉数据安全
defage
2020-10-16 09:37:44 +08:00
不用触发器相当于就是要尿尿又不让用 jj
makia98
2020-10-16 09:59:31 +08:00
用事务啊
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 共享。
所以保证原子性,一致性。只能用事务,先插入再更新。
DavidNineRoc
2020-10-16 10:52:37 +08:00
所以说有什么用呢?
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 。
seanxx
2020-10-16 11:21:11 +08:00
手动生成,不用自增
lpts007
2020-10-16 13:22:03 +08:00
@gochat 表里存不存 url,前端管的到这个?
mosliu
2020-10-16 13:34:21 +08:00
@defage 这个世界上尿尿不用 jj 的还是有一半人的。。。
想半天。
gochat
2020-10-16 14:01:50 +08:00
@lpts007 接口读不大到这个 url,那就出出错啊,我说的是这个场景,这个 url 必须你提供,但 url 地址又跟自增 id 有关系,在新增的时候你又不知道 id 是多少,听明白了之间的矛盾了不

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/715410

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX