保持数据库中的特定长度

时间:2015-04-13 13:39:19

标签: mysql sql database

我想确保我的列(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个字符以外的值时,它允许它。我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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'`;

注意:此代码未经过测试,只是为了展示这个概念。