什么是sql?
SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured QueryLanguage)的缩写。SQL是一种专门用来与数据库通信的语言。与其他语言(如,英语以及Java和Visual Basic这样的程序设计语言)不一样,SQL由很少的词构成,这是有意而为的。设计SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据的简单有效的方法。
什么是mysql?
我们在前一章中介绍了数据库和SQL。正如所述,数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS(database manage system),即它是一种数据库软件。
DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机——服务器的DBMS。前者(包括诸如Microsoft Access和FileMaker)用于桌面用途,通常不用于高端或更关键的应用。MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机——服务器的。服务器部分是负责所有数据访问和处理的一个软件,运行在称为数据库服务器的计算机上,数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。客户机是与用户打交道的软件。
❑ 服务器软件为MySQL DBMS。你可以在本地安装的副本上运行,也可以连接到运行在你具有访问权的远程服务器上的一个副本。
❑ 客户机可以是MySQL提供的工具、脚本语言(如Perl)、Web应用开发语言(如ASP、ColdFusion、JSP和PHP)、程序设计语言(如C、C++、Java)等。
MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。
mysql必知必会讲了些啥?
数据筛选——where —— xxx between min and max、xxx is null
数据通配符——like——h%d, d%,%hyd%、正则表达式
创建计算字段——concat
数据处理函数—— Trim() 去除空格
汇总数据——AVG() 忽略列值为NULL的行,min,max,sum
分组数据——group by, having过滤分组
使用子查询——
连结表——
组合查询—— union会自动去除重复的行,如果想返回所有匹配行,可使用UNION ALL而不是UNION。
全文本搜索——功能与like差不多,但是会返回类似相似度的东西,like不支持相似度排序,fulltext类型的match & against语法支持
插入数据——
数据库经常被多个客户访问,对处理什么请求以及用什么次序处理进行管理是MySQL的任务。INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。,如果数据检索是最重要的(通常是这样),则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。
从别的表里读出来插入 insert into customers(列名)select xxx from another_table
更新和删除数据——
创建和操纵表——
与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE语句时,该引擎具体创建表,而在你使用SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,不需要过多关注它。
alter table 表名 add column 列名 CHAR(20)
小心使用ALTER TABLE 使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可
使用视图——
视图就是个虚拟表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
应该将视图用于检索(SELECT语句)而不用于更新(INSERT、UPDATE和DELETE),视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
使用存储过程——
❑ 一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。
❑ 你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。
之前工作时候有用到过一个获取上一个交易日的函数,应该就是个存储过程,回头看一下
使用游标——
由前几章可知,MySQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行(零行或多行)。使用简单的SELECT语句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。
这边已经感觉不怎么常用了
使用触发器——
insert的时候触发触发器
管理事务处理——
并非所有引擎都支持事务处理 正如第21章所述,MySQL支持几种基本的数据库引擎。正如本章所述,并非所有引擎都支持明确的事务处理管理。MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。这就是为什么本书中使用的样例表被创建来使用InnoDB而不是更经常使用的MyISAM的原因。如果你的应用中需要事务处理功能,则一定要使用正确的引擎类型。事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
在使用事务和事务处理时,有几个关键词汇反复出现。下面是关于事务处理需要知道的几个术语:
❑ 事务(transaction)指一组SQL语句;
❑ 回退(rollback)指撤销指定SQL语句的过程;
❑ 提交(commit)指将未存储的SQL语句结果写入数据库表;
❑ 保留点(savepoint)指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处理不同)。
安全管理——
MySQL用户账号和信息存储在名为mysql的MySQL数据库中。
use mysql;
select user from user;
show grants for hyd, 数据库权限使用 grant select on 库名.* 表名 hyd
改善性能——
重要!!!!
附录——
mysql的数据类型
sql运行的慢是因为什么?
https://zhuanlan.zhihu.com/p/62941196
https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g