0

我正在尝试插入一些从 csv 导出到数据库的盲值。在此过程中,它会插入我提供的任何内容,甚至没有向我显示任何警告。

示例:我有一个表结构如下

  #   column-name     type
  --   ---            ----
  1   id             int(11)
  2   name           varchar(32)
  3   bool           tinyint(1)

插入查询:

INSERT INTO `table_name` (`id`, `name`, `bool`) VALUES ('a', '11111', 'abced');

当我尝试运行上述查询时,它会插入一行但会弹出一个警告。我找到了一个我理解它不是正确方法的解决方案。

我的尝试

INSERT INTO `table_name` (`id`, `name`, `bool`) VALUES ('a', '11111', 'abced');

php

$warningCount = count fetched after executing the query "SELECT @@warning_count"
if($WarningCount > 0){ DELETE THE ROW INSERTED and ECHO error Message}
4

1 回答 1

1

尝试将 SQL 模式设置为 STRICT_ALL_TABLES。

mysql> set @@session.sql_mode = STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t14 (id integer, name varchar(32), bool tinyint(1));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t14 set id=1, name="test", bool="bla";
ERROR 1366 (HY000): Incorrect integer value: 'bla' for column 'bool' at row 1

MySQL文档指出:

为所有存储引擎启用严格模式。无效的数据值被拒绝。附加细节如下。

严格模式控制 MySQL 如何处理数据更改语句(如 INSERT 或 UPDATE)中的无效或缺失值。一个值可能由于多种原因而无效。例如,它可能具有错误的列数据类型,或者可能超出范围。

然后插入事务。失败的插入查询将不计算在内。请记住,在“全有或全无”规则的意义上,MySQL 事务并不是完全原子的。您可以提交一个事务,其中一半语句已完成,而另一半则失败。

于 2013-11-05T14:16:46.487 回答