您的位置:首页 > 其它

外键级联删除

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引擎。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: