mysql自动分配外键id

u1ehiz5o  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(375)

我有一张主桌叫 results . 例如

CREATE TABLE results (
    r_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    r_date DATE NOT NULL,
    system_id INT NOT NULL,
    FOREIGN KEY (system_id) REFERENCES systems(s_id) ON UPDATE CASCADE ON DELETE CASCADE
);

系统表如下:

CREATE TABLE systems (
    s_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    system_name VARCHAR(50) NOT NULL UNIQUE
);

我正在用python编写一个带有mysql连接器的程序。有没有办法把数据添加到 systems 然后自动分配生成的 s_idresults table?
我知道我可以 INSERT 进入 systems ,然后再次调用该表以查看 s_name ,添加到 results 但我认为sql中可能有一些我不知道的怪癖,可以通过减少对db的调用来简化工作?

ruarlubt

ruarlubt1#

你可以在这样一个触发器中执行你所描述的操作:

CREATE TRIGGER t AFTER INSERT ON systems
FOR EACH ROW
  INSERT INTO results SET r_date = NOW(), system_id = NEW.s_id;

这是可能的,因为 results 表很容易从触发器可以访问的数据中填充。自动增量会自动填充,不需要填充其他列。如果你有更多的列在 results table,这会更难。
您应该阅读更多关于触发器的内容:
https://dev.mysql.com/doc/refman/8.0/en/create-trigger.html
https://dev.mysql.com/doc/refman/8.0/en/triggers.html

相关问题