ALTER TABLE info
ADD CONSTRAINT uppercase
CHECK (password = UPPER(substr(password, 1 ,1 )));
我很好奇为什么我的约束不起作用?第一次尝试写约束,所以请耐心等待。
答案 0 :(得分:2)
如果您使用的是MySQL,则不起作用,因为不会强制执行约束。在某些其他数据库中,=
的默认排序规则大小写相同。而且,无论默认排序规则如何,都可能会对您的数据库进行更改。
您可以轻松做到这一点:
ALTER TABLE info
ADD CONSTRAINT uppercase CHECK (ASCII(LEFT(password, 1)) BETWEEN ASCII('A') and ASCII('Z'));
也就是说,在大多数情况下,密码应该不以未加密的方式存储在数据库中。这非常危险。您可以在数据库层加密密码。我认为在客户端层进行加密更好,所以自由文本密码甚至不能在网络上进行加密。