【问题标题】:How do you Alter a column in Oracle SQL to only allow it to take in two values, either a Y or a N?如何更改 Oracle SQL 中的列以只允许它接受两个值,一个 Y 或一个 N?
【发布时间】:2021-10-20 10:54:44
【问题描述】:

我看到的大多数结果都是针对 MySQL 的。我知道要使用Alter Table,以及MODIFY,但之后我就卡住了

我的表是这样的:

CREATE TABLE store_reps
(
rep_id NUMBER(5) PRIMARY KEY,
LastN VARCHAR2(15),
FirstN VARCHAR2(10),
comm CHAR(1) DEFAULT 'Y'
);

对于 comm 列,我想将其设置为只能允许“Y”或“N”的位置。我希望这足以帮助解决问题。

【问题讨论】:

    标签: sql oracle11g oracle-sqldeveloper


    【解决方案1】:

    您正在寻找check 约束:

    CREATE TABLE store_reps (
        rep_id NUMBER(5) PRIMARY KEY,
        LastN VARCHAR2(15),
        FirstN VARCHAR2(10),
        comm CHAR(1) DEFAULT 'Y',
        CONSTRAINT chk_store_reps_comm CHECK (comm IN ('Y', 'N'))
    );
    

    或创建表后:

    ALTER TABLE store_reps
        ADD CONSTRAINT chk_store_reps_comm CHECK (comm IN ('Y', 'N'));
    

    【讨论】:

    • 其实我不想改表,想用ALTER TABLE修改值
    • @Laser 。 . .您可以在ALTER TABLE 语句中使用相同的语法。如果表中已经有数据,请小心。
    • 哦?还没有值,所以这对我来说不是问题。介意我问如果已经有值我该怎么办?我必须删除它们吗?
    • @Laser 。 . .如果有任何行违反约束,您将无法添加约束。
    【解决方案2】:

    更改表并添加CHECK 约束:

    ALTER TABLE store_reps
      ADD CONSTRAINT store_reps__comm__chk CHECK (comm IN ('Y', 'N'));
    

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2023-01-17
      • 2021-10-18
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多