首页 > 数据库 > MYSQL数据表建立外键详细案例说明
2016
09-29

MYSQL数据表建立外键详细案例说明

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


作者:admin
admin
TTF的家园-www.ttfde.top 个人博客以便写写东西,欢迎喜欢互联网的朋友一起交流!

本文》有 0 条评论

留下一个回复