MySQL - 约束检查列字段长度是否低于某个数字不起作用

时间:2017-09-12 11:05:34

标签: mysql sql constraints

我正在尝试为表创建约束,关于其列。假设有一个名为" 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;

0 个答案:

没有答案