用另一个自动递增字段值更新字段

b4lqfgs4  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(348)

我在mysql数据库中有一个表,有两个字段:
id(自动递增字段)。
邮政编码。
插入新记录时,两个字段的值应该相同。因此,我应该用id值更新post\ id,同时确保用正确的值更新字段,而不是用任何其他新插入的记录值。
我尝试了此sql语句,但速度非常慢,我不确定是否选择了正确的值:

set @auto_id := (SELECT AUTO_INCREMENT 
                FROM INFORMATION_SCHEMA.TABLES
                WHERE TABLE_NAME='table_name'
                  AND TABLE_SCHEMA=DATABASE() ); 

update table_name set post_id= @auto_id where id=@auto_id ;

我对mysql没有很长的经验,我不能改变表结构。

8aqjt8rx

8aqjt8rx1#

您可以使用触发器:

CREATE TRIGGER UpdatePOST_id
BEFORE INSERT ON table_db
FOR EACH ROW 
SET NEW.post_id := (select id from table_db order by id DESC LIMIT 1)+1 ;

从现在起,无论您在post\u id列中插入什么值,都将被自动插入的id替换。
测试:

|id|post_id|
    |20|  20   |
    |21|  21   |
    |22|  22   |
    |23|  23   |

要扣动扳机:

DROP trigger UpdatePOST_id
pkwftd7m

pkwftd7m2#

您所采用的方法也不是事务安全的。
我能想到的最好的选择是使用触发器
编辑:根据@lagripe的提及

CREATE TRIGGER sometrigger
AFTER INSERT ON sometable
BEGIN
  SET NEW.post_id := (SELECT id from sometable order by DESC limit 1) + 1 ; // you may need +1 here. I couldn't test it.
END

或者你可以考虑使用 LAST_INSERT_ID ```
insert into table_name values ( .... );
update table_name set post_id = LAST_INSERT_ID();

但为什么首先需要两个具有相同id的列呢?
如果您真的需要,为什么不使用计算/生成的列呢?

CREATE TABLE Table1(
id DOUBLE,
post_id DOUBLE as (id)
);

相关问题