将varchar()限制为范围a-z

时间:2012-12-08 12:24:04

标签: mysql database constraints

我正在努力实现和设计我的第一个数据库,并且有很多名称和地址等的列。

在这些列上放置CHECK约束似乎合乎逻辑,以便DB只接受来自字母数字范围的值(不允许任何特殊字符)。

我正在使用MySQL,据我所知,它不支持用户定义的类型,是否有一种简单的方法可以做到这一点?

防止错误数据进入数据库似乎值得,但是这个复杂的检查是否应该卸载到应用程序中呢?

2 个答案:

答案 0 :(得分:1)

如果您正在使用mysql(问题标记为,则无法使用CHECK约束执行此操作,因此我认为是这种情况) - mysql不支持检查约束。它们在语法中是允许的(与其他数据库的DDL兼容),否则将被忽略。

您可以在插入和更新时触发的表中添加触发器,以检查数据是否符合要求,但如果发现问题,则无法从mysql存储过程中引发异常。

我使用了一种解决不存在的表的解决方法,但其名称传达了您想要的含义,例如

update invalid_characters set col1 = 1;

并希望阅读“table invalid_characters不存在”消息的人得到这个想法。

答案 1 :(得分:0)

several settings允许您更改MySQL处理某些情况的方式(但这些还不够)。

我会坚持在应用程序端进行数据验证,但如果您需要在数据库端进行验证,则有两种选择: