自动更新关系表中的键

时间:2011-06-17 04:02:00

标签: mysql sql

如果我有两个表'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;

2 个答案:

答案 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表更新后触发的第二个触发器。