如何在MariaDB 10.4中为整数列指定取值范围?
解决MariaDB添加带范围约束列的语法问题
你的SQL语句语法错误,因为不能在定义数据类型时直接用BETWEEN指定取值范围,需要通过CHECK约束实现整数范围限制。另外注意:以0开头的数字(比如01067)会被MariaDB解析为八进制数,八进制01067等于十进制567,如果需求是限制十进制范围1067-99998,要去掉前导零。
正确的SQL写法
方式一:添加列时直接绑定CHECK约束
ALTER TABLE p_infos ADD plz INT CHECK (plz BETWEEN 1067 AND 99998);
(注:SMALLINT的最大值是32767,99998超过了这个范围,所以要改用INT类型,否则插入99998会报错)
方式二:先添加列,再单独添加CHECK约束
-- 先添加列 ALTER TABLE p_infos ADD plz INT; -- 添加范围约束 ALTER TABLE p_infos ADD CONSTRAINT chk_plz_range CHECK (plz BETWEEN 1067 AND 99998);
额外说明
如果PLZ是需要保留前导零的邮编(比如德国5位邮编),不应该用整数类型,而是用VARCHAR(5)并约束格式:
ALTER TABLE p_infos ADD plz VARCHAR(5) CHECK (plz REGEXP '^[0-9]{5}$' AND plz BETWEEN '01067' AND '99998');
内容的提问来源于stack exchange,提问作者Fruit_alpha
相关产品推荐
相关产品推荐

