我在MYSQL数据库中有一个包含两个字段的表:
当我插入新记录时,两个字段应具有相同的值。因此,我应该用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经验不足,因此无法更改表结构。
答案 0 :(得分:1)
您遵循的方法也不安全。
我能想到的最好的选择是使用触发器
编辑:根据@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)
);
答案 1 :(得分:0)
您可以使用触发器:
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_id列中作为值插入什么,都将被自动插入的ID取代。
测试:
|id|post_id|
|20| 20 |
|21| 21 |
|22| 22 |
|23| 23 |
要删除触发器:
DROP trigger UpdatePOST_id