Sql 帮助约束
我正在创建一个表,其中一个约束条件是第一个字符必须是“G”,然后后跟5个数字:Sql 帮助约束,sql,sql-server,oracle,database-design,constraints,Sql,Sql Server,Oracle,Database Design,Constraints,我正在创建一个表,其中一个约束条件是第一个字符必须是“G”,然后后跟5个数字: CREATE TABLE PHONE ( PHONEID CHAR (6) NOT NULL, PHONENO NUMERIC NOT NULL, CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID), CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO) ); 如何使用sql实现这一点?我需要在MS SQL中对冒充的
CREATE TABLE PHONE (
PHONEID CHAR (6) NOT NULL,
PHONENO NUMERIC NOT NULL,
CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID),
CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO)
);
如何使用sql实现这一点?我需要在MS SQL中对冒充的执行此操作,如下所示:
create table Phone
(
PhoneId char(6) not null
constraint Phone_PhoneId_PK primary key
constraint Phone_PhoneId_CK check (PhoneId like 'G[0-9][0-9][0-9][0-9][0-9]'),
PhoneNumber numeric not null
constraint Phone_PhoneNumber_UK unique
)
insert Phone
values('G00001', 123) -- pass
insert Phone
values('G0001', 123) -- fail
insert Phone
values('D0001', 123) -- fail
在甲骨文中,我认为应该是:
CREATE TABLE PHONE (
PHONEID CHAR (6) NOT NULL,
PHONENO NUMERIC NOT NULL,
CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID),
CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO),
CONSTRAINT PHONE_PHONEID_CK CHECK(REGEX_LIKE(PHONEID, '^G\d{5}$'))
);
*免责声明:我与Oracle合作已经有一段时间了,我现在无法访问Oracle数据库来验证上述内容,这是基于的文档和类似REGEXP_的函数。可能需要一些调整。请不要使用所有的大写字母-看起来你在大喊大叫!对不起,我用大写字母写sql,忘了关闭它,我的错。我使用的是oracle sql developer如果第一个字符始终是“G”,则有一个参数表明它是一个单独的列(甚至不存储在DB中,而是由UI派生/剥离)。oracle 10g+-在此之前,oracle不支持regexPre 10g,您可以使用RTRIM(PHONEID,'0123456789')='G'来完成。可能需要检查长度/空间填充。就我个人而言,我从不使用CHAR。