2017-03-06 48 views
0

我想用ALTER添加一個新的列(authorID)到測試表,但我想有一個特定的值(我不知道)。mysql改變表格添加列與選定

我想運行以下,但獲取SQL錯誤。這是可能的,如果是的話,請問我哪裏錯了?

SELECT id FROM authors WHERE emailAddress = 'UNASSIGNED' into @unassignedID; 
ALTER TABLE Tests ADD COLUMN authorID INT NOT NULL DEFAULT @unassignedID; 

作者表:

CREATE TABLE authors 
(
    ID INT NOT NULL AUTO_INCREMENT, 
    emailAddress VARCHAR(100) NOT NULL UNIQUE, 
    regionID INT NOT NULL, 
    PRIMARY KEY(ID) 
); 

測試表:

CREATE TABLE Tests 
(
    testID INT NOT NULL AUTO_INCREMENT, 
    Title VARCHAR(100) DEFAULT NULL, 
    PRIMARY KEY(testID) 
); 
+2

不,它不喜歡的工作。在alter table之後,您需要插入或更新(取決於您在測試表中是否有記錄)。如果你需要插入,那麼使用'insert ... select ... instead'。您也無法將結果檢索到像這樣的會話變量中。 – Shadow

回答

0

您可以使用preparedstatement

SELECT id into @unassignedID FROM authors WHERE emailAddress = 'UNASSIGNED' limit 1; 
SET @sql = CONCAT('ALTER TABLE Tests ADD COLUMN authorID INT NOT NULL DEFAULT ',@unassignedID); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;