mysql学习之路_外键

回顾4

连接查询:

连接多张表到一起,不管记录数如何,字段数一定会增加。

分类:内连接,外连接。自然连接,交叉连接,

交叉连接:cross join (笛卡尔积)

内连接:inner join,左右两张表有连接条件匹配(不匹配自动忽略)

外连接:left/right join 主表的一条记录一定会存在匹配保留副表数据,否则置空

自然连接:natural join 自动匹配(相同字段名)

PHP操作:mysql

Php充当客户端,开启mysql扩展

连接认证:mysql_connect;执行sql

获取结果:mysql_query;

解析结果:mysql_fetch系列

释放资源:mysql_free_result和mysql_close

错误处理:mysql_ermo和mysql_error

外键

Foreign key 外面的键

如果一张表中有一个字段(非字段)指向另一张表的主键,那么将该字段称之为外键

增加外键:

外键可以在创建表的时候或者在创建表之后增加(但是要考虑数据问题)一张表有多个外键

1) 创建表的时候增加外键:在所有的表字段之后使用:

Foreign key (外键字段) references 外部表(主键字段)

例:

Crate table My_c (

c_id int

Foreign key (c_id) references

My_class

) character utf8;

在新增之后增加外键;修改表结构

Alter table表名 add foreignkey(外键字段)

References 父表(主键字段);

Alter table my_foreign add

Constraint student_class_1

Foreign key (c_id)

Reference my_class(id);

修改&删除外键

外键不可修改;只能先删除后新增

删除外键

Alter table 表名 drop foreignerkey 外键名;--一张表有个外键但是外键名称不能一样。

例:alter table my_foreigner drop foreigner key

My_foreigner_id;

注意:外键删除是不能通过查看表结构体现出来,查看创建语句查看;

外键作用

外键默认作用:一个对父表,一个对子表(外键所在表)

对字表的约束:字表数据进行操作的时候如果对应的外键字段在父表找不到对应的匹配操作时便(约束字表数据)

对父表约束:父表数据进行写操作(删与改:主键)如果对应主键在字表中已经被数据引用,那么不允许操作。

外键条件

1,外表要存在:首先要保证表的存储引擎是innodb(默认存储引擎)如果不是innodb,外键创建成功,但是没有约束效果。

2,外键字段的字段类型(列属性)必须与父表的主键类型完全一致。

3,一张表中外键名称不能重复

4,增加外键的字段(数据已经存在),必须保证数据与父表主键要求一致。

外表约束

所谓外表约束就是指外键的作用

之前将外键作用:是默认作用,其实可以通过对外键的需求爱,进行定制操作。

外键约束有三种模式:针对父表。

District :严格模式(默认的)父表不能删除或者更新一个已经被子表数据引用的数据。

Cascade:级联模式,父表的操作,对应子表关联的数据也跟着操作。

Set null:  置空模式,父表的操作之后,子表的数据被置空。

约束模式:

删除的时候子表置空,更新的时候子表级联操作。

指定模式的语法:foreign 可以(外表字段)references 父表(主键字段)on delete 模式 update 模式;

更新操作:级联操作

删除操作:置空

删除置空前提条件:外键字段允许为空(如果不满足条件),外键无法创建。

外键很强大,能够进行各种约束;但对php来讲,外键约束降低了php对数据的可控性,但是实际开发中,很少用外键来处理。

回顾4

连接查询:

连接多张表到一起,不管记录数如何,字段数一定会增加。

分类:内连接,外连接。自然连接,交叉连接,

交叉连接:cross join (笛卡尔积)

内连接:inner join,左右两张表有连接条件匹配(不匹配自动忽略)

外连接:left/right join 主表的一条记录一定会存在匹配保留副表数据,否则置空

自然连接:natural join 自动匹配(相同字段名)

PHP操作:mysql

Php充当客户端,开启mysql扩展

连接认证:mysql_connect;执行sql

获取结果:mysql_query;

解析结果:mysql_fetch系列

释放资源:mysql_free_result和mysql_close

错误处理:mysql_ermo和mysql_error

外键

Foreign key 外面的键

如果一张表中有一个字段(非字段)指向另一张表的主键,那么将该字段称之为外键

增加外键:

外键可以在创建表的时候或者在创建表之后增加(但是要考虑数据问题)一张表有多个外键

1) 创建表的时候增加外键:在所有的表字段之后使用:

