表外键

外键相关参数
从mysql4.1.1开始,要使得对有外键关系的表重新载入转储文件变得更容易, mysqldump自动在转储输出中包括一个语句设置FOREIGN_KEY_CHECKS为0。
这避免在转储被重新装载之时,与不得不被以特别顺序重新装载的表相关的问题。
对于早期版本,可以用下面方法达到同样目的
mysql> SET FOREIGN_KEY_CHECKS = 0;
mysql> SOURCE dump_file_name
mysql> SET FOREIGN_KEY_CHECKS = 1;
设置FOREIGN_KEY_CHECKS为0,对于在 LOAD  DATA和ALTER TABLE操作中忽略外键限制也是非常有用的。
除非设置了FOREIGN_KEY_CHECKS = 0, Innodb禁止drop父表(被子表外键引用的表)
当设置FOREIGN_KEY_CHECKS = 0后drop一个父表.下次重新创建这个父表时,必须跟drop之前一样(正确的列/数据类型/被参照的列上必须有索引), 否则系统会报1005 refer to errno 150

InnoDB不允许你删除一个被FOREIGN KEY表约束引用的表,除非你做设置SET FOREIGN_KEY_CHECKS=0。
当你移除一个表的时候,在它的创建语句里定义的约束也被移除。 如果你重新创建一个被移除的表,它必须有一个遵从于引用它的外键约束的定义。它必须有正确的列名和类型,并且它必须对被引用的键有索引。如果这些不被满足,MySQL返回错误号1005    并在错误信息字符串中指向errno 150。查看show innodb status中的错误信息  :LATEST FOREIGN KEY ERROR。
load data 导入导入表或者source导入数据时 用 FOREIGN_KEY_CHECKS 修改其值为0 来忽略外键限制 导入完全数据表后 再将其设为1

InnoDB需要外键和被引用键的索引以便外键检查可以快速进行且不需要一个表扫描。对外键的索引被自动创建。
这是相对于一些老版本,在老版本中索引必须明确创建,否则外键约束的创建会失败。
InnoDB允许你用ALTER TABLE往一个表中添加一个新的外键约束:      ALTER TABLE yourtablename    ADD [CONSTRAINT symbol] FOREIGN KEY [ id] ( index_col_name, ...)    REFERENCES tbl_name ( index_col_name, ...)    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]你也可以用ALTER TABLE往一个表添加一个自引用外键约束。
     InnoDB也支持使用ALTER TABLE来移除外键:
     ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;当年创建一个外键之时,如果FOREIGN KEY子句包括一个CONSTRAINT名字,你可以引用那个名字来移除外键。
另外,当外键被创建之时,fk_symbol值被InnoDB内部保证。当你想要移除一个外键之时,要找出标记,请使用SHOW     CREATE TABLE语句。

对一个表显示外键约束: SHOW TABLE STATUS FROM db_name LIKE ' tbl_name';外键约束被列在输出的Comment列。(测试中没有显示外键相关信息)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27137314/viewspace-1191988/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27137314/viewspace-1191988/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值