关于外键的增删操作

给表添加外键必须满足2个条件,1,该表的引擎必须是InnoDB,2,必须给要添加外键的字段建立索引
create table child(
cid int not null auto_increment primary key,
pid int,
key pid(pid),
cname varchar(20));

通过alter添加外键
alter table child add constraint pids foreign key(pid) references parent(parent_id) on delete cascade on update cascade;

在创建表的时候添加外键

create table child(
cid int not null auto_increment primary key,
pid int,
key pid(pid),
cname varchar(20),
constraint pids foreign key(pid) references parent(parent_id) on delete cascade on update cascade
);

在创建表的时候也可以不设外键名,系统会默认创建,如:

create table child(
cid int not null auto_increment primary key,
pid int,
key pid(pid),
cname varchar(20),
foreign key(pid) references parent(parent_id) on delete cascade
);

删除外键

alter table child drop foreign key pids

说明:
on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:
CASCADE:
外键表中外键字段值会被更新,或所在的列会被删除.
RESTRICT:
RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.
set null:
被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.
而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

时间: 2024-10-13 17:12:52

关于外键的增删操作的相关文章

总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show databases' -uroot -p123456 mysqlshow -uroot -p123456 # 不常用,记住上面那个就行了 3.创建数据库语法 create database 数据库名; 例如: create database `HA-test`; 4. 切换数据库 use HA-te

(MYSQL)给数据库设置外键

设置外键有两种方式,一种是在创建表的时候关联外键,另一种是给已经存在的表添加外键.具体操作如下: 1.在创建表时的操作 班级表(主表): create table tb1( id INT PRIMARY KEY AUTO_INCREMENT, classname VARCHAR(20) NOT NULL ); 用户表(子表): create table tb2( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, c

MySQL——外键

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

InnoDB外键使用小结

USE `wfc_database`; # 主表(也可以称作:被参照表.referenced table.outTable) ALTER TABLE `app` ENGINE=INNODB; # 从表(也可以称作:参照表.外表.referencing table ) ALTER TABLE `app_version` ENGINE=INNODB; # 一个 [应用 ]可以有多个[应用版本] # 因此 app 和 app_version 是 1:n 的关系 (一个 app_id 对应有多个 av_

普通索引、唯一索引、主索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引

强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其表达的是存储引擎的范畴,也就是说只有在存储引擎级别谈索引才有意义.MyISAM.InnoDB.Memory等.此处单纯就InnoDB存储引擎讨论. B-TREE.B+TREE数据结构. 在数据之外,数据库系统还维护着满足特定查找算 法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这

MySQL学习9:详解MySQL中的外键约束

本篇主要讲解MySQL中的外键约束. 一约束概述 创建约束的目的就是保证数据的完整性和一致性.约束根据约束针对的字段的数目的多少划分为表级约束和列级 约束. 如果约束按照功能来划分的话刻印划分为:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE KEY(唯一约束).DEFAULT(默认约束)和FOREIGN KEY(外键约束). 在前面我们已经初步涉及到了除外键约束之外的四个约束,这一次我们来谈谈最复杂的外键约束. 二外键约束的要求 FOREIGN KEY(外键约束

MySQL错误代码1452:外键什么的错误(好长不再赘述英文了哈哈哈)

这个我看到了很多相同的解决办法,这里,好吧全都大同小异,这里贴出 Linux公社的一篇文章.http://www.linuxidc.com/Linux/2012-10/71821.htm,至于我自己的解决办法,我是先把数据索引清掉,再删除记录,这个时候应该可以在另一侧添加外键(你们懂我的意思吧,就是本来从A给B添加外键,我这一把从B到A添加外键)反向操作最无敌哈哈哈,我现在还在想这样的操作与本来的有什么不同,但是,结果是:成功的实现了外键的关联.当然,在设置外键以及索引之前要先填充数据.

sqlalchemy外键和relationship查询

原文地址:https://www.cnblogs.com/goldsunshine/p/9269880.html 阅读目录 一.sqlalchemy体现的外键特性 二.外键和查询 前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:“学习是一个循序渐进的过程”,而我的就是按照这样思路来学习数据库外键.首先是了解外键基础理论,然后是sqlalchemy基本操作,最后

数据库多表关系(外键)

数据库多表关系(外键) 字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter table tf1 modify x char(4) default ''; alter table tf1 change y m char(4) default ''; # 增加 mysql>: alter table 表名 add 字段名 类型[(长度) 约束]; # 末尾 eg>: alter t