Foreign key (外键字段) references 外部表(主键字段)

例:

Crate table My_c (

c_id int

Foreign key (c_id) references

My_class

) character utf8;

在新增之后增加外键;修改表结构

Alter table表名 add foreignkey(外键字段)

References 父表(主键字段);

Alter table my_foreign add

Constraint student_class_1

Foreign key (c_id)

Reference my_class(id);

修改&删除外键

外键不可修改;只能先删除后新增

删除外键

Alter table 表名 drop foreignerkey 外键名;--一张表有个外键但是外键名称不能一样。

例:alter table my_foreigner drop foreigner key

My_foreigner_id;

注意:外键删除是不能通过查看表结构体现出来,查看创建语句查看;

外键作用

外键默认作用:一个对父表,一个对子表(外键所在表)

对字表的约束:字表数据进行操作的时候如果对应的外键字段在父表找不到对应的匹配操作时便(约束字表数据)

对父表约束:父表数据进行写操作(删与改:主键)如果对应主键在字表中已经被数据引用,那么不允许操作。

外键条件

1,外表要存在:首先要保证表的存储引擎是innodb(默认存储引擎)如果不是innodb,外键创建成功,但是没有约束效果。

2,外键字段的字段类型(列属性)必须与父表的主键类型完全一致。

3,一张表中外键名称不能重复

4,增加外键的字段(数据已经存在),必须保证数据与父表主键要求一致。

外表约束

所谓外表约束就是指外键的作用

之前将外键作用:是默认作用,其实可以通过对外键的需求爱,进行定制操作。

外键约束有三种模式:针对父表。

District :严格模式(默认的)父表不能删除或者更新一个已经被子表数据引用的数据。

Cascade:级联模式,父表的操作,对应子表关联的数据也跟着操作。

Set null:  置空模式,父表的操作之后,子表的数据被置空。

约束模式:

删除的时候子表置空,更新的时候子表级联操作。

指定模式的语法:foreign 可以(外表字段)references 父表(主键字段)on delete 模式 update 模式;

更新操作:级联操作

删除操作:置空

删除置空前提条件:外键字段允许为空(如果不满足条件),外键无法创建。

外键很强大,能够进行各种约束;但对php来讲,外键约束降低了php对数据的可控性,但是实际开发中,很少用外键来处理。

原文地址:https://www.cnblogs.com/lqh969696/p/9765533.html

时间: 2024-10-07 13:33:21

mysql学习之路_外键的相关文章

mysql学习之路_高级数据操作

关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 Id 姓名 性别 年龄 电话号码 1 张三 男 23 13320848263 一对多 一张表中有一条记录,对应另一张表多条记录但是反过来,另一张表的一条记录只能对应这张表的一条记录. 例母亲与孩子的关系 多对多 一张表中的一条记录对应另外一张表的多条记录,同时另一张表的一条记录对应另外一张表的多条

mysql的父子表,外键约束

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

总结: 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 截断表时由于外键约束无法完成时的处理方法

而在MySQL?5.5中,存在外键约束的InnoDB表,在任何情况下都不允许进行Truncate操作,并报错(Error 1701),如果朋友你实在是有点强迫症,那么可以用下面的方式拐着弯解决: 导出数据库数据位.sql文件. 随便用个文本编辑器打开文件. 手动编辑一下.sql文件,怎样编辑相信你看了下面这个图就知道了 4.再将编辑好的.sql文件重新导入就OK了.

MySQL导入数据库--开启/关闭外键约束

今天从服务器上面以SQL文件导出数据库时,发现导入失败,提示insert 语句执行错误, 插入数据时内容有外键关联,无法插入数据. 可以通过设置MySQL的外键约束的方法来进行设置. mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS) 禁用外键约束: SET FOREIGN_KEY_CHECKS=0; 启用外键约束: SET FOREIGN_KEY_CHECKS=1; 查看当前外键约束的值: SELECT @@FOREIGN_KEY_CHECKS; 用SQLyog导出数据

MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

今日重点:外键 一对多 多对多      一对一 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.引言: 我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id

(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 关闭子表的外键约束检察

准备: 定义一个教师表.一个学生表:在学生表中引用教师表ID create table teachers(teacherID int not null auto_increment primary key,teacherName varchar(8)); create table students(studentID int not null auto_increment primary key,teacherID int not null,studentName varchar(8), con

mysql(视图 事务 索引 外键)

视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atom