mysql中添加外键问题,求高手

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中添加外键问题,求高手相关的知识,希望对你有一定的参考价值。

主你要知道,建外键的作用是使用外键所引用的表来约束所要用到该外键的表!
明白了外键的特性,再来看看这个问题.既然表都建起来了,那么问题肯定不是出在建表结构或者引用上。异常提示说违反约束规则.
分析你的问题,问题出在:
1.在你的航班表中并没有数据,这时候你往机票表中插入数据的时候并没有外键所参考的主键给你引用,这时候因为找不到所要参考的引用,约束规则生效,使你在没有主键参考的情况下不能往表中插入数据.
2.问题分析同上面,但是不同的是航班表中有数据,但是你机票表中插入数据的时候,外键的值并没有在航班表中存在,同样也会报相同的异常.

楼主在Java区也有个相同的问题。。。
参考技术A 插入签要保证emp表中要插入记录的dept外键值在dept表中存在,然后直接写插入语句就可以
insert into emp(id, name, dept) values ( 'id', 'name', 'dept')

关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句

有两个表A,B,两个表示多对多的关系,所以还有一个关系表C,为了简化说明,A的字段有ID和TAG、TIME,B的字段有ID和TAG,C的字段有ID、AID、BID。其中ID都为各表主键,AID和BID分别对应A、B表的外键。
现在有一个需求,要对A表中存在的TIME小于某个特定的值(可以认为是固定的),则置该记录的TAG为1(默认为0,B表也一样),而作为级联,与该记录相关的B表中的记录的TAG也需要置1,但是考虑到多对多的关系,B表的该记录可能存在于A表另一个ID有关联,但是该记录的TIME大于该特定值,此时不将B表的该记录的TAG置1,仍然保留0。
现在就是要设计这样的一个UPDATE语句,更新A表很简单,关键是如何级联更新B表,但又要满足上述条件(只有与B记录所有关联的A记录的TAG为0才置B的TAG为0),数据库是MYSQL。
在线等。谢谢!

参考技术A 楼主这个级联更新我才疏学浅给分为2步骤, 先更新A表。 在更新B表,一条语句更新2张表的写法我目前写不来。下面是我的sql 你看是否与你的要求一致。

--更新A表update A set A.tag=0 from A INNER JOIN ( --获取 多对多关系C表 并根据A表时间来获得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.Time<getDate() --根据某时间条件。 AND A.Tag =0 --A的Tag 为0 时 ) result
ON resule.Aid=A.ID

--更新B表update B set B.tag=0 from B INNER JOIN ( --获取 多对多关系C表 并根据A表时间来获得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.Time<getDate() --根据某时间条件。 AND A.Tag =0 --A的Tag 为0 时 ) result
ON resule.Bid=B.ID

以上是关于mysql中添加外键问题,求高手的主要内容,如果未能解决你的问题,请参考以下文章

mysql外键建立不起来

求高手解答mysql 的索引怎么用

mysql筛选条件,求高手

不能在mysql中添加外键?

如何在 MySQL 表中添加外键列?

尝试使用 heidisql 在 mysql 中添加外键