关于主外键和主键自增的问题

淡紫色风信子 2014-07-30 09:31:02
这两天建一个数据库遇到点问题,我把A表主键设置成了自增ID,然后再建了一些和用户有关的表B,这些表B里面都有一个外键约束,关联表A里面的user_ID。

但问题是我发现往这些B表里插入数据时,即便A表中还没有对应的user_ID也是可以插入的,然后向A表里插入数据时,自增的情况下就会跳过一个ID(但具体查询不到),也就是说我往B表里插入时,默认在A表里创建了一个新的数据?这个要怎么解决呢?
...全文
358 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡紫色风信子 2014-07-31
  • 打赏
  • 举报
回复
那我怎么样才能让他支持呢。。还是说没必要支持?
ComBat_Func 2014-07-31
  • 打赏
  • 举报
回复
斑竹回答的很清楚了啦,myisam引擎不支持外键
淡紫色风信子 2014-07-31
  • 打赏
  • 举报
回复
额,我没加这个啊?他自己出来的。。还是说mysql不支持外键?
ACMAIN_CHM 2014-07-31
  • 打赏
  • 举报
回复
楼主需要注意这个 ENGINE=MyISAM myisam 是不支持外键的。
淡紫色风信子 2014-07-31
  • 打赏
  • 举报
回复
| user  | CREATE TABLE `user` (
  `user_email` varchar(50) NOT NULL,
  `user_name` varchar(20) NOT NULL,
  `user_pass` varchar(30) NOT NULL,
  `toefl` int(3) DEFAULT NULL,
  `gre` int(3) DEFAULT NULL,
  `greWrite` float(2,1) DEFAULT NULL,
  `GPA` float(5,2) DEFAULT NULL,
  PRIMARY KEY (`user_email`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk |
| activities | CREATE TABLE `activities` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `record` varchar(80) DEFAULT NULL,
  `user_email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_email` (`user_email`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=gbk |
我用show create tables显示出来的,我已经把自增ID去掉了,可是我往activities表里添加记录,user没有他相应的email仍然不受影响
卖水果的net 2014-07-31
  • 打赏
  • 举报
回复
把 创建 FK 的语句发上来,个人怀疑如下: 1.FK 你给弄反了,你的本意是 B 引用A,结果设计成 A 引用 B了 2.你在表B上有TR(也可能不是TR),要在表A写数据,但是由于有其他的什么原因,数据写入失败,自增列就跳号了;
ACMAIN_CHM 2014-07-30
  • 打赏
  • 举报
回复
贴出 show create table a; show create table b 以供分析。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