我意外地试图将'asdf‘插入到整数列中。它起作用了(将0放在列中),并给出了以下警告:
不正确的整数值:第1行“Author”列的“asdf”
我怎样才能使类似的插入失败而不仅仅是发出警告?
发布于 2009-12-19 09:28:57
在MySQL 5.0中,您可以在my.cnf
中、启动期间(--sql-mode='<option>'
)或运行会话期间设置一个选项sql_mode
。当你把它设置为
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>
发布于 2009-12-19 09:04:11
只需使用raiseerror()抛出一个错误。它被用作异常处理的“抛出”关键字,该关键字在某些模式上引发错误。
SELECT
case WHEN colname<>IsString(@columnName)
THEN raiseerror()
ELSE expression2
END AS size
FROM `mytab`
现在创建一个用户定义的函数IsString() (在我的例子中),它将返回用于检查字符串的布尔值。如果输入值为string,则会引发错误。
https://stackoverflow.com/questions/1933459
复制相似问题