SQL Integrity约束VarChar比较

时间:2012-12-01 16:47:15

标签: sql oracle plsql dml

我在编写表创建的Integrity Constraint检查时遇到了困难。以下是我的表创建声明:

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

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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)
)

答案 1 :(得分: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)
)