我正在努力实现和设计我的第一个数据库,并且有很多名称和地址等的列。
在这些列上放置CHECK
约束似乎合乎逻辑,以便DB只接受来自字母数字范围的值(不允许任何特殊字符)。
我正在使用MySQL,据我所知,它不支持用户定义的类型,是否有一种简单的方法可以做到这一点?
防止错误数据进入数据库似乎值得,但是这个复杂的检查是否应该卸载到应用程序中呢?
答案 0 :(得分:1)
如果您正在使用mysql(问题标记为mysql,则无法使用CHECK约束执行此操作,因此我认为是这种情况) - mysql不支持检查约束。它们在语法中是允许的(与其他数据库的DDL兼容),否则将被忽略。
您可以在插入和更新时触发的表中添加触发器,以检查数据是否符合要求,但如果发现问题,则无法从mysql存储过程中引发异常。
我使用了一种解决不存在的表的解决方法,但其名称传达了您想要的含义,例如
update invalid_characters set col1 = 1;
并希望阅读“table invalid_characters不存在”消息的人得到这个想法。
答案 1 :(得分:0)
有several settings允许您更改MySQL处理某些情况的方式(但这些还不够)。
我会坚持在应用程序端进行数据验证,但如果您需要在数据库端进行验证,则有两种选择:
CREATE PROCEDURE
来验证和插入数据,不执行任何操作或引发错误的SIGNAL
CREATE TRIGGER ... BEFORE INSERT
会验证数据并停止插入,如stackoverflow answer