码迷,mamicode.com
首页 > 数据库 > 详细

mysql学习之路_外键

时间:2018-10-10 14:36:29      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:否则   lib   解析   delete   ref   内连接   找不到   引用   外键约束   

回顾4

连接查询:

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

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

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

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

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

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

 

PHP操作:mysql

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

      连接认证:mysql_connect;执行sql

      获取结果:mysql_query;

      解析结果:mysql_fetch系列

      释放资源:mysql_free_resultmysql_close

错误处理:mysql_ermomysql_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_resultmysql_close

错误处理:mysql_ermomysql_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对数据的可控性,但是实际开发中,很少用外键来处理。

mysql学习之路_外键

标签:否则   lib   解析   delete   ref   内连接   找不到   引用   外键约束   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!