gpt4 book ai didi

缺少非空字段的 MySQL 插入查询

转载 作者:行者123 更新时间:2023-12-01 00:31:05 24 4
gpt4 key购买 nike

我目前正在尝试为 CodeIgniter 使用对象关系映射器,但我遇到了一些我没有预料到的事情。

我有一个包含几个字段的表,其中一些字段不是 NULL。生成一个缺少 NOT NULL 字段的插入查询——添加了一个新行,但这些字段为空白。

我不知道 MySQL 会忽略查询中不存在的 NOT NULL 字段并插入该行。有没有办法限制这个?

-编辑-

让我再添加一些细节并试着解释一下

这是一个示例表:

CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`color` varchar(40) COLLATE utf8_bin DEFAULT '',
`shape` varchar(40) COLLATE utf8_bin NOT NULL,
`size` varchar(40) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

这是一个示例查询:

INSERT INTO `test` (`shape`) VALUES ('foo')

我的查询中没有 size 但它仍然添加行 - 这是预期的吗?

(示例查询在 phpMyAdmin 中运行)

最佳答案

考虑到问题的测试 INSERT 语句,我认为接受的答案是不正确的。在我看来,这个表或数据库的 MySQL 的“严格模式”已关闭。来自 the docs :

Strict mode controls how MySQL handles input values that are invalid or missing... A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition...

If you are not using strict mode (that is, neither STRICT_TRANS_TABLES nor STRICT_ALL_TABLES is enabled), MySQL inserts adjusted values for invalid or missing values and produces warnings.

您可以通过这些查询了解您的数据库是如何运行的:

SELECT @@global.sql_mode;
SELECT @@session.sql_mode;

此处讨论更改这些值:https://stackoverflow.com/a/5273824/27846

关于缺少非空字段的 MySQL 插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com