首页 文章

从mysql中的autoincrement主键分配外键

提问于
浏览
0

新的mysql,感谢任何帮助 .

我有三个表: organizationslocationsshows . 我想在 shows 中使用自动增量分配的主键 organizationslocations 作为外键 . 当我输入这个表的值时,代码mysql如何自动拉出 shows 的外键?或者,根据自动递增的主键自动分配的内容,当我在 shows 中输入每行的值时,手动分配是最佳做法吗?

以下是我创建所有三个表的方法, organizationslocations 都已插入所有条目(因此通过自动增量分配主键):

organizations

CREATE TABLE organizations(
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(64) NOT NULL,
    sex CHAR(1) NOT NULL,
    start_year YEAR NOT NULL,
    end_year YEAR NOT NULL,
    notes LONGTEXT,
    PRIMARY KEY (id)
    );

locations

CREATE TABLE locations (
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(64) NOT NULL,
    address_name VARCHAR(64) NOT NULL,
    address_lat FLOAT(10,6) NOT NULL,
    address_long FLOAT(10,6) NOT NULL,
    type VARCHAR(64) NOT NULL,
    notes LONGTEXT,
    PRIMARY KEY (id)
    );

shows

CREATE TABLE shows (
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    organization_id MEDIUMINT NOT NULL,
    location_id MEDIUMINT NOT NULL,
    date DATE NOT NULL,
    cost DECIMAL (2,2),
    money_raised DECIMAL (6,2),
    charity VARCHAR(64),
    audience_size MEDIUMINT,
    band VARCHAR(64),
    blackface CHAR(1),
    drag CHAR(1),
    notes LONGTEXT,
    PRIMARY KEY (id)
    );


ALTER TABLE shows
    ADD CONSTRAINT FK1_shows
    FOREIGN KEY (organization_id) REFERENCES organizations(id)
    ON UPDATE CASCADE
    ON DELETE CASCADE;

ALTER TABLE shows
    ADD CONSTRAINT FK2_shows
    FOREIGN KEY (location_id) REFERENCES organizations(id)
    ON UPDATE CASCADE
    ON DELETE CASCADE;

1 回答

  • 0

    您可以使用insert语句,根据名称值从其他表中选择id值,如下所示:

    INSERT INTO shows (
        organization_id,
        location_id,
        date
    ) VALUES (
        (SELECT id FROM organizations WHERE name = 'my_org_name'),
        (SELECT id FROM locations WHERE name = 'my_loc_name'),
        '2016-05-01'
    );
    

    当然,您也会为其他一些列插入值 .

相关问题