MYSQL数据表建立外键
MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件
1.两个表必须是InnoDB数据引擎
2.使用在外键关系的域必须为索引型(Index)
3.使用在外键关系的域必须与数据类型相似
例如:
1、建立s_user表
create table s_user( u_id int auto_increment primary key, u_name varchar(15), u_pwd varchar(15), u_truename varchar(20), u_role varchar(6), u_email varchar(30) )
2、插入几条数据
insert into s_user values (1,"wangc","aaaaaa","wangchao","buyer","wang@163.com"), (2,"huangfp","bbbbbb","huangfp","seller","huang@126.com"), (3,"zhang3","cccccc","zhangsan","buyer","zhang@163.com"), (4,"li4","dddddd","lisi","seller","li@1256.com")
3、建立s_orderform表
create table s_orderform( o_id int auto_increment primary key, o_buyer_id int, o_seller_id int, o_totalprices double, o_state varchar(50), o_information varchar(200), foreign key(o_buyer_id) references s_user(u_id), #外链到s_user表的u_id字段 foreign key(o_seller_id) references s_user(u_id) #外链到s_user表的u_id字段 )
上面是设置过程,下来我们来看一个实例:
CREATE TABLE `roottb` ( `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL, `data` VARCHAR(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) engine=InnoDB;
CREATE TABLE `subtb` ( `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL, `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `data` VARCHAR(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`), INDEX (`rootid`), FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE ) engine=InnoDB;
好,接着我们再来插入测试数据:
INSERT INTO `roottb` (`id`,`data`) VALUES ('1', 'test root line 1'), ('2', 'test root line 2'), ('3', 'test root line 3');
INSERT INTO `subtb` (`id`,`rootid`,`data`) VALUES ('1', '1', 'test sub line 1 for root 1'), ('2', '1', 'test sub line 2 for root 1'), ('3', '1', 'test sub line 3 for root 1'), ('4', '2', 'test sub line 1 for root 2'), ('5', '2', 'test sub line 2 for root 2'), ('6', '2', 'test sub line 3 for root 2'), ('7', '3', 'test sub line 1 for root 3'), ('8', '3', 'test sub line 2 for root 3'), ('9', '3', 'test sub line 3 for root 3');
嗯,一切都正常,好,下面我们要试验我们的级联删除功能了。
我们将只删除roottb 表中id 为2 的数据记录,看看subtb 表中rootid 为2 的相关子纪录是否会自动删除:
嗯,看subtb 表中对应数据确实自动删除了,测试成功。
结论:1、给哪个表添加外键,哪个表就受到约束,该表的外键是另外一个表(roottb)的主键,另外一个表的主键删除一行,其余以该表主键作为外键的表影响行数也将同时删除。在MySQL 中利用外键实现级联删除成功!
2、创建外键的方法;①创建表时:
foreign key(o_seller_id) references s_user(u_id) #该表o_seller_id字段外链到s_user表的u_id字段,该表o_seller_id受到u_id约束
②sql添加删除外键
alter table tablename add foreign key locstock_ibfk2(stockid1) references product(stockid2)
tablename 为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名
删除外键
alter table tablename drop foreign key locstock_ibfk2
- 本文固定链接: http://ttfde.top/index.php/post/326.html
- 转载请注明: admin 于 TTF的家园 发表
《本文》有 0 条评论