我有下表:
| uid (key) | version (key) | active | firstName |
| 1 | 0 | 0 | Piter |
| 1 | 1 | 0 | Pater |
| 1 | 2 | 1 | Peter |
如您所见,ID和Version列创建了一个组合键。ID设置为自动递增。现在我确实有两个问题:
1)我想在每次插入时增加版本,而不读取最后一个现有行的版本值。2)我想将给定uid的所有现有行都设置为active=0,因为插入的记录应该是活动记录。
我尝试在一个触发器中组合这两个步骤:
DELIMITER $$
CREATE TRIGGER before_member_insert
BEFORE INSERT
ON members FOR EACH ROW
BEGIN
DECLARE version INT;
SELECT MAX(version) INTO version FROM members WHERE uid=new.uid;
IF @version IS NULL THEN
new.version=0
ELSE
UPDATE members SET active=0 WHERE uid=uid;
END IF;
INSERT INTO members(version) VALUES(new.version);
END $$
DELIMITER ;
但我的MySQL服务器只是说:
#1064 - .version=0的SQL语法错误,否则UPDATE members SET active=0 WHERE uid=uid;在第8行结束i
是否可以使用触发器来实现我的目标?我需要如何更改它才能正常工作?
谢谢!
发布于 2020-05-02 10:37:11
如果是我的话,我会这么做,然后就这样...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,uid INT NOT NULL
,firstName VARCHAR(12) NOT NULL
);
INSERT INTO my_table (uid,firstname) VALUES
(1,'Piter'),
(1,'Pater'),
(1,'Peter');
SELECT x.*
FROM my_table x
JOIN
( SELECT MAX(id) id FROM my_table GROUP BY uid ) y
ON y.id = x.id;
+----+-----+-----------+
| id | uid | firstName |
+----+-----+-----------+
| 3 | 1 | Peter |
+----+-----+-----------+
https://stackoverflow.com/questions/61557368
复制相似问题