Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中为电话或邮政编码创建约束?_Mysql_Constraints - Fatal编程技术网

在MYSQL中为电话或邮政编码创建约束?

在MYSQL中为电话或邮政编码创建约束?,mysql,constraints,Mysql,Constraints,创建下表(MySQL 8.0): 但当我输入以下insert语句时: insert into Customer_DIM values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '2023459767', 'test@aol.com') 它无法通过电话和zipCode的检查。从我所能读到的来看,它应该是有效的。我认为需要一个regexp,而不是repeat(重复字符) 使用repe

创建下表(MySQL 8.0):

但当我输入以下insert语句时:

insert into Customer_DIM
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '2023459767', 'test@aol.com')

它无法通过电话和zipCode的检查。从我所能读到的来看,它应该是有效的。

我认为需要一个
regexp
,而不是
repeat
(重复字符)

使用
repeat
会出现如下情况:

mysql> select repeat('[0-9]', 5);

+---------------------------+
| repeat('[0-9]', 5)        |
+---------------------------+
| [0-9][0-9][0-9][0-9][0-9] |
+---------------------------+
因此,请改用
regexp

create table Customer_Dim(
customer_ID     int not null,
FirstName       varchar(30) not null,
LastName        varchar(30) not null,
Gender          char(1) not null CHECK (gender in ('m','f')),
Street1         varchar(100) not null,
Street2         varchar(100) null,
City            varchar(30) not null,
StateAbbrev     char(2) not null,
ZipCode         char(5) not null CHECK (ZipCode regexp '[0-9]{5}'),
PrimaryPhone    varchar(10) not null CHECK (PrimaryPhone regexp'[0-9]{10}'),
EmailAddress    varchar(50) default null,
constraint custkey Primary Key(customer_ID)
);
相同(良好)示例插入:

insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '2023459767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '202359767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '8002', '2023459767', 'test@aol.com')
错误电话示例插入:

insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '2023459767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '202359767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '8002', '2023459767', 'test@aol.com')
给出了错误:

违反了检查约束“Customer\u Dim\u chk\u 3”

错误的zip示例插入:

insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '2023459767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '80002', '202359767', 'test@aol.com')
insert into Customer_Dim
values (10001, 'Josh', 'Dexter', 'M', '123 E Elm st.', null, 'Denver', 'CO', '8002', '2023459767', 'test@aol.com')
给出了错误:

违反了检查约束“Customer\u Dim\u chk\u 2”

数据库与所有上述信息。 (包括上次重复的
示例)

知道MySQL检查约束在版本8.0.16之前已被解析但被忽略:


您使用的是什么版本的MySQL?下面的版本8检查约束在
CREATE TABLE
语句中被接受,没有任何错误或警告,但以后不会强制执行。我在我的引擎MySQL v5.7.31中模拟您的代码,工作正常!。也许是你的版本。比如说@stickybit。他已经解释了这种情况。我现在在8.0.21 64位社区,实际上我发现从MySQL 8.0.16开始,
CHECK
约束是强制的。在该版本之前,约束已存储但未检查。是的,这是真的。