我正在尝试创建一个表,但它没有被创建。问题在于约束。主要是 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的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 laravel 在我的 Schema 中进行外键约束,但它没有反映在 phpmyadmin