我想确保我的列(accountNumber)中的所有值正好是7个字符长。我已经试过了:

CREATE TABLE `account` (
  `accountNumber` int(7) NOT NULL AUTO_INCREMENT,

  ...

  CHECK (accountNumber >6),
  CHECK (accountNumber <8),
  PRIMARY KEY (`accountNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


但是,当我在数据库中输入了7个字符以外的其他值时,它就允许它。我究竟做错了什么?

最佳答案

您可以使用触发器执行此操作:

DELIMITER $$

CREATE TRIGGER example_before_insert_account
     BEFORE INSERT ON account FOR EACH ROW
     BEGIN
          IF NEW.accountNumber < 1000000 OR NEW.accountNumber > 9999999
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'Cannot add or update row: only 7 digit integers allowed';
          END IF;
     END;
$$

CREATE TRIGGER example_before_update_account
     BEFORE UPDATE ON account FOR EACH ROW
     BEGIN
          IF NEW.accountNumber < 1000000 OR NEW.accountNumber > 9999999
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'Cannot add or update row: only 7 digit integers allowed';
          END IF;
     END;
$$


如果您的MySQL数据库不支持SIGNAL,则可以这样使用CALL

CALL `'Cannot add or update row: only 7 digit integers allowed'`;


注意:此代码未经测试,仅用于显示概念。

10-08 07:37