Schema
Percona 和 MariaDB-10.0 忽略表欄位不為空
在 percona-5.6 和 MariaDB-10.0 伺服器上,表欄位上聲明的 NOT NULL 將被忽略。在插入數據時,我可以將聲明為 NOT NULL 的欄位留空,並且伺服器不會引發錯誤或停止插入。當我在 MySQL-5.6 和 MariaDB-5.5 上嘗試它時,它可以正常工作,並且不允許您在聲明為 NOT NULL 的欄位上插入空值。
請告知為什麼在 mariaDB-10.0 上會出現這種情況。謝謝
這取自 MySQL 文件:
MySQL 5.7.1 中的更改(2013-04-23,里程碑 11)
…如果一列被聲明為 NOT NULL,則不允許將 NULL 插入該列或將其更新為 NULL。但是,即使存在將列設置為非 NULL 值的 BEFORE INSERT(或 BEFORE UPDATE 觸發器),也會強制執行此約束。現在,根據 SQL 標準,在語句末尾檢查約束。(錯誤#6295,錯誤#11744964)。…
基本上要改變這種行為可以做到以下幾點:
MariaDB> SET SESSION sql_mode := 'NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; MariaDB> SELECT @@GLOBAL.sql_mode 'sql_mode::GLOBAL', @@SESSION.sql_mode 'sql_mode::SESSION'; +------------------------+-----------------------------------------------------------------------------------------------------------------+ | sql_mode::GLOBAL | sql_mode::SESSION | +------------------------+-----------------------------------------------------------------------------------------------------------------+ | NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------+-----------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB> SHOW CREATE TABLE `table_name`; +------------+----------------------------------------------------------------------------+ | Table | Create Table | +------------+----------------------------------------------------------------------------+ | table_name | CREATE TABLE `table_name` ( | | | `id` INT(11) UNSIGNED NOT NULL, | | | `field` VARCHAR(20) DEFAULT NULL, | | | `field_with_default_value` VARCHAR(20) NOT NULL DEFAULT 'myDefault' | | | ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +------------+----------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB> INSERT INTO `table_name`(`id`, `field`, `field_with_default_value`) VALUES (1, 'Value', NULL); ERROR 1048 (23000): Column 'field_with_default_value' cannot be null
我希望這是路上的一盞燈。