使用外键更新表

时间:2017-12-16 23:37:41

标签: mysql database foreign-keys relational-database

我是mysql的新手,为了创建一个简单的数据库,我为3个表制定了以下规范:

DROP TABLE IF EXISTS representative;
CREATE TABLE representative(
    id_representative VARCHAR(15),
    name VARCHAR(15),
    PRIMARY KEY(id_representative)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS congress;
CREATE TABLE congress(
    id_congress INT,
    PRIMARY KEY(id_congress)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS representative_congress;
CREATE TABLE representative_congress(
    id_ai INT AUTO_INCREMENT,
    id_representative VARCHAR(15),
    id_congress INT,
    party VARCHAR(2),
    PRIMARY KEY(id_ai),
    FOREIGN KEY(id_congress) REFERENCES congress(id_congress) ON UPDATE CASCADE,
    FOREIGN KEY(id_representative) REFERENCES representative(id_representative) ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=latin1;

代表和会议表中的信息一旦插入就不会改变(对于两个不同的代表,我不会有两个相同的id_代表,或者两个不同的代表会有两个相等的id_congress)。但是,deleg_congress表用于这样的情况:在同一次大会(时间跨度为2年)中,给定的代表会改变各方(或者甚至可以在未来添加到表中的更多字段),所以我会具有相同的id_representative链接到同一个国会的不同党派,甚至更多的领域。

考虑到这一点,我有两个问题:

  • 我是否需要在表格规范或插入查询中添加任何约束?请记住,信息将被添加到表中一次,只有在表/数据库被删除时才会被更改。

  • 有没有办法,只需一个INSERT查询,插入 一次属于两个不同表的信息,如某种级联命令?例如,id_representative,属于代表和代表_表格。

提前致谢

1 个答案:

答案 0 :(得分:0)

约束条件良好,代表和会议表的主键确保了该信息的完整性,而represent_congress中的外键阻止了错误的关系,唯一的考虑因素是无法插入到representative_congress之前在前面的表格中插入id。

在只有一个insert语句的两个(或多个)表中插入数据的方法是使用触发器,但是您需要为插入定义默认插入或逻辑,例如

CREATE TRIGGER trigger_name
    AFTER INSERT
    ON representative FOR EACH ROW
    insert into representative_congress (id_representative, id_congress, party)
    values (NEW.id_representative, 1, '01')