如果我有两个表'user'和'orders'具有相同的user_id KEY,并且我想知道我是否在一个表中更新user_id,我如何让它在另一个表中自动更新?
CREATE TABLE users(
id SMALLINT AUTO_INCREMENT,
user_id VARCHAR(15),
PRIMARY KEY(id),
KEY(user_id)
) ENGINE=MyISAM;
CREATE TABLE orders(
user_id VARCHAR(15),
//otherStuff,
KEY(user_id)
) ENGINE=MyISAM;
答案 0 :(得分:5)
首先,我建议使用InnoDB引擎,而不是MyIsam。
InnoDB支持外键,在create table stament中包含“ENGINE = InnoDB;”
外键强制表之间的引用完整性,即如果您尝试INSERT
具有不存在的用户ID的订单,系统将抛出错误。
外键可以是更改的参考案例,例如,参考表中的更改ID可以是:
CREATE TABLE orders(
user_id VARCHAR(15),
//otherStuff,
KEY(user_id),
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON UPDATE CASCADE
) ENGINE=InnoDB;
此ON UPDATE CASCADE,在更改时更改user_id的值。
答案 1 :(得分:2)
MyISAM引擎不支持外键,所以我猜你必须使用触发器:
DELIMITER $$
CREATE TRIGGER abc AFTER update ON orders FOR EACH ROW BEGIN
UPDATE users SET user_id = NEW.user_id WHERE user_id = OLD.user_id;
END$$
DELIMITER ;
您还需要在users
表更新后触发的第二个触发器。