我不小心试图将'asdf'插入整数列。它工作(在列中输入0),并发出此警告:
不正确的整数值:'asdf'表示 第1行的“作者”栏目
如何导致类似的插入失败,而不仅仅是发出警告?
答案 0 :(得分:4)
从MySQL 5.0开始,您可以在sql_mode
或启动期间(my.cnf
)或正在运行的会话期间设置选项--sql-mode='<option>'
。当您将其设置为
sql_mode=STRICT_ALL_TABLES
mysql不会发出警告并插入错误的值,但它会拒绝你的语句并出错。
示例:强>
mysql> create table asdf (id int);
Query OK, 0 rows affected (0.13 sec)
mysql> insert into asdf value ('Hello');
Query OK, 1 row affected, 1 warning (0.38 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'Hello' for column 'id' at row 1 |
+---------+------+-----------------------------------------------------------+
1 row in set (0.02 sec)
mysql> select * from asdf;
+------+
| id |
+------+
| 0 |
+------+
1 row in set (0.03 sec)
mysql> set SESSION sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into asdf value ('Hello');
ERROR 1366 (HY000): Incorrect integer value: 'Hello' for column 'id' at row 1
mysql>
答案 1 :(得分:1)
使用raiseerror()简单地抛出错误。 它被用作异常处理的“throw”关键字,它会在某个模式上引发错误
SELECT
case WHEN colname<>IsString(@columnName)
THEN raiseerror()
ELSE expression2
END AS size
FROM `mytab`
现在在我的情况下创建一个用户定义函数IsString(),它将返回检查字符串的布尔值。如果输入值是字符串,则会引发错误。