外键级联删除
2016-07-07 16:07
239 查看
使用外键,优化锁定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一条没有合法的customerid的记录不会写到orderinfo里
CREATE TABLE customerinfo
(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo
(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)TYPE = INNODB;
注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
--建立数据库
create database test;
go
--建立表customers
create table customers(
id int identity(1,1) not null,
name varchar(15),
age int,
primary key(id)
);
go
--建立表orders
create table orders(
id int identity(1,1) not null,
order_number varchar(15),
price money,
customer_id int,
primary key(id)
);
go
--对表orders插入数据,以检测money数据类型,结果为:69.0000
insert into orders(price) values(69);
select * from orders;
--增加外键与关系约束
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id);
go
--级联删除、更新
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id)
on delete cascade on update cascade;
go
--级联删除
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id)
on delete cascade;
go
=====================================================================================================
--
insert into customers values('张三',25);
insert into customers values('李四',25);
--如果设置了级联插入,那么在向子表orders插入的customer_id(外键)
--必须在父表customers中存在此id(主键)
insert into orders values(1,50,5);
--如果设置了级联删除,删除父表customers中id=5的记录,
--也会删除子表orders中customer_id=5的记录,
delete from customers where id=5
只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一条没有合法的customerid的记录不会写到orderinfo里
CREATE TABLE customerinfo
(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo
(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)TYPE = INNODB;
注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
--建立数据库
create database test;
go
--建立表customers
create table customers(
id int identity(1,1) not null,
name varchar(15),
age int,
primary key(id)
);
go
--建立表orders
create table orders(
id int identity(1,1) not null,
order_number varchar(15),
price money,
customer_id int,
primary key(id)
);
go
--对表orders插入数据,以检测money数据类型,结果为:69.0000
insert into orders(price) values(69);
select * from orders;
--增加外键与关系约束
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id);
go
--级联删除、更新
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id)
on delete cascade on update cascade;
go
--级联删除
alter table orders add constraint FK_CUSTOMER foreign key (customer_id) references customers(id)
on delete cascade;
go
=====================================================================================================
--
insert into customers values('张三',25);
insert into customers values('李四',25);
--如果设置了级联插入,那么在向子表orders插入的customer_id(外键)
--必须在父表customers中存在此id(主键)
insert into orders values(1,50,5);
--如果设置了级联删除,删除父表customers中id=5的记录,
--也会删除子表orders中customer_id=5的记录,
delete from customers where id=5
只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。
相关文章推荐
- keepalived virtual_router_id 44
- mysqldump备份过程原理
- PHP高效率写法
- 小目标识别与跟踪算法
- 微信公众平台开发
- JSP——EL表达式
- Android 基础shape
- 1150. 【克罗地亚】NIKOLA
- IE9 IE8 ajax跨域问题的解决
- java多线程和并发库 学习笔记草稿
- m个珠子共n种颜色,找出包含n种颜色的最短连续片段
- 软件著作权和商业秘密权
- 动态代理
- 最新ffmpeg编译和用eclipse进行源码调试
- iOS 记录crash日志
- html5 canvas 2d 绘图
- Apache Maven 入门篇(下)
- Android进阶之通用RecyclerView适配器打造方法
- 从源码修改log4j的启动方式
- java多线程基础(6)-调度方式之暂停当前线程方式5-等待(wait)