MySQL允许插入,即使不存在所需的字段



我有一个用户数据库表,它的设置类似于:

+---------------------+--------------+------+-----+------------+----------------+
| Field               | Type         | Null | Key | Default    | Extra          |
+---------------------+--------------+------+-----+------------+----------------+
| id_user             | int(5)       | NO   | PRI | NULL       | auto_increment |
| login               | varchar(50)  | NO   |     |            |                |
| password            | varchar(50)  | NO   |     |            |                |
| address             | varchar(255) | NO   |     | NULL       |                |
+---------------------+--------------+------+-----+------------+----------------+

由于地址字段被设置为非null,并且默认值为null,这应该有效地使地址字段成为必需的,对吧?

但是当我执行如下查询时:

INSERT INTO mydatabase.users
SET
    mydatabase.users.login='test_username',
    mydatabase.users.password='test_password'

它成功地保存了用户,而没有抱怨地址字段,该字段被设置为空白。

是什么原因造成的?我预计这种情况会出错。我在MySQL 5.5和5.6中尝试过。

配置文件中没有启用严格的SQL模式,因此mysql放松了对数据插入的某些控制:

严格模式控制MySQL如何处理INSERT或UPDATE等数据更改语句中的无效或缺失值。一个值可能由于多种原因而无效。例如,它可能具有错误的列数据类型,或者可能超出范围。如果要插入的新行不包含定义中没有显式DEFAULT子句的非NULL列的值,则缺少值。(对于NULL列,如果缺少值,则插入NULL。)严格模式也会影响DDL语句,如CREATE TABLE。

相关内容

  • 没有找到相关文章

最新更新