MySQL创建关联表

 

MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件
                                1.两个表必须是InnoDB数据引擎
                                2.使用在外键关系的域必须为索引型(Index)
                                3.使用在外键关系的域必须与数据类型相似
下面分别建两个表来说明一下:

Create TABLE IF NOT EXISTS `books` (   
  `book_id` smallint(6) NOT NULL auto_increment COMMENT '书籍编号',   
  `book_name` char(20) NOT NULL COMMENT '书名',   
  `book_pic` varchar(200) NOT NULL COMMENT '封面',   
  `book_author` char(20) NOT NULL COMMENT '作者',   
  `book_pub` char(40) NOT NULL COMMENT '出版社',   
  `book_sort` char(6) NOT NULL COMMENT '分类',   
  `book_owner` char(6) default NULL COMMENT '所有者',   
  `book_borrower` char(7) default NULL COMMENT '借阅者',   
  `book_borrower_time` date default NULL COMMENT '借阅时间',   
  PRIMARY KEY  (`book_id`),   
  INDEX (book_borrower))   
ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=5 ;  
 
Create TABLE IF NOT EXISTS `parts` (   
  `part_id` smallint(6) NOT NULL COMMENT '成员编号',   
  `part_name` varchar(6) NOT NULL COMMENT '成员名',   
  `part_mail` varchar(50) NOT NULL COMMENT '邮箱',   
  `part_pass` varchar(20) NOT NULL COMMENT '密码',   
  PRIMARY KEY  (`part_id`),   
FOREIGN KEY(part_name) REFERENCES books(book_borrower) on delete cascade on update cascade)   
ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;  
 分 析一下books表和parts表,创建他们的关联,我用了books表的book_borrower字段 创建表时索引并选择InnoDB为表引擎。而parts表即part_name字段为外键,关联到books表的book_borrower字段.注意两 个字段分别是char和varchar都是字符串类型。on delete cascade意思为当books表有相关记录删除时,那parts表也会跟着删除相关联的记录. 理论上parts表的part_name字段也应该要创建索引才对,但实验证创建关联后自动索引了.

那么创建关联表后有什么特性?实践一下就知道,先在books加些记录上去!

Insert INTO `books` (`book_id`, `book_name`, `book_pic`, `book_author`, `book_pub`, `book_sort`, `book_owner`, `book_borrower`, `book_borrower_time`) VALUES  
(1, '设计中的设计', 'http://otho.douban.com/mpic/s2165932.jpg', '原研哉', '山东人民出版社', '视觉设计', NULL, '阿健', NULL),   
(2, '点石成金:访客至上的网页设计秘笈', 'http://otho.douban.com/mpic/s1723386.jpg', '(美)Steve Krug', '机械工业出版社', '交互设计', NULL, 'Robin', NULL),   
(3, '交互设计之路', 'http://otho.douban.com/mpic/s1517284.jpg', '(美)库帕(Coper,A.)', '电子工业出版社', '交互设计', NULL,'CSSRain', NULL),   
(4, '软件观念革命', 'http://otho.douban.com/lpic/s1554354.jpg', '(美)库珀', '电子工业出版社', '交互设计', NULL, '一揪', NULL);  
好了现在现在注意看books的book_borrower列里的值分别为:"阿健","Robin","CSSRain","一揪"
在parts表里插入一条记录:
 
Insert INTO `bookshare`.`parts` (   
`part_id` ,   
`part_name` ,   
`part_mail` ,   
`part_pass`    
)   
VALUES (   
'1', '阿健', '0758jian@163.com', '8636257'  
);  


Insert INTO `bookshare`.`parts` (   
`part_id` ,   
`part_name` ,   
`part_mail` ,   
`part_pass`    
)   
VALUES (   
'2', '小飞', 'xioafei@21cn.com.cn', '123456'  
);  


为什么出错?相信你也应该看出了眉头了,因为books表book_borrower记录里没有"小飞"这个借阅者,parts表的part_name字段是关联到book_borrower字段,所以会提示出错,这样的作用相信你也想到了,确保两个数据表中的关联性!
还记得on delete cascade吗?试试下面SQL语句,再看看phpmyadmin里两个表的变化:

Delete FROM books Where book_borrower = "阿健";  

 

go -http://www.9j99.com/post/22.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值