>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20619 个阅读者 刷新本主题
 * 贴子主题:  SQL FOREIGN KEY 约束 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-08-19 13:55:30     消息  查看  搜索  好友  邮件  复制  引用

  

SQL  FOREIGN KEY 约束

SQL FOREIGN KEY 约束

     一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。

     让我们通过一个范例来解释外键。请看下面两个表:

                 "Persons" 表:

    
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger


     "Orders" 表:

    
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1


     请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。

         "Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY。

         "Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY。

         FOREIGN KEY 约束用于预防破坏表之间连接的行为。

         FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。            

CREATE TABLE 时的 SQL FOREIGN KEY 约束

     下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:

                 MySQL:

    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)

    )

             SQL Server / Oracle / MS Access:

     CREATE TABLE Orders
    (
    O_Id int NOT NULL PRIMARY KEY,

    OrderNo int NOT NULL,

    P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

    )

             如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

         MySQL / SQL Server / Oracle / MS Access:

     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)

    )            

ALTER TABLE 时的 SQL FOREIGN KEY 约束

     当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

         MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Orders

    ADD FOREIGN KEY (P_Id)

    REFERENCES Persons(P_Id)

             如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

         MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Orders

    ADD CONSTRAINT fk_PerOrders

    FOREIGN KEY (P_Id)

    REFERENCES Persons(P_Id)            

撤销 FOREIGN KEY 约束

     如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:

         MySQL:

    ALTER TABLE Orders

    DROP FOREIGN KEY fk_PerOrders

         SQL Server / Oracle / MS Access:

    ALTER TABLE Orders

    DROP CONSTRAINT fk_PerOrders

    



程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-11 21:50:13 重新编辑]
  Java面向对象编程-->按面向对象开发的基础范例
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->Socket用法详解
  精通Spring-->绑定表单
  Vue3开发-->Vue简介
  MySQL千万级别大表,盘点优化技巧
  数据库索引创建与优化
  mysql分区(partition)
  没有宫廷内斗,数据库界的延禧攻略
  回表与覆盖索引
  SQL MS Access、MySQL 和 SQL Server 数据类型
  SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
  SQL AUTO INCREMENT 字段
  SQL 撤销索引、表以及数据库
  SQL INSERT INTO SELECT 语句
  XML的DTD定义
  MySQL的数据处理函数
  电脑启动不起来,提示Reboot and select proper boot device ...
  MySQL的开发必会的SQL语句
  为什么要分库分表?用过哪些分库分表中间件?
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。