2016-04-28 290 views
0

mysql新手,感謝任何幫助。從mysql自動增量主鍵分配外鍵

我有三個表格:organizationslocationsshows。我想使用organizationslocations的自動增量分配主鍵作爲shows中的外鍵。當我爲該表輸入值時,代碼mysql如何自動爲shows拉外鍵?或者,當我在shows中輸入每行的值時,根據自動遞增的主鍵自動分配的值,手動分配是最佳做法嗎?

下面是我創建的所有三個表,都organizationslocations已插入所有條目(並通過自動增量分配因而主鍵):

組織

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) 
    ); 

地點

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) 
    ); 

顯示

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; 
+0

表「組織」和「位置」是否有另一個唯一的列值,您在將某個記錄插入到show中時知道?例如,'locations.name'?如果不是,你怎麼知道你想鏈接到哪個位置和組織? – trincot

+0

是的,organizational_name和locations_name位於Excel中,對應於表「shows」中的行。 – user2337225

+0

看看'LAST_INSERT_ID()'函數。在使用自動增量插入表格後,它會返回分配的ID。當你用外鍵插入到表中時,可以使用它。 – Barmar

回答

0

你可以使用它選擇ID基於name值的其它表值,像這樣的插入語句:

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' 
); 

當然,你會插入一些其他列的值。

+0

@ user2337225,這是否解決了您的問題?你可以提供一些反饋嗎? – trincot