【问题标题】:SQL Integrity Constraint VarChar ComparisonSQL 完整性约束 VarChar 比较
【发布时间】:2012-11-19 15:10:28
【问题描述】:

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

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

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

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

非常感谢任何帮助。

【问题讨论】:

    标签: sql oracle plsql dml


    【解决方案1】:

    是的,您需要将其定义为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)
    )
    

    【讨论】:

      【解决方案2】:

      为了使 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)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2020-01-14
        相关资源
        最近更新 更多