禁止将文本值插入整数列

时间:2009-12-19 17:00:28

标签: sql mysql

我不小心试图将'asdf'插入整数列。它工作(在列中输入0),并发出此警告:

  

不正确的整数值:'asdf'表示   第1行的“作者”栏目

如何导致类似的插入失败,而不仅仅是发出警告?

2 个答案:

答案 0 :(得分:4)

从MySQL 5.0开始,您可以在sql_mode或启动期间(my.cnf)或正在运行的会话期间设置选项--sql-mode='<option>'。当您将其设置为

sql_mode=STRICT_ALL_TABLES

mysql不会发出警告并插入错误的值,但它会拒绝你的语句并出错。

See also in the manual


示例:

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(),它将返回检查字符串的布尔值。如果输入值是字符串,则会引发错误。

Check this thread to raise error