mysql 外键操作

/*主键唯一的不能为空null,一个表的主键只能由一个,可以有一个主键一个唯一uk间*/
/*primary key(sname,sid) 复合主键可以同时控制sname,sid用的比较少*/
/*外键fk一般都是2个表,只支持innodb引擎*/
drop table teacher;
create table teacher(
tid smallint unsigned not null auto_increment primary key,
tname varchar(10)
)engine=innodb charset utf8;

create table student(
sid int unsigned not null auto_increment primary key,
sname varchar(10),
stid smallint unsigned,
constraint fk foreign key (stid) references teacher(tid)
)engine=innodb charset utf8;

create table student(
sid int unsigned not null auto_increment primary key,
sname varchar(10),
stid smallint unsigned,
constraint fk foreign key (stid) references teacher(tid) on delete set null on update set null/*此种删除,只会删除老师,让学生的代课老师为空*/
)engine=innodb charset utf8;

create table student(
sid int unsigned not null auto_increment primary key,
sname varchar(10),
stid smallint unsigned,
constraint fk foreign key (stid) references teacher(tid) on delete set null/*此种删除,只会删除老师,让学生的代课老师为空*/
)engine=innodb charset utf8;
drop table student;

create table student(
sid int unsigned not null auto_increment primary key,
sname varchar(10),
stid smallint unsigned,
constraint fk foreign key (stid) references teacher(tid) on delete cascade/*级联删除,删除老师的同时,把学生也删除了*/
)engine=innodb charset utf8;

insert into teacher values(null,‘李老师‘);
insert into teacher values(null,‘王老师‘);
insert into teacher values(null,‘陈老师‘);
insert into teacher values(null,‘名老师‘);

select * from teacher;

select database();
use xx;
insert into student values(null,‘李四‘,4);
insert into student values(null,‘小明‘,8);
insert into student values(null,‘李‘,7);
insert into student values(null,‘小‘,6);
select * from student;
/*删除老师1,1老师有代课下面的学生表所以不能删除,没带课的可以删除*/
delete from teacher where tid=2;
delete from teacher where tid=7;
/*因为是学生表里面有外键控制所以删除的时候先删除学生表再删除老师表*/
drop table student;

时间: 2024-10-12 17:15:51

mysql 外键操作的相关文章

MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL

MySQL外键设置中的的属性含义: cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 Restrict方式 同no action, 都是立即检查外键约束 Set default方式 父表有变更

MySQL——外键

概念 关键字:foreign key,也叫做外键约束! 如果一个实体A的某个字段,刚好指向另一个实体B的主键,那么实体A的这个字段就叫做外键: 所以,简单来说,外键就是本表的某个字段指向外表的主键! 上面的,学生表中的班级字段其实就是一个外键! 其中,被指向的实体集(班级表),叫做主实体集(主表),也叫做父实体集(父表),负责指向的实体集(学生表),叫做从实体集(从表),也叫做子实体集(子表) 作用 外键的意义就是用来约束关系内的实体! 为什么需要有外键约束,因为需要在插入记录的时候,保证其符合

mysql外键使用和事物使用

mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存有 每个客户的订单 有了外键后 你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x 建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键). 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制:

MySQL外键使用及说明(简单易懂)

MySQL外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立:  3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好

Mysql 外键设置

MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.    例如:    有一个基础数据表,用来记录商品的所有信息.其他表都保存商品ID.查询时需要连表来查询商品的名称

mysql外键约束总结

总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松.这里以MySQL为例,总结一下3种外键约束方式的区别和联系. 这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组. 首先创建用户组表: 创建用户组表 create table t_group ( id int not n

4Python全栈之路系列之MYSQL外键

Python全栈之路系列之MySQL外键 先来个例子来说明什么是外键以及外键的作用,so,XO公司现正处于一种迅速发展的状态,从最初的12人的团队发展到现在的300人,那么问题就来了,发展的越快,人员与部门就越来越多,这是老大要求我们做一个人员管理系统,用于查询入职人员的信息等. 起初我们想用一个表来实现所有的人员统计,创建Personnel库,用于存放公司员工的信息,指令如下: CREATE DATABASE personnel DEFAULT CHARSET utf8 COLLATE utf

【转】MySQL外键约束On Delete、On Update各取值的含义

转载地址:http://hi.baidu.com/jxqlovejava/item/3d2cc5b5d689917c244b0920 ? 先看On Delete属性,可能取值如上图为:No Action, Cascade,Set Null, Restrict属性. 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除. 当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录

DjangoORM外键操作

1.经常修改的东西一般不放到内存里面,而是放到一张表里. 表跟表之间是可以存在关系的,最基本的就是一对多的关系. 3.Django ORM 外键操作 连表关系之一对多,models.ForeignKey(ColorDic) models.py 表关联 数据查询 创建数据 出处:http://blog.csdn.net/fgf00/article/details/53678205 待续