我在为表创建编写完整性约束检查时遇到了困难。以下是我的建表语句:
CREATE TABLE User (
UName VARCHAR(15) PRIMARY KEY,
FName VARCHAR(15),
LName VARCHAR(15)
);
我正在寻找的完整性约束是 UName(用户名)不能包含名字和/或姓氏。
我可以在没有 PL/SQL 的情况下编写这个吗?
任何帮助是极大的赞赏。
是的,您需要将其定义为TABLE CHECK CONSTRAINT
(而不是针对 UNAME 列,因为它引用同一表中的其他列),如下所示:
CREATE TABLE User
(
UNAME VARCHAR(100),
FNAME VARCHAR(100),
LNAME VARCHAR(100),
CONSTRAINT CHECK_USERS
CHECK(INSTR(UNAME, FNAME) = 0 AND INSTR(UNAME, LNAME) = 0)
)
为了使 sql 更可靠,我建议使用大写。用户肯定会努力使登录看起来像姓/名,但我偶然发现了他们在名字/姓氏中使用第一个大写字母但用户名使用小写的情况,反之亦然。
所以考虑使用
CREATE TABLE User
(
UNAME VARCHAR(100),
FNAME VARCHAR(100),
LNAME VARCHAR(100),
CONSTRAINT CHECK_USERS
CHECK(INSTR(upper(UNAME), upper(FNAME)) = 0 AND INSTR(upper(UNAME), upper(LNAME)) = 0)
)