【问题标题】:What's the difference between these SQL syntaxes?这些 SQL 语法有什么区别?
【发布时间】:2012-11-21 16:34:56
【问题描述】:

我正在寻找有关外键的信息....再次! ...并且碰巧在 webschools.com 上注意到他们对同一件事有不同的例子。对于他们有的外键示例

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

现在…………

有什么区别?...

我如何知道我应该将哪一个用于我的数据库?我觉得这将有助于解决我对 SQL 的很多困惑......

【问题讨论】:

  • 首先你需要知道你在做什么?我的意思是你需要什么属性。可能有很多例子,但所有这些都只是为了测试,它们有不同的目的

标签: sql foreign-keys create-table


【解决方案1】:

效果上没有区别:它们实现的效果完全一样。

我更喜欢内联版本,因为它使 fk 定义尽可能接近列定义。

还有第三种方式——单独的alter table 声明(我认为这是“官方”方式):

alter table orders
add contraint fk_PerOrders 
foreign key p_id references persons(p_id);

您可能会发现某些数据库不支持一个版本或另一个版本。

【讨论】:

  • 谢谢!但是,我认为他们做同样的事情,但是这些不同的方法叫什么?它们为什么存在?我只是想知道,因为我还不太了解 SQL,而在查看不同的教程时,我只看到了“SQL 语法”……直到现在我才意识到有 3 种不同的类型……哈哈。我需要弄清楚哪一个适用于我使用的东西。
【解决方案2】:

都一样(三种方式):

  • 首先,您首先将P_Id 定义为int,然后定义外键约束。
  • 第二个,P_Id int FOREIGN KEY REFERENCES Persons(P_Id)P_Id 是排便和外键约束排便在同一行。

  • 第三个,a foreign key constraint name 也是fk_PerOrders。可以是useful later when you wants to drop constraint。例如

ALTER TABLE 订单
删除外键 fk_PerOrders

为约束命名总是好的做法。

【讨论】:

  • may be you are talking about thissite他们写的很清楚。
【解决方案3】:

他们都在做同样的事情。使用你觉得容易理解的那个。

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多