1

我在为表创建编写完整性约束检查时遇到了困难。以下是我的建表语句:

CREATE TABLE User (
UName VARCHAR(15) PRIMARY KEY,
FName VARCHAR(15),
LName VARCHAR(15)
);

我正在寻找的完整性约束是 UName(用户名)不能包含名字和/或姓氏。

我可以在没有 PL/SQL 的情况下编写这个吗?

任何帮助是极大的赞赏。

4

2 回答 2

4

是的,您需要将其定义为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)
)
于 2012-12-01T17:07:33.420 回答
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)
)
于 2012-12-02T11:25:32.850 回答