实时搜索: mysql 外键可以有几个

mysql 外键可以有几个

276条评论 1586人喜欢 5367次阅读 264人点赞
表A有连个属性,bookid和authorid,都为主外键
表book中,有bookid设外键于A(bookid),
表author中,有authorid设外键于A(authorid).
这样可以吗,我每次只能设一个,设另一个就出错,
Can't create table '.\booksmanagementsystem\#sql-99c_1.frm' (errno: 150)

怎么解决啊? , 新建查询表`tb_shop_category` 出现错误说什么外键约束,请问这是怎么回事 , DELETE l,m FROM t_order_tr...

mysql一个表两个属性可以被设外键吗?: 一张表中的主键只能有一个,外键可以有多个,如果一张表中多个列都需要被别的表的外键参考,需要使用候选码(非空并且唯一),具体到你的这个问题的需求可以考虑用如下方法解决:
把A表中的bookid和authorid都设置为非空并且唯一,即
create table A(bookid int not null unique, authorid int not null unique);
然后在book表和author表中就可以分别设置外键来参照A表中两个不同的字段了。

在mysql中,一个表的一个属性,能不能同时作为另外两个表的外键?: 不知道你的设计环节出了什么情况。
理论上是可以的啊。

例如:
学生表 (学号, 姓名 ......) 这个就好比你的那 “一个表”, 学号是你的那 “一个属性”。

那么
图书馆的 借书记录表 ( 图书号, 学号, 借书日期 ... ) 一个表的外键。
食堂饭卡的帐户表 ( 食堂饭卡ID, 学号, 饭卡金额 ...... ) 一个表的外键。

在navicat for mysql 下新建查询表出现 [错误1215 -不能添加外键约束?: 检查下你的parent_id字段的数据类型,长度是不是和tb_shop_category表的shop_category字段的定义相同
然后既然parent_id是外键字段,就不要设置default null

mysql 如何查看某个库中的一个表是哪些表的外键?:

#查看数据库所有表

SELECT tba.TABLE_NAME FROM information_schema.TABLES tba WHERE tba.TABLE_SCHEMA= '你要查的数据库名字'

#查看某个库中的一个表是哪些表的外键

SELECT TABLE_NAME FROM KEY_COLUMN_USAGE WHERE CONSTRAINT_NAME='FK_PRODUCT_ID' AND REFERENCED_TABLE_NAME ='表的名字'AND REFERENCED_TABLE_SCHEMA='表的的数据名字'

mysql有外键约束的表无法联级删除?: 看看外键的 级联 选项, 是CASCADE 的 才可以级联删除:

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION 外键的使用需要满足下列的条件:

InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:
1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。
3. NO ACTION: InnoDB拒绝删除或者更新父表。
4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。
5. SET DEFAULT: InnoDB目前不支持。

mysql提示不能添加外键找了半天没找到错误..: 1. 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57
2. 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。
3. 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。
4. 外键的名字不能重复。你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。
5. 你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。
6. 请确定你的Charset和Collate选项在表级和字段级上的一致。
7. 你可能设置为外键设置了一个默认值,如default=0。
8. ALTER声明中有语法错误

MySQL施用外键约束对性能有多大影响: 外键约束在更新或者删除数据的时候,要去扫描(或者查找,这里不扣字眼)一遍引用这个外键的表,这个就是所谓的影响吧
其实想看这个代价很容易
test,test2两个完全一样的表,数据也一样,test一个列为test2的一个外键,在两个表中,你删除同样一个ID的数据,效果不就出来了
置于设置外键的表怎么处理,是扫描还是查找,那就看如何见索引了!

mysql是否有必要使用外键约束:

如果使用外键后,mysql需要额外的开销来检测数据的完整性和一致性检测,容易造成死锁,mysql处理性能势必会下降。

如果对数据的要求不是那么严格, 建议不要使用外键约束,如果一定要保证完整性,可通过其他方法实现,如实体完整性通过逐渐或唯一索引来实现,域的完整性通过限制列的数据类型、格式或值的范围来实现,参照完整性可通过编写触发器来实现或者通过代码的逻辑判断来实现。

  • 128什么意思

    gtx950比750ti强多少: 通过跑分测试对比,GTX950的性能比GTX750TI强32%左右,实际玩游戏中,不同游戏优化不一样,差距基本上是30-35%左右,这个差距还是十分明显的,现在买二手显卡推荐优先考虑GTX950玩游戏效果更好(都停产...

    432条评论 5087人喜欢 2433次阅读 647人点赞
  • early怎么读

    以《希望》为题写一篇800字作文: 希望 人生在世,最重要的就是要拥有希望。鲁迅先生说“希望本无所谓有,无所谓无”。但我以为拥有希望也是一种美。 十年前,她不幸被确诊为淋巴癌中期。一个幸福美满的家庭一下子被这突发其来的坏消息击入深谷。当她的家人得知的那...

    334条评论 1483人喜欢 6357次阅读 595人点赞
  • 五征奥驰1800四米车箱多少钱

    DNF装备如果戴上。我又不是附魔师。请问还能附魔吗??怎么附魔。: 额,可以的,就是锁上的装备也可以附魔,你找个附魔级别高点附魔师,点击右键,选择邀请附魔,人家接受后,放进装备和卡片,「卡片的附魔属性要对应装备」有的人家要钱,这个可以商量,然后点确定就可以… ...

    269条评论 1710人喜欢 1985次阅读 533人点赞
  • dnf遗忘之地博士在哪

    谁知道陈冠希这件衣服是什么牌子的: 准确告诉你: 这件是CLOT牌子的,价格是1080,是CLOT在07年7月出的荆棘系列的一件短TEE,这件现在已经早就没有卖的了,现在如果想买只能去一些收集CLOT服装的店家,或者一些以前买了准备...

    791条评论 5474人喜欢 2755次阅读 930人点赞