我想确保我的列(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个字符以外的值时,它允许它。我做错了什么?
答案 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'`;
注意:此代码未经过测试,只是为了展示这个概念。