MySQL阶段二——sql语句基础(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

Outfile

注意:

    Insert详解

    delete和update相关

视图

    01.视图创建

    02.视图相关定义

    03.视图创建详解

    04.删除视图

    05.视图查询

    06.更新视图

    07.视图的执行过程

触发器

    01.定义触发器

    02.操作触发器

    03.注意


Outfile

将检索到的数据,保存到服务器的文件内。

通过:select * from outfile 文件地址 from XXXX;

注意:

1.可以自动创建文件,但是对已有文件不能操作。

2.生产的文件格式:默认使用制表符区分字段,用换行符区分记录,也会使用其他方式进行区分。

 

 

Insert详解

wKiom1mFpSyRH6sfAAEIwplTvWs358.png-wh_50


 

1.可以不将所有的字段插入数据,

2.如果插入部分字段,可以使用set语句:insert into teacher set t_name=...,c_name=...;

3.可以一次性插入多条语句,使用括号区分,逗号分开;

4.有主键冲突的时候,插入不成功,可以继续执行更新操作:insert into teacher(id,t_name,c_name) values(...) on duplicate key update t_name=””,c_name=””;

5.插入数据源可以是select语句查询到的数据;insert into teacher(..) select * from XXX;

6.如果字段不写,可以使用默认值;也可以强制使用default()函数或者default关键字使用默认值。

7.Replace:主键或唯一索引冲突,则替换;否则插入。

8.可以使用load data file导入数据:load data infile 文件路径 into table tb_name;


注意: 数据写入时,可能会引发多种异常,需要小心处理。 

         如: 主键冲突、唯一性约束、字段长度超标、数据类型不匹配、not null等

deleteupdate相关

delete

 DML删除:

    DELETE FROM  表名 WHERE 条件;

    允许使用条件(删除符合条件的数据)

    允许使用limit,限制删除的记录数,

    常见的是limit 配合order by来使用,先将 结果排序,再删除固定数量的记录。

    允许连接删除:先提供表名,再提供连接条件。


Truncate

 DDL删除:

     truncate table 表名;

    a) 不会返回删除的记录数

    b) 重新自动增长主键


如何快速把一个表里面的数据清空:  truncate table 表名;  

重点: 如何数据含有子记录,如何删除?

           删除的时候,需要判断异常返回值,如果存在完整性约束异常,则转为逻辑删除(打删除标记),否则物理删除!


Delete:逐行删除

Truncate:删除表,新建表


视图

wKioL1mFpSyBBtbaAAI8NdnxEAY068.png-wh_50

作用:

    1.安全性:将底层数据结构隐藏

    2.易用性:复杂变简单 

01.视图创建

Create table info_teacher(

Id int primary key auto_increment,

T_name varchar(10),

Salary decimal(10,2)

);

Create view v_teacher as select i,t_name from info_teacher;

 

02.视图相关定义

视图就是一张虚拟表,是一个存在与数据库中的虚拟表;视图本身没有数据,只是通过执行相关的select语句完成获得相应的数据。

 

03.视图创建详解

01)建立视图

Create view <视图名> [(<列名>,[,<列名>])]

As <子查询>

[with check option]

With check option表示对视图进行updateinsertdelete操作时要保证视图的操作的行满足视图定义中谓词条件(即子查询中的条件表达式)。

组成视图的属性列名或者全部省略或者全部指定。在下面三种情况下必须指定视图列名:01.某个目标列不是单纯的属性名,而是聚集函数或者列表达式;02.多表连接时选出了几个同名列作为视图的手段;03.需要在视图为某个列启用更合适的名字。

定义基本表时,为了减少数据库的冗余数据,表中中存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。创建视图也可以创建基本表中不存在的列,即创建派生列(比如avg(列名))。

视图可以创建在单个表上,也可以建立在多个基本表上。视图不仅可以建立在一个或者多个基本表上,也可以建立在一个或者多个已定义的视图上,或者建立在基本表和视图上。

 

04.删除视图

Drop view <视图名>[cascade];

 

05.视图查询

视图定义之后,用户就可以像对基本表一样对视图进行查询了。

视图消解:关系型数据库管理系统执行对视图的查询的时候,首先进行有效性检查,检查查询中涉及的表、视图是否存在。如果存在,则从数据字典中取出视图的定义,吧定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。

 

06.更新视图

更新视图就是对视图进行crud操作,真正操作也会经历视图消解。为了防止通过视图对数据进行更新的时候,有意无意对不属于视图的基本表进行操作,可以在视图定义的时候加上With check option

 

07.视图的执行过程

视图的执行算法:mergetemptable

指的是一个视图是在什么时候执行,依据哪些方式执行;

Merge:合并的执行方式,每当执行的时候,先将我们视图的sql与语句与外部查询视图的sql语句,混合在一起,最终执行;

Temptable:临时表模式,每当查询的时候,将视图所使用的select语句生成一个结果的临时表。再在当前的临时表内查询。

 

每当用户创建视图的时候,mysql默认使用一种undefined的处理算法;就是会自动在合并和临时表内进行选择。

 

触发器

01.定义触发器

Create trigger <触发器名称>

{before|after} <触发器名> on <表名>

Referencing new|old row as <变量> /*Referencing 指出引用的变量*/

For each {row|statement}

[when <触发条件>] <触发动作体>

 

02.操作触发器

删除:drop trigger<触发器名> on <表名>

查看:show create trigger name;

 

03.注意

如果一个触发程序,由多条sql语句组成。

应该:1.语句组成语句块(begin end标识);2.语句块的语句需要独立的语句结束符,分号。

 

命令行:由于触发程序内使用分号作为语句结束符。那么当命令行客户端碰到分号时,就应该理解成触发程序内子语句结束,而不是整个创建触发器的语句结束。

 

应该通过修改命令行的语句结束符达到目的。

Delimiter语句可以完成设置语句结束符。

 

Delimiter $$

Create trigger ruxue after insert on student

For each row

Begin

Update class set stu_count=student_count+1;

Update class set cz_money=cz_money+20;

End

$$

Delimiter ;

 

Old:监听事件所在表上的数据,在事件发生之前时的数据;

New:监听表上,事件发生之后,新处理完毕的数据。

 

事件是insert时:不能使用old;事件为delete:不能使用new



本文转自 叫我北北 51CTO博客,原文链接:http://blog.51cto.com/qinbin/1953871

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
44 1
|
13天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
28 0
|
13天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
25 0
|
25天前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
43 0
|
26天前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
11 0
|
11月前
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
147 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉 1
MySQl数据库第八课-------SQL命令查询-------主要命脉
115 0
|
SQL 存储 开发框架
MySQl数据库第六课-------SQl命令的延续------快来看看
MySQl数据库第六课-------SQl命令的延续------快来看看
|
SQL 存储 NoSQL
MySQl数据库第五课 --------在SQl的简单命令--------学习学习
MySQl数据库第五课 --------在SQl的简单命令--------学习学习

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面