2011-09-19 49 views
1

我有兩個MySQL表格,它們之間有一對多的關係。例如:在一個動作中填充MySQL記錄一對多的相關表格

CREATE TABLE test1 (
    pk1 INTEGER AUTO_INCREMENT PRIMARY KEY, 
    testvalue1 INTEGER 
); 

CREATE TABLE test2 (
    pk2 INTEGER AUTO_INCREMENT PRIMARY KEY, 
    testvalue2 VARCHAR(50), 
    fk2 INTEGER NOT NULL, 
    FOREIGN KEY (fk2) REFERENCES test1 (pk1) 
); 

如果我想插入記錄兩個表中,我可以先插入在PK表中的記錄(例如INSERT INTO test1 SET testvalue1=100),確定的PK值(例如SELECT MAX(pk1) AS LastId FROM test1或使用LAST_INSERT_ID()) 最後使用值填充第二個表中的FK列。

但是有可能在1個命令/查詢/操作中實現這一切嗎?那麼讓我們使用AUTO INCREMENT來填充PK和FK值?

回答

1

您應該使用兩個INSERT命令;或者嘗試使用INSERT觸發器。

編輯:

與觸發--An例如:

CREATE TABLE dept(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    dept_name VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (id) 
) 
ENGINE = INNODB; 

CREATE TABLE emp(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    emp_name VARCHAR(255) DEFAULT NULL, 
    dept_id INT(11) DEFAULT NULL, 
    PRIMARY KEY (id), 
    CONSTRAINT FK_emp_dept_id FOREIGN KEY (dept_id) 
    REFERENCES dept (id) ON DELETE RESTRICT ON UPDATE RESTRICT 
) 
ENGINE = INNODB; 

DELIMITER $$ 

CREATE TRIGGER trigger1 
AFTER INSERT 
ON dept 
FOR EACH ROW 
BEGIN 
    INSERT INTO emp VALUES (NULL, 'Someone', NEW.id); 
END 
$$ 

DELIMITER ; 


-- Try to add new department. 
INSERT INTO dept VALUES(NULL, 'Sales'); 

-- Is there new default employee? 
SELECT * FROM emp; 
+----+----------+---------+ 
| id | emp_name | dept_id | 
+----+----------+---------+ 
| 1 | Someone |  1 | 
+----+----------+---------+ 
+0

我怎樣才能做到這一點? – waanders

+0

我添加了一個例子。 – Devart

+0

好的,謝謝。但現在它一直在插入員工'Someone'。我怎樣才能讓代碼更具動態性?並可能插入x員工? – waanders

相關問題