首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Mysql创建外键[论坛摘录]
【标  题】:Mysql创建外键[论坛摘录]
【关键字】:Mysql
【来  源】:http://www.cublog.cn/u/13329/showart.php?id=137242

Mysql创建外键[论坛摘录]

[From] http://bbs.chinaunix.net/viewthread.php?tid=373766

Linux_cainiao:   我今天刚在学mysql, 但是就是搞不懂如何创建约束.
比如说我有两个表: Members和Email
CREATE TABLE Members (Member_ID INT NOT NULL
PRIMARY KEY AUTO_INCREMENT, First_Name VARCHAR(30)
NOT NULL, Last_Name VARCHAR(30) NOT NULL,
Bday DATE NOT NULL, Gender ENUM('M', 'F') DEFAULT 'F');

CREATE TABLE Email (Email VARCHAR(50), Member_ID INT NOT NULL, PRIMARY KEY (Email, Member_ID),
CONSTRAINT FOREIGN KEY (Member_ID) REFERENCES Members(Member_ID) ON DELETE RESTRICT ON UPDATE CASCADE);

创建后, 如果Members有两个记录, Member_ID分别是1和2,
如果我尝试在Email里,输入一条Member_ID是3的记录,操作成功. 如果我删除Members表里的记录, 尽管Email表里有记录相关联, 还是能删除成功. 所以约束好象一点都起不到作用. 肯定是哪里错了
请问该如果设置正确的约束呢?

-------------------------------------------------------
dragon76

A simple example that relates parent and child tables through a single-column foreign key:

CREATE TABLE parent(id INT NOT NULL,
                    PRIMARY KEY (id)
) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT,
                   INDEX par_ind (parent_id),
                   FOREIGN KEY (parent_id) REFERENCES parent(id)
                     ON DELETE CASCADE
) TYPE=INNODB;

A more complex example in which a product_order table has foreign keys for two other tables. One foreign key references a two-column index in the product table. The other references a single-column index in the customer table:

CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                      price DECIMAL,
                      PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                      PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      INDEX (product_category, product_id),
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ON DELETE RESTRICT,
                      INDEX (customer_id),
                      FOREIGN KEY (customer_id)
                        REFERENCES customer(id)) TYPE=INNODB;

Starting from MySQL 3.23.50, InnoDB allows you to add a new foreign key constraint to a table by using ALTER TABLE:

ALTER TABLE yourtablename
    ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

Remember to create the required indexes first. You can also add a self-referential foreign key constraint to a table using ALTER TABLE.

Starting from MySQL 4.0.13, InnoDB supports the use of ALTER TABLE to drop foreign keys:

ALTER TABLE yourtablename
    DROP FOREIGN KEY fk_symbol


------------------------------------
Linux_cainiao非常感谢!    这下通了. 我比较了一下,问题出在TYPE=INNODB;和声明索引上.
是不是用外键的表创建的时候都要声明TYPE=INNODB;? 这是什么意思呢?
另, 是不是声明外键的时候一定要把外键用的列作为索引?



-------------------------------------
dragon76在MySQL中只有InnoDB类型的表才支持外键与存储过程所有要建立外键的字段必须建立索引
备份和恢复MYSQL数据库:【上一篇】
你知道MySQL10条鲜为人知的技巧吗:【下一篇】
【相关文章】
  • 备份和恢复MYSQL数据库
  • MySQL数据的导出和导入
  • Mysql命令
  • Mysql数据的导出和导入 (From: CU - Mysql FAQ)
  • IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin配置完整推荐
  • IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置- -
  • as4.0+qmail+mysql backup
  • jboss+mysql配置手册
  • FreeBSD6.1+apache2.2+php5+mysql5.0+phpwind(转贴)
  • RedHat AS4-U2下Mysql 5.0的集群配置
  • 【随机文章】
  • document.execCommand() 解析
  • 双管齐下清除灰鸽子木马
  • 网络地址解析协议被攻击的解决方法
  • SSO From Microsoft
  • 基于Active Directory的用户验证
  • [Mysql]用命令確定欄位順序7/12
  • MFC DLL向导
  • 开源产品学习方法论
  • 华为有所为—我印象中的华为
  • PHP脚本的10个技巧(4)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.