2012-05-24 34 views
5

我試圖用多個插入(在一個聲明中)防止MySQL和我有這樣的表結構從插入隱含的默認值成NOT NULL列

CREATE TABLE Scores 
(
    studentID varchar(50) not null, 
    score int 
) 
ENGINE = InnoDB 

我的查詢:

INSERT INTO Scores Values 
('Barry', 45), 
(NULL, 41), 
('Jones', 53) 

這聲明(我期望)應該失敗,因爲[StudentID]列不接受NULL。 問題是MySQL在第2行插入了空字符串(''),並允許其餘部分繼續。

回答

11

問題:

SET SQL_MODE='STRICT_ALL_TABLES' 

或把

SQL_MODE='STRICT_ALL_TABLES' 

[mysqld]下到my.cnf(然後重新啓動MySQL)。

+0

如果我沒有MySQL上的這個特權呢?是否有可能從我的PHP做到這一點?另外,MySQL文檔還指出,更改SQL_MODE可能會影響數據庫的其他部分(例如分區,主站+從站...) – codingbiz

+1

@tunmisefasipe:所有用戶都具有該權限(用於他們當前的會話)。要從'PHP'完成,只需在你正在使用的庫中發出'mysql_query(「SET SQL_MODE ='STRICT_ALL_TABLES'」)'或它的模擬。是的,它可能會影響數據庫的其他部分。 – Quassnoi

+0

謝謝@Quassnoi我會試試看,看看事情進展如何 – codingbiz