12
返回列表 发新帖
楼主: david168520

MYSQl中定义外键出问题了

[复制链接]
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
11#
发表于 2009-7-29 07:24 | 只看该作者
原帖由 〇〇 于 2009-7-28 15:30 发表
对照ls的步骤
解决如下
mysql> create database Loan;
Query OK, 1 row affected (0.05 sec)

mysql> use Loan;
Database changed
mysql> create table student(number varchar(10) not null primary key,name varchar(10) not null,loanNumber varchar(10),
    -> ID varchar(20) not null,sex varchar(5) not null,birthday varchar(50) not null,enterSchoolTime varchar(50) not null,address varchar(50
),
    -> postID varchar(10) not null,telNumber varchar(15),class varchar(50),academy varchar(50),major varchar(20),
    -> loanType int,loanAmount int,loanState varchar(10))TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> create table loan(loanNumber varchar(10) ,name varchar(10) not null,number varchar(10) not null ,
    -> applyLoanTime varchar(20) not null,
    -> class varchar(50),academy varchar(50),major varchar(20),
    -> loanType int,loanAmount int,loanState varchar(10),FOREIGN KEY (loanNumber,name,number,class,academy,major,loanType,loanAmount,loanSta
te)
    -> REFERENCES student(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState),primary key(number,loanNumber))TYPE=INNO
DB;
ERROR 1005 (HY000): Can't create table '.\loan\loan.frm' (errno: 150)
mysql> create table loan(loanNumber varchar(10) ,name varchar(10) not null,number varchar(10) not null ,
    -> applyLoanTime varchar(20) not null,
    -> class varchar(50),academy varchar(50),major varchar(20),
    -> loanType int,loanAmount int,loanState varchar(10),primary key(number,loanNumber))TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create unique index index_loan on loan(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table loan add FOREIGN KEY (loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState)
    -> REFERENCES student(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState);
ERROR 1005 (HY000): Can't create table '.\loan\#sql-c54_1.frm' (errno: 150)
mysql> desc student
    -> ;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| number          | varchar(10) | NO   | PRI |         |       |
| name            | varchar(10) | NO   |     |         |       |
| loanNumber      | varchar(10) | YES  |     | NULL    |       |
| ID              | varchar(20) | NO   |     |         |       |
| sex             | varchar(5)  | NO   |     |         |       |
| birthday        | varchar(50) | NO   |     |         |       |
| enterSchoolTime | varchar(50) | NO   |     |         |       |
| address         | varchar(50) | YES  |     | NULL    |       |
| postID          | varchar(10) | NO   |     |         |       |
| telNumber       | varchar(15) | YES  |     | NULL    |       |
| class           | varchar(50) | YES  |     | NULL    |       |
| academy         | varchar(50) | YES  |     | NULL    |       |
| major           | varchar(20) | YES  |     | NULL    |       |
| loanType        | int(11)     | YES  |     | NULL    |       |
| loanAmount      | int(11)     | YES  |     | NULL    |       |
| loanState       | varchar(10) | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
16 rows in set (0.02 sec)

mysql> desc loan;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| loanNumber    | varchar(10) | NO   | PRI |         |       |
| name          | varchar(10) | NO   |     |         |       |
| number        | varchar(10) | NO   | PRI |         |       |
| applyLoanTime | varchar(20) | NO   |     |         |       |
| class         | varchar(50) | YES  |     | NULL    |       |
| academy       | varchar(50) | YES  |     | NULL    |       |
| major         | varchar(20) | YES  |     | NULL    |       |
| loanType      | int(11)     | YES  |     | NULL    |       |
| loanAmount    | int(11)     | YES  |     | NULL    |       |
| loanState     | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
10 rows in set (0.00 sec)

mysql> create unique index index_student on student(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table loan add FOREIGN KEY (loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState)
    -> REFERENCES student(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2009-8-3 22:43 | 只看该作者

回复 #9 〇〇 的帖子

原来是两个表中都要建立索引!谢谢你的加答!

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2009-8-4 00:34 | 只看该作者

回复 #9 〇〇 的帖子

我按你的要求做了,可以那样创建,但进行修改loan表时候,却发生了异常, Cannot add or update a child row: a foreign key constraint fails (`loan/loan`, CONSTRAINT `loan_ibfk_1` FOREIGN KEY (`loanNumber`, `name`, `number`, `class`, `academy`, `major`, `loanType`, `loanAmount`, `loanState`) REFERENCES `student` (`loanNumber`, `name);这是异常信息.
对loan表进行删除时候,student表中的没有及时更新,请问是什么原因啊,谢谢赐教!
我对你那个创建索引稍微加了点东西(后面加了级联操作,但为何还会出这样的问题啊!):alter table loan add FOREIGN KEY (loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState)
REFERENCES student(loanNumber,name,number,class,academy,major,loanType,loanAmount,loanState)ON UPDATE CASCADE ON DELETE CASCADE;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表