我正在尝试为表创建约束,关于其列。假设有一个名为" user"的用户名 - 密码表。我想在userName列中添加一个最小长度值,使其始终高于2.
CREATE TABLE IF NOT EXISTS users(
userName VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL)
ENGINE=INNODB;
我试过这个
ALTER TABLE `users` ADD CONSTRAINT `min_username_field` CHECK ( LENGTH(`userName`) > 2 );
和这个
ALTER TABLE `users` ADD CONSTRAINT `min_username_field` CHECK ( CHAR_LENGTH(`userName`) > 2 );
但是当我用0或1个字符插入用户名时,它们不会返回某种错误。
编辑:找到带触发器的解决方案
CREATE TRIGGER username_trigger BEFORE INSERT ON `users`
FOR EACH ROW
BEGIN
DECLARE usernameLength INT;
SET usernameLength = (SELECT LENGTH(NEW.userName));
IF (usernameLength) < 3 THEN
SIGNAL SQLSTATE '45000' set message_text='Error: Username must consist of 3 characters at least!!!';
END IF;
END;