gpt4 book ai didi

mysql - 如何创建一个 SQL 触发器来抓取传递到激活触发器的查询中的数据?

转载 作者:行者123 更新时间:2023-11-29 12:17:02 25 4
gpt4 key购买 nike

我想在将条目添加到 votes 时做到这一点表,以 user 为准message/comment被投票的获得进入他们的 total_votes 。我调查了sql triggers看起来这就是我想要的,但我不确定如何从用户创建的投票中获取信息,以便查找正确的 messageId从而找到发布该消息的用户。

CREATE TABLE marks (
id int(5) AUTO_INCREMENT,
PRIMARY KEY (id),
x float(10, 6),
y float(10, 6),
z float(10, 6),
timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
messageId int(5) NULL,
commentId int(5) NULL,
userToken VARCHAR(255),
FOREIGN KEY (messageId) REFERENCES messages(id),
FOREIGN KEY (commentId) REFERENCES comments(id),
FOREIGN KEY (userToken) REFERENCES users(token)
);

CREATE TABLE messages (
id int(5) AUTO_INCREMENT,
messageString text,
image varchar(255),
score int(5) DEFAULT 0,
PRIMARY KEY (id)
);

CREATE TABLE comments (
id int(5) AUTO_INCREMENT,
commentString text,
messageId int(5),
PRIMARY KEY (id),
FOREIGN KEY (messageId) REFERENCES messages(id)
);

CREATE TABLE votes (
id int(5) AUTO_INCREMENT,
PRIMARY KEY(id),
userToken VARCHAR(255),
messageId int(5) NULL,
commentId int(5) NULL,
FOREIGN KEY (userToken) REFERENCES users(token),
FOREIGN KEY (messageId) REFERENCES messages(id),
FOREIGN KEY (commentId) REFERENCES comments(id),
UNIQUE KEY (userToken, messageId),
UNIQUE KEY (userToken, commentId)
);

CREATE TABLE users (
token VARCHAR(255),
PRIMARY KEY(token),
total_votes int(5)
);

最佳答案

您可以使用 NEW. 前缀引用触发器中的新值。即,如果您插入包含字段 value 的行,则该字段在触发器中可用为 NEW.value,从那里构造一个 在为您的投票表插入 触发器之后。像这样的东西:

DELIMITER //
create trigger vote_increment after insert on votes
for each row
begin
update users set total_votes = total_votes + 1 where token = NEW.user_token;
end//
DELIMITER ;

demo fiddle here

我不确定你的最终逻辑需要是什么,因为你提到了消息表,而且我不明白为什么有必要让用户更新他们的总数,因为投票表包含 用户 token

关于mysql - 如何创建一个 SQL 触发器来抓取传递到激活触发器的查询中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com