時沒有收到錯誤消息爲什麼在更新時NOT NULL列,然後將數據轉換爲0。MySQL的:更新NOT NULL列設置爲空
我期待它只是沒有錯誤的MySQL接受空數據出現。如果有人試圖將非空列更新爲空,我怎麼能得到一個錯誤?我需要它,所以我可以回滾事務,如果我得到一個錯誤。是否有任何配置需要在數據庫內做到這一點?謝謝
時沒有收到錯誤消息爲什麼在更新時NOT NULL列,然後將數據轉換爲0。MySQL的:更新NOT NULL列設置爲空
我期待它只是沒有錯誤的MySQL接受空數據出現。如果有人試圖將非空列更新爲空,我怎麼能得到一個錯誤?我需要它,所以我可以回滾事務,如果我得到一個錯誤。是否有任何配置需要在數據庫內做到這一點?謝謝
您尚未指定您正在使用的是哪個版本的Mysql,以及處於哪種模式。我會回答這個假設你正在運行Mysql 5.7 而不是嚴格模式。
嚴格模式控制MySQL如何處理數據更改語句(如INSERT或UPDATE)中的無效值或缺失值。由於多種原因,值可能無效。例如,它可能具有該列的錯誤數據類型,或者它可能超出範圍。當要插入的新行不包含非NULL列的值時,缺少其定義中沒有顯式DEFAULT子句的值。 (對於NULL列,如果值缺失,則插入NULL。)嚴格模式也影響DDL語句,例如CREATE TABLE。
如果嚴格模式不生效,MySQL會爲無效值或缺失值插入調整值並生成警告(請參見第13.7.5.40節「SHOW WARNINGS Syntax」)。在嚴格模式下,您可以使用INSERT IGNORE或UPDATE IGNORE來產生此行爲。
來源:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-full
我建議您啓用嚴格模式(STRICT_ALL_TABLES)和修復您的應用程序來支持它;這也將強制執行其他查詢限制,其中人們通常被ONLY_FULL_GROUP_BY擊中。
要在服務器啓動時設置SQL模式,請在命令行上使用--sql-mode =「modes」選項,或在選項文件(如my.cnf)中使用sql-mode =「modes」 Unix操作系統)或my.ini(Windows)。模式是用逗號分隔的不同模式的列表。要明確清除SQL模式,請在命令行中使用--sql-mode =「」或選項文件中的sql-mode =「」將其設置爲空字符串。
要改變SQL模式在運行時,使用SET語句設置全局或會話的sql_mode系統變量:
SET GLOBAL sql_mode = 'modes'; SET SESSION sql_mode = 'modes';
來源:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting
爲什麼更新NOT NULL列和 然後將數據轉換爲0
您的問題什麼時候MySQL的接受空數據並不清楚,因爲我們需要的DDL的表和更新,但從你所說的,從邏輯上說,因爲列不爲null具有默認值0.請檢查下面的示例。
create table Test_table (name varchar(100) null , position_s varchar(100) default 'Y' not null)
SQL>
Table created
insert into Emp_table (name) values('Me')
SQL>
1 row inserted
SQL>
NAME POSITION_S
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Me Y
@ aaron0207 @Moudiz我使用laravel和像這樣更新數據。
$specificReservation = Reservation::where('reference_id',$reference_id)->first();
$specificReservation->res_status = 1;
$specificReservation->payment_id = null;
$specificReservation->save();
我也試圖與該
UPDATE reservations SET payment_id = null
手動更新數據庫,它也沒有顯示出錯誤,所以我認爲這是一個數據庫的問題。
請在你的問題中加上這個,並檢查sisve answet – Moudiz
是否有默認值?你能顯示錶的ddl和你正在運行的更新嗎? – Moudiz
向我們展示你的遷移文件,至少是哪個使用這個列,並告訴我們database.php配置數組(當然沒有數據庫憑證) – aaron0207
還有一件事,你是使用自己的處理程序還是重寫了香草處理程序? – aaron0207