@作者 Stone的博客www.1314sl.com
-- 外键(新增) --创建表的时候增加外接:在所有的表字段之后使用 -- foreign key (外键字段) -- references (主键字段) 在新增表之后 修改表结构 alter table 表名 add[constraint] foreign key(外键字段) references(主表 主键字段); -- 删除外键 alter table 表名 drop foreign key 外键名; -- desc 表名 -- show create table 表名 -- 外键(默认约束) --默认的有倆点:一个对父表,一个对子表 对子表约束:如果对应的外键字段在父表找不到对应的匹配:那么操作会失败。 对父表约束:父表数据进行写操作(删和改:都必须涉及到主键本身) -- 外键 条件 1.外键要存在:首先必须保证表的存储引擎是innodb。 如果不是innodb,能成功但是没有约束效果! 2. 外键字段的字段类型(列类型)必须与父表的主键类型完全一致 3.一张表的外接名字不能重复 4.增加外键的字段(数据已经存在),必须保证数据与附表主键要求对应 ---- 外键约束 外键的作用! 外键约束有三种约束模式:都是对父表的约束 district :严格模式(默认的人)父表不能删除或者更新一个已经被子表数据的引用的记录 cascade : 级联模式 对应子表关联的数据也跟着呗删除 setnull :置空模式 对应的数据(外键字段)被置空 foreign key(外键字段)references 父表(主键字段) on delete 模式 update 模式; ------- 联合查询 将多次查询(多条 select 语句),在记录上进行拼接(字段不会增加) --【基本语法】: 多条select 语句结构:每一条select 语句获取的字节数必须严格一致 select 语句1 union[union 选项] select 语句2... union 选项: All:保留所有(不管重复) Distinct:去重(整个重复) 默认的; 意义: 1.查询一张表,但是需求不同: 2.多张表的结果完全一样的,保存的数据(结构)也一样的。 -- 联合查询 order by 的使用 在联合查询中:order by 不能直接使用,需要对查询使用括号才行! 让order by生效 需要加 limit (select 语句1 sex order limit 99999) union (select 语句2 sex order by sex desc limt 999999 ); -- 子查询 sub query 一条select邮件内部包含了另外一条select语句 两种分类繁琐:按位置分类 ;安结果没类; From子查询: 跟在from 之后 where子查询: 出现在wehre 条件中 Exists: 在exists里面 按结果: 标量子查询:得到的结果是一行一列 列子查询:一行多列 行: 多列一行(多行多列) 上面几个出现的位置都是在where之后 表: 多行多列(出现的位置在from之后) --表量子查询 1.确定数据:获取所有的学生 select * from 学生表名 wheere 2.获取班级id: select id from 班级表 where 字段名=班级; select * from 表名 where id=any(select id from 表名); select * from 表名 where id=some(select id from 表名); select * from 表名 where id=all(select id from 表名); --行子查询 返回的结果可以是多行多列(一行多列) 1.确定数据源 select * from 表名 where 条件? 2.最大年龄和最高身高! select max(age),max(height) from 表名; -- mystudent 学生表 select * from mystudent where --行元素(age,height) (age,height)=(select max(age),max(height) from 学生表); --表子查询 返回的结果是多行多列的二维表:子查询的结果可以当做二维表来使用! 需求:找出每个班最高的一个学生 1.确定数据源:先将学生按身高进行降序! 2.每个班选出第一个学生 select * from mystudent group by cid Select * from (select * from mystudent order by heigfht desc )'身高'group by cid; --EXISTS 查询 -- 所有的查询都需要先找到 数据源!; Exists: 是否存在的意思,exists 子查询就是用来判断某些条件是否满足; -- select exists(select * from 存在的表); -- 返回 1; select * from mystudent where exists(select * from myclass) -- 视图(创建) view :有结构但是没结果的虚拟表! 基本语法: create view 视图名字 as select语句;-- 可以是普通查询; 创建单表视图:基表 create view 视图名字 as select * from 表名; 创建多表视图: create view 视图表名 as select *(注意这里不能有重复的字段名出现) from 表名 as inner join 表名 on 相同条件!! -- 视图查看 --- 的结构 --表的所有查看方式都适用 view 查看表 show create view 结构表名\G; --视图一旦创建:系统会在视图对应的数据库文件夹下创建一个对应的结构文件: fm 文件 -- 修改视图 alter view 视图名字 as 新的 select语句 -- 删除视图 Drop view 视图名字; -- 视图操作(新增) 视图数据操作: --多表视图不能删除数据 -- 单表视图可以删除 delete from 视图名 where 条件; -- 视图更新 --第5天 25 ???????????? -- 算法 undefined:未定义(默认的) Temptable:零时表 先执行视图的select 语句; merge:合并算法!
@作者 Stone的博客www.1314sl.com

oneNate笔记
@作者 Stone的博客www.1314sl.com
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。