我想确保我的列(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'`;
注意:此代码未经测试,仅用于显示概念。