当前位置: 首页 > 面试题库 >

MySQL在NOT NULL列中插入具有NULL值的记录

齐永昌
2023-03-14
问题内容

为什么第一个INSERT要通过table2。请注意,table2.col_1不为NULL。它不会为col_1插入NULL,而是神秘地将NULL值转换为空字符串。我正在使用MySQL
5.5.28版本。谢谢

mysql> DROP TABLE IF EXISTS table1, table2;

Query OK, 0 rows affected (0.01 sec)

mysql> CREATE  TABLE IF NOT EXISTS table1 (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    -> col_1 VARCHAR(45) NOT NULL ,
    -> col_2 VARCHAR(45) NOT NULL ,
    -> PRIMARY KEY (`id`))
    -> ENGINE = InnoDB;

Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE table2 LIKE table1;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO table1 (id, col_1, col_2) VALUES (NULL, "xxx","yyy");
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO table2 (id, col_1, col_2) SELECT NULL, NULL, col_2 FROM table1 WHERE id=1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 1

mysql> SHOW WARNINGS;
+---------+------+-------------------------------+
| Level   | Code | Message                       |
+---------+------+-------------------------------+
| Warning | 1048 | Column 'col_1' cannot be null |
+---------+------+-------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table2;
+----+-------+-------+
| id | col_1 | col_2 |
+----+-------+-------+
|  1 |       | yyy   |
+----+-------+-------+
1 row in set (0.00 sec)

mysql> INSERT INTO table2 (id, col_1, col_2) VALUES( NULL, NULL, "zzz");
ERROR 1048 (23000): Column 'col_1' cannot be null

mysql> SELECT * FROM table2;
+----+-------+-------+
| id | col_1 | col_2 |
+----+-------+-------+
|  1 |       | yyy   |
+----+-------+-------+
1 row in set (0.00 sec)

问题答案:

您已关闭MySQL的STRICT模式。打开它,您将得到一个错误。

否则,您可以通过以下方式使用PDO测试这些警告:http :
//php.net/manual/en/pdo.errorinfo.php



 类似资料:
  • 问题内容: 我想在具有动态列的表中添加值。我设法用动态列创建了一个表,但无法弄清楚如何插入数据。 问题答案: 您还可以使用数据库元数据获取列名。这样的好处是,您甚至不需要知道列名,而是可以在您的代码中动态检索它们。 一旦有了列名,就可以像平常一样使用它(List.size()当然会给出列数)。 更新: 此代码假定您将正确类型的对象传递给PreparedStatement.setObject(Obj

  • 我有一个使用存储过程填充的表。这个存储过程使用从另一个数据库调用属性的视图。 举例来说,它类似于: 视图的定义如下: 并正确插入值,但如果以这种方式使用视图: 显示此消息: 正在检查身份信息:当前身份值“1252” DBCC执行已完成。如果DBCC打印了错误消息,请与系统管理员联系。 Msg 515,第16级,状态2,过程TSP,第16行 无法将值NULL插入表db2的“金额”列中。dbo。表';

  • Hy, 我为数据库创建了以下3个表: ); 我有以下存储过程 C#代码: 但在我将数据插入使用上述代码的表单后,我得到了以下错误: 无法将值NULL插入列User_Id...... PLATFORM. MDF. dbo. Buyer;列不允许空值。INSERT失败。 无法将值NULL插入列Type_Id,表... PLATFORM. MDF. dbo. User;列不允许空值。INSERT失败。

  • 问题内容: 我在MySQL中有一个表,其中有几列具有指定的默认值,但是当我尝试插入行时(未为这些默认列指定值),它抛出错误,提示我无法插入NULL值。 这是表格示例; 它抱怨TimeZoneId,当我填充TimeZoneId时,它抱怨CultureInforId。 我正在使用MySQL版本:5.1.43-community 这是我尝试插入的插入查询,是从NHibernate Profiler中获取

  • 使用flyway-core:4.1.2进行数据库迁移。 添加了一个新的DDL文件供flyway执行。Flyway会正确执行DDL并对表和列进行相应的更改。(我们在新的DDL中添加了一个表并更改了以前的一些列)。 但是,flyway无法将此尝试注册到schema_version表:我得到以下错误: 架构[dbo]的当前版本:2.1 无法在元数据表[dbo]中插入版本“3.0”的行。[schema_v

  • 问题内容: 我正在尝试使用多个插入(在一条语句中),并且我具有此表结构 我的查询: 由于[StudentID]列不接受NULL,因此该语句(我预期是)应该失败。问题是MySQL在第2行中插入了空字符串(’‘)…,并允许其余的继续。 问题答案: 问题: 或放 下到(然后重新启动)。