嘗試將資料插入表中而未明確指定缺少的不可空列的值如果沒有預設值, MySQL 可能會拋出一個錯誤,指出「欄位沒有預設值」(錯誤編號: 1364).
使用者在插入具有以下架構的表時遇到此錯誤:
CREATE TABLE try ( name VARCHAR(8), CREATED_BY VARCHAR(40) NOT NULL );
建立了一個觸發器來自動填入CREATED_BY欄位的使用者名稱:
CREATE TRIGGER autoPopulateAtInsert BEFORE INSERT ON try FOR EACH ROW SET NEW.CREATED_BY = USER();
但是,嘗試使用以下查詢:
INSERT INTO try (name) VALUES ('abc');
仍然會出現錯誤訊息。
錯誤訊息是在 MySQL 設定檔中設定 STRICT_TRANS_TABLES SQL 模式的結果(my.ini 或類似檔案)。此模式強制執行有關不可為空列的預設值的嚴格規則。要解決此問題,使用者應該:
或者,使用者可以為使用 ALTER TABLE 語句的 CREATED_BY 欄位。但是,如果觸發器旨在動態設定值,則此方法可能不合適。
以上是為什麼 MySQL 會拋出錯誤 1364:「欄位沒有預設值」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!