我正在尝试创建一个表,但它没有被创建。问题在于约束。主要是 NOT NULL 和 FOREIGN KEY

Posted

技术标签:

【中文标题】我正在尝试创建一个表,但它没有被创建。问题在于约束。主要是 NOT NULL 和 FOREIGN KEY【英文标题】:I am trying to create a table but its not getting created. The issue is with constraints. Mostly NOT NULL and FOREIGN KEY 【发布时间】:2014-11-17 18:18:06 【问题描述】:
CREATE TABLE Customer(
Cust_Id Number(4),
Cust_First_Name  VarChar2(20),
Cust_Mid_Name VarChar2(20),
Cust_Last_Name VarChar2(20),            
Account_Type Varchar2(15),          
Cust_Email VarChar2(30),                
Cust_Mobile Number(10),
Bank_Id NUMBER(4),
Account_No Number(4),
CONSTRAINT Cust_Id_Pri_Key PRIMARY KEY (Cust_Id),
CONSTRAINT Cust_Last_Name_Not_Null NOT NULL (Cust_Last_Name),
CONSTRAINT Cust_First_Name_Not_Null NOT NULL (Cust_First_Name),
CONSTRAINT Cust_Email_Unq UNIQUE(Cust_Email),
CONSTRAINT Cust_Mobile_Unq UNIQUE(Cust_Mobile),
CONSTRAINT Bank_Id_For_Key FOREIGN KEY REFERENCES bank(bankId)
);

【问题讨论】:

错误是什么? 在我使用过的任何数据库中,主键都不能有空值。 【参考方案1】:

工作 SQL 小提琴:http://sqlfiddle.com/#!4/05311

你的 SQL 应该是这样的。

CREATE TABLE Customer(
Cust_Id Number(4) NOT NULL,
Cust_First_Name  VarChar2(20) NOT NULL,
Cust_Mid_Name VarChar2(20),
Cust_Last_Name VarChar2(20) NOT NULL,            
Account_Type Varchar2(15),          
Cust_Email VarChar2(30),                
Cust_Mobile Number(10),
Bank_Id NUMBER(4),
Account_No Number(4),
CONSTRAINT Cust_Id_Pri_Key PRIMARY KEY (Cust_Id),
CONSTRAINT Cust_Email_Unq UNIQUE(Cust_Email),
CONSTRAINT Cust_Mobile_Unq UNIQUE(Cust_Mobile),
CONSTRAINT Bank_Id_For_Key FOREIGN KEY (Bank_Id) REFERENCES bank(bankId)  
);

几乎所有的错误都来自语法。

NOT NULL 在列名本身中指定,而不是作为单独的约束。 FOREIGN KEY CONSTRAINT requires you to specify the source column name, and the 外键column in the table that it is defined as a主键`

【讨论】:

【参考方案2】:

您有两个问题:您不能将NOT NULL 指定为外键约束,并且您在外键约束中缺少列名。以下应该有效:

CREATE TABLE customer
(
   cust_id NUMBER (4),
   cust_first_name VARCHAR2 (20) CONSTRAINT cust_first_name_not_null NOT NULL,
   cust_mid_name VARCHAR2 (20),
   cust_last_name VARCHAR2 (20) CONSTRAINT cust_last_name_not_null NOT NULL,
   account_type VARCHAR2 (15),
   cust_email VARCHAR2 (30),
   cust_mobile NUMBER (10),
   bank_id NUMBER (4),
   account_no NUMBER (4),
   CONSTRAINT cust_id_pri_key PRIMARY KEY (cust_id),
   CONSTRAINT cust_email_unq UNIQUE (cust_email),
   CONSTRAINT cust_mobile_unq UNIQUE (cust_mobile),
   CONSTRAINT bank_id_for_key FOREIGN KEY (bank_id) REFERENCES bank (bankid)
);

但是,我不会为命名NOT NULL 约束而烦恼。命名它们并不能真正增加可管理性,因为它们可以通过在不知道名称的情况下更改表来更新。

【讨论】:

以上是关于我正在尝试创建一个表,但它没有被创建。问题在于约束。主要是 NOT NULL 和 FOREIGN KEY的主要内容,如果未能解决你的问题,请参考以下文章

Django:删除唯一约束并创建迁移

在代码中创建这些约束,需要建议

我正在尝试使用 laravel 在我的 Schema 中进行外键约束,但它没有反映在 phpmyadmin

我正在从视图中删除 with check 选项约束,但它没有被强制执行

创建表时声明默认约束

这个 SQL 表创建的约束有啥问题?