【问题标题】:Displaying the constraints in a table在表中显示约束
【发布时间】:2010-12-22 16:59:12
【问题描述】:

您好,我正在尝试在我的一张表中显示约束,但由于某种原因,我收到消息未选择行。下面是我创建的表格。

Create table Teams (
   TeamID varCHAR2(4) constraint Teams_TeamID_PK Primary Key,
   TeamName VARCHAR2(40) 
);

这是我用来显示我的约束的代码。

SELECT constraint_name, 
       constraint_type,
       search_condition
  FROM USER_CONSTRAINTS
 WHERE table_name = 'Teams';

我是一个菜鸟,所以我想确保我明白哪里出了问题。我试图删除表,认为我的约束没有受到影响——我没有,也没有在创建表时收到任何错误,并且我在另一个表中引用 TeamID。因此,当我尝试删除表格时,我会收到一条错误消息,这正是我所希望的。

【问题讨论】:

  • 您的问题让我印象深刻,因为您以不同的用户身份执行此操作和/或在创建表时未提交事务。
  • CREATE TABLE 是在 Oracle 中执行时自动提交的 DDL。
  • 不能删除被其他表引用的表,除非指定“CASCADE CONSTRAINTS”,即“DROP TABLE Teams CASCADE CONSTRAINTS”

标签: sql oracle constraints sqlplus


【解决方案1】:

试试这个:

SELECT constraint_name, 
       constraint_type,
       search_condition
  FROM USER_CONSTRAINTS
 WHERE table_name = 'TEAMS';

除非在创建时使用双引号,否则 Oracle 中的所有对象名称都是大写的。

【讨论】:

    【解决方案2】:

    如果您更喜欢 CamelCase 名称,您的创建表脚本应该是:

    Create table "Teams" ( 
      "TeamID" varCHAR2(4) constraint "Teams_TeamID_PK" Primary Key, 
      "TeamName" VARCHAR2(40)  
    ); 
    

    没有双引号,Oracle 将所有标识符转换为大写 :)

    【讨论】:

      【解决方案3】:
      select dbms_mview.get_ddl('TABLE',USER,'TEAMS') from dual;
      

      【讨论】:

        【解决方案4】:

        使用以下代码:

        show create table table_name;
        

        【讨论】:

        • 可以在 MySQL 中工作,但不能在 MS SQL Server 和 Oracle 中工作。
        【解决方案5】:

        我个人使用:

        SELECT * FROM all_constraints WHERE Table_Name = <TableName>;
        

        【讨论】:

          【解决方案6】:

          在单引号内的where 子句中输入大写的表名。

          例如WHERE table_name = 'TEAMS';

          【讨论】:

          猜你喜欢
          • 2011-04-29
          • 1970-01-01
          • 2020-02-08
          • 2021-09-24
          • 2020-09-23
          • 1970-01-01
          • 1970-01-01
          • 2022-06-15
          相关资源
          最近更新 更多