前端学数据库之存款和储蓄

面前的话

  大家平时会对数据表举行插队、删除、更新及搜索的专门的学业,即大家常说的CUHummerH二D。其实,当大家输入指令时,mysql引擎会根据下图进行操作

997755.com澳门葡京 1

  要是大家简要了分析和编写翻译的环节,那么试行功能将大大进步。那就供给上面介绍的贮存来落成

 

前者学数据库之存款和储蓄,学数据库之存款和储蓄

×

日前的话

  我们平常会对数据表实行扦插、删除、更新及查找的职业,即我们常说的CU揽胜D。其实,当大家输入指令时,mysql引擎会依据下图进行操作

997755.com澳门葡京 2

  假使大家大概了剖析和编写翻译的环节,那么推行功用将大大进步。那就必要下边介绍的蕴藏来得以落成

 

起步和终止MySQL服务:

在组织者权限下:

$ net start mysql

$ net stop mysql

(小编自身的是mysql57,运行后方可在职务管理器的服务栏看到)

小心安顿好情形变量

积攒进度

  存款和储蓄进度是SQL语句和调控语句的预编译集结,以二个名号存款和储蓄并作为贰个单元管理。存款和储蓄进度存款和储蓄在数据库内,能够由应用程序调用实行,允许用户注脚明变量以及进行流程序调节制。存储进程能够接收参数(输入类型参数、输出类型参数),能够存在三个再次来到值。所以,存款和储蓄进度的施行效用超过单一SQL命令的施行效能

优点

  一、加强SQL语句的功力和灵活性

  2、完结很快的推行进程。客户端第壹次调用存款和储蓄进程时,MySQL引擎会对其开始展览语法分析、编写翻译等操作,然后将编写翻译结果存款和储蓄到内存中,所以首先次和事先的功用同样,然则随后会直接调用内存中的编写翻译结果,效能增加

  3、收缩互联网流量。单条SQL语句字符量相当的大,而经过调用存款和储蓄进程则只须要传存款和储蓄过程的名称及有关参数就能够,提交给服务器的数据量相对较少

语法结构

CREATE
[DEFINER = { user | CURRENT_USER }]  
PROCEDURE sp_name([proc_parameter[,...]])  
[characteristic ...] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type 

  IN表示该参数的值必须在调用存储进程时钦命,无法回来    

  OUT表示该参数的值能够被储存进度改换,并且可以回去    

  INOUT代表该参数在调用时钦定,并且能够被改成和再次来到

characteristic(特性)

COMMENT 'string'
|{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY {DEFINER | INVOKER}

  COMMENT:注释

  CONTAINS SQL:包括SQL语句,但不带有读或写多少的言语

  NO SQL:不包含SQL语句

  READS SQL DATA:包蕴读数据的讲话

  MODIFIES SQL DATA:包含写多少的口舌

  SQL SECU昂科威ITY {DEFINEPRADO | INVOKECRUISER}:指明什么人有权力来实行

过程体

  一.进度体由官方的SQL语句构成;

  二.进度体能够是“率性”SQL语句(那里的私行主即使指对记录的增加和删除改查,多表连接);

  3.进度体若是为复合结构,则应用BEGIN…END语句;

  肆.复合结构能够涵盖注解,循环,调控结构

创造未有参数的积存进程

CREATE PROCEDURE sp1() SELECT VERSION();

调用存储进程

  方式一:CALL sp_name([parameter[,…]])
假如存款和储蓄进程包括参数,则必须有小括号

  方式二:CALL sp_name[()] 借使存款和储蓄进程不带有参数,则小括号可有可无

997755.com澳门葡京 3

修改存款和储蓄进程

ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
|{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }

  只可以修改存款和储蓄进程中的注释、当前内容的档期的顺序,并不能改改进程体。要修改进程体的话,要求先删除存款和储蓄进程,然后重建

删去存款和储蓄进度

DROP PROCEDURE [IF EXISTS] sp_name

开创带有IN类型的贮存进度

DELIMITER //
CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
END//
DELIMITER;

997755.com澳门葡京 4

  下边来调用存款和储蓄进程

997755.com澳门葡京 5

创造带有IN和OUT类型参数的蕴藏进程

DELIMITER //
CREATE PROCEDURE removeAndReturnUsersNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END
//
DELIMITER ;

997755.com澳门葡京 6

mysql变量分类 

  一.用户变量:以”@”初叶,格局为”@变量名”

  用户变量跟mysql客户端是绑定的,设置的变量,只对近年来用户使用的客户端生效

SET @i = 7;

  2.全局变量:定义时,以如下三种方式出现,set GLOBAL 变量名也许set
@@global.变量名 

  对负有客户端生效。唯有具备super权限才得以设置全局变量

  三.会话变量:只对连接的客户端有效

  肆.局地变量:效率范围在begin到end语句块之间。在该语句块里设置的变量

  declare语句专门用来定义局地变量。set语句是设置不一样品种的变量,包涵会话变量和全局变量

  上边来调用存款和储蓄进度

CALL removeAndReturnUsersNums(1,@nums);

997755.com澳门葡京 7

997755.com澳门葡京 8

创办带有多个OUT类型参数的仓库储存进度

DELIMITER //
CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED,OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SAMLLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE age = p_age;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM users INTO userCounts;
END
//
DELIMITER ;

  [注意]ROW_COUNT()函数用来获取插入、删除以及立异的被影响的记录总量

997755.com澳门葡京 9

997755.com澳门葡京 10

  上面来调用存款和储蓄进度

CALL removeUserByAgeAndReturnInfos(20,@a,@b);

  [注意]@a代表删除的记录数,@b表示剩余的记录数

SELECT @a,@b;

997755.com澳门葡京 11

储存进度与自定义函数的区分

  一.囤积进程达成的效果要复杂一些;而函数的针对性更加强

  二.囤积进度能够回来八个值;函数只好有三个再次回到值

  叁.囤积进度一般独立的来实施;而函数首要作为其余SQL语句的组成都部队分来现身

 

目录

[1]储存过程 [2]存款和储蓄引擎

积存进程

  存款和储蓄进度是SQL语句和操纵语句的预编写翻译群集,以二个称呼存储并视作二个单元处理。存款和储蓄进度存款和储蓄在数据库内,能够由应用程序调用推行,允许用户注脚明变量以及开始展览流程调整。存款和储蓄进度还可以参数(输入类型参数、输出类型参数),能够存在八个再次来到值。所以,存款和储蓄进程的实施功能超越单一SQL命令的奉行功效

优点

  壹、加强SQL语句的作用和灵活性

  贰、完毕非常快的举行进程。客户端第二回调用存款和储蓄进度时,MySQL引擎会对其进展语法分析、编写翻译等操作,然后将编写翻译结果存款和储蓄到内部存款和储蓄器中,所以率先次和前边的效用同样,但是随后会直接调用内部存款和储蓄器中的编写翻译结果,功效拉长

  三、减少网络流量。单条SQL语句字符量不小,而因而调用存款和储蓄进度则只供给传存款和储蓄进度的名称及相关参数就能够,提交给服务器的数据量相对较少

语法结构

CREATE
[DEFINER = { user | CURRENT_USER }]  
PROCEDURE sp_name([proc_parameter[,...]])  
[characteristic ...] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type 

  IN表示该参数的值必须在调用存储进程时内定,不能够回到    

  OUT表示该参数的值能够被贮存进度改换,并且能够回到    

  INOUT表示该参数在调用时钦赐,并且能够被改成和重回

characteristic(特性)

COMMENT 'string'
|{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY {DEFINER | INVOKER}

  COMMENT:注释

  CONTAINS SQL:包括SQL语句,但不含有读或写多少的话语

  NO SQL:不包含SQL语句

  READS SQL DATA:包括读数据的口舌

  MODIFIES SQL DATA:包含写多少的言辞

  SQL SECU翼虎ITY {DEFINE科雷傲 | INVOKE奇骏}:指明哪个人有权力来执行

过程体

前端学数据库之存款和储蓄。  一.进程体由官方的SQL语句构成;

  贰.进度体能够是“任性”SQL语句(那里的即兴重若是指对记录的增删改查,多表连接);

  三.进度体如若为复合结构,则应用BEGIN…END语句;

  肆.复合结构能够分包申明,循环,调控结构

始建未有参数的积攒进程

CREATE PROCEDURE sp1() SELECT VERSION();

调用存款和储蓄进度

  方式一:CALL sp_name([parameter[,…]])
假使存款和储蓄进度包罗参数,则必须有小括号

  方式二:CALL sp_name[()] 假使存款和储蓄进度不含有参数,则小括号可有可无

997755.com澳门葡京 12

修改存款和储蓄进程

ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
|{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }

  只可以修改存款和储蓄进程中的注释、当前内容的品类,并不能够改改进程体。要修改进度体的话,要求先删除存款和储蓄进程,然后重建

删去存款和储蓄进程

DROP PROCEDURE [IF EXISTS] sp_name

始建带有IN类型的蕴藏进程

DELIMITER //
CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
END//
DELIMITER;

997755.com澳门葡京 13

  上面来调用存款和储蓄进程

997755.com澳门葡京 14

创办带有IN和OUT类型参数的仓库储存进度

DELIMITER //
CREATE PROCEDURE removeAndReturnUsersNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END
//
DELIMITER ;

997755.com澳门葡京 15

mysql变量分类 

  1.用户变量:以”@”先河,格局为”@变量名”

  用户变量跟mysql客户端是绑定的,设置的变量,只对脚下用户使用的客户端生效

SET @i = 7;

  2.全局变量:定义时,以如下三种样式出现,set GLOBAL 变量名可能set
@@global.变量名 

  对持有客户端生效。唯有全部super权限才得以设置全局变量

  3.会话变量:只对连接的客户端有效

  四.局地变量:作用范围在begin到end语句块之间。在该语句块里安装的变量

  declare语句专门用来定义局地变量。set语句是设置分裂门类的变量,包罗会话变量和全局变量

  下边来调用存款和储蓄进程

CALL removeAndReturnUsersNums(1,@nums);

997755.com澳门葡京 16

997755.com澳门葡京 17

创建带有四个OUT类型参数的囤积进程

DELIMITER //
CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED,OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SAMLLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE age = p_age;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM users INTO userCounts;
END
//
DELIMITER ;

  [注意]ROW_COUNT()函数用来博取插入、删除以及创新的被潜移默化的笔录总量

997755.com澳门葡京 18

997755.com澳门葡京 19

  上边来调用存储进度

CALL removeUserByAgeAndReturnInfos(20,@a,@b);

  [注意]@a表示删除的记录数,@b代表剩余的记录数

SELECT @a,@b;

997755.com澳门葡京 20

积存进程与自定义函数的分歧

  一.存款和储蓄进度达成的功能要复杂一些;而函数的指向越来越强

  二.存款和储蓄进度能够回去多少个值;函数只好有二个重回值

  三.存款和储蓄进度一般独立的来实践;而函数主要作为任何SQL语句的组成都部队分来出现

 

报到数据库

$  mysql -uroot -p

说明:
上述是一贯在windows命令行登6root用户数据库,输入-p回车之后,会弹出供给输出password的命令。

积攒引擎

  MySQL能够将数据以差别的才能存款和储蓄在文书(内部存款和储蓄器)中,那种技巧就叫做存款和储蓄引擎。每一种存款和储蓄引擎使用分裂的仓库储存机制、索引本领、锁定水平,最终提供分布且不相同的效果

  在关系型数据库中,数据的存款和储蓄是以表的款式来得以达成的。所以,存款和储蓄引擎也能够称之为表类型。所以,实际上,存款和储蓄引擎正是1种存款和储蓄数据、查询数据的本领

  MySQL帮忙的蕴藏引擎包罗MyISAM、InnoDB、Memory、CSV、Archive

并发调控 

  并发调控是指当四个接二连三对记录进行修改时保障数据的一致性和完整性

  举个例子:七个用户同时登入并操作数据库,当中二个用户删除某条记下,而另七个用户读取该条记录,那就要求并发调节,不然会报错或回到无效消息

  在管理并发’读’或’写’操作时,MySQL通过锁系统达成产出调整,包涵共享锁和排他锁

  -共享锁(读锁):在同临时间段内,八个用户能够读取同3个能源,读取进度中数量不会发生任何变动

  -排他锁(写锁):在其余时候只好有3个用户写入能源,当实行写锁时会阻塞别的的读锁也许写锁操作

  锁颗粒(也称为锁力度)是指锁定期的单位。只供给对修改的数码正确加锁就能够,而无需对富有能源都加锁

  加锁会追加系统开采,所以须要通过锁战术,在锁开支和系统安全之间搜索平衡。mysql锁攻略包括表锁和行锁三种政策

  - 表锁,是1养费用比十分小的锁攻略

  - 行锁,是1种开支最大的锁战术

事务管理

  事务是数据库分化于文件系统的根本特色之一,事务首要用于保险数据库的完整性

  事务天性包涵:原子性(Atomicity)、壹致性(Consistency)、隔绝性(Isolation)、持久性(Durability),简写为ACID

索引

  索引是对数据表中一列或多列的值实行排序的一种结构,使用索引能够火速访问数据表的特定消息。索引是记录急迅稳固的一种艺术,类似于书的目录

  索引蕴涵普通索引、唯一索引、全文索引、btree之索引、hash索引等

种种存款和储蓄引擎的性状

997755.com澳门葡京 21

  除了下面那两种存款和储蓄引擎之外,还有上边二种不太宽广的引擎

  CSV存款和储蓄引擎不扶助索引,逗号分隔值(Comma-Separated
Values,CSV,有时也称之为字符分隔值,因为分隔字符也能够不是逗号),其文件以纯文本格局积累表格数据(数字和文件)。纯文本意味着该公文是1个字符体系,不含必须像二进制数字那样被解读的数目。CSV文件由随机数目的笔录组成,记录间以某种换行符分隔

  BlackHole也叫黑洞引擎,写入的数额都会消亡,一般用于做多少复制的联网

  MyISAM引擎适合于事物管理不多的场地

修改存款和储蓄引擎

  一、通过改换MySQL的安插文件贯彻

default-storage-engine = engine

  二、通过创立数量表命令实现

CREATE TABLE table_name(
  ...
) ENGINE = engine;

997755.com澳门葡京 22

  3、通过更改数据表命令完结

ALTER TABLE table_name ENGINE [=] engine_name;

997755.com澳门葡京 23

前边的话

  大家日常会对数据表进行插队、删除、更新及追寻的做事,即大家常说的CU途观D。其实,当大家输入指令时,mysql引擎会依据下图进行操作

997755.com澳门葡京 24

  假使大家简要驾驭析和编译的环节,那么实行成效将大大进步。这就须求上边介绍的贮存来促成

 

仓库储存引擎

  MySQL能够将数据以不一样的本领存款和储蓄在文书(内部存款和储蓄器)中,这种本领就叫做存款和储蓄引擎。每一种存款和储蓄引擎使用差别的蕴藏机制、索引手艺、锁定水平,最终提供广阔且分裂的机能

  在关系型数据库中,数据的蕴藏是以表的款式来落到实处的。所以,存款和储蓄引擎也得以称之为表类型。所以,实际上,存款和储蓄引擎正是壹种存款和储蓄数据、查询数据的才干

  MySQL协助的贮存引擎包含MyISAM、InnoDB、Memory、CSV、Archive

并发调节 

  并发调整是指当几个一连对记录实行改变时保障数据的一致性和完整性

  举例:八个用户同时登陆并操作数据库,在那之中八个用户删除某条记下,而另一个用户读取该条记录,那就要求并发调节,不然会报错或重返无效音讯

  在拍卖并发’读’或’写’操作时,MySQL通过锁系统贯彻产出调控,包含共享锁和排他锁

  -共享锁(读锁):在同目前间段内,多少个用户能够读取同2个能源,读取进度中多少不会生出别的变动

  -排他锁(写锁):在任什么日期候只得有三个用户写入能源,当实行写锁时会阻塞其余的读锁大概写锁操作

  锁颗粒(也称之为锁力度)是指锁定期的单位。只须求对修改的数量正确加锁就能够,而无需对全体能源都加锁

  加锁会大增系统开垦,所以需求通过锁战术,在锁费用和系统安全之间寻找平衡。mysql锁计谋包蕴表锁和行锁三种政策

  - 表锁,是一养开销比十分小的锁战术

  - 行锁,是壹种费用最大的锁计谋

事务管理

  事务是数据库差别于文件系统的显要特征之1,事务主要用来保险数据库的完整性

  事务天性包含:原子性(Atomicity)、一致性(Consistency)、隔绝性(Isolation)、持久性(Durability),简写为ACID

索引

  索引是对数据表中一列或多列的值举办排序的壹种结构,使用索引能够快速访问数据表的一定音讯。索引是记录火速牢固的一种艺术,类似于书的目录

  索引包含普通索引、唯一索引、全文索引、btree之索引、hash索引等

各样存款和储蓄引擎的特色

997755.com澳门葡京 25

  除了下面这二种存款和储蓄引擎之外,还有上边二种不太遍布的引擎

  CSV存储引擎不帮忙索引,逗号分隔值(Comma-Separated
Values,CSV,有时也叫做字符分隔值,因为分隔字符也能够不是逗号),其文件以纯文本方式积攒表格数据(数字和文书)。纯文本意味着该公文是三个字符连串,不含必须像二进制数字那样被解读的多寡。CSV文件由随机数目的志录组成,记录间以某种换行符分隔

  BlackHole也叫黑洞引擎,写入的多少都会烟消云散,一般用于做多少复制的连片

  MyISAM引擎适合于东西管理不多的情况

修改存款和储蓄引擎

  1、通过改变MySQL的布署文件得以完成

default-storage-engine = engine

  2、通过创办数量表命令落成

CREATE TABLE table_name(
  ...
) ENGINE = engine;

997755.com澳门葡京 26

  3、通过修改数据表命令实现

ALTER TABLE table_name ENGINE [=] engine_name;

997755.com澳门葡京 27

MySQL退出

$ mysql > exit;
$ mysql > quit;
$ mysql > \q;

储存进度

  存款和储蓄进度是SQL语句和垄断语句的预编写翻译集结,以2个名称存款和储蓄并作为贰个单元处理。存储进程存款和储蓄在数据库内,能够由应用程序调用推行,允许用户申明明变量以及进行流程调节。存款和储蓄进程能够收起参数(输入类型参数、输出类型参数),能够存在五个重临值。所以,存款和储蓄进程的实践作用超越单1SQL命令的施行功用

优点

  壹、加强SQL语句的意义和灵活性

  二、达成相当慢的实践进度。客户端第1遍调用存款和储蓄进程时,MySQL引擎会对其进行语法分析、编写翻译等操作,然后将编写翻译结果存储到内部存款和储蓄器中,所以率先次和事先的频率同样,然则自此会一向调用内部存款和储蓄器中的编写翻译结果,成效增高

  3、减弱网络流量。单条SQL语句字符量比较大,而透过调用存款和储蓄进程则只要求传存款和储蓄进度的称谓及连锁参数就可以,提交给服务器的数据量相对较少

语法结构

CREATE
[DEFINER = { user | CURRENT_USER }]  
PROCEDURE sp_name([proc_parameter[,...]])  
[characteristic ...] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type 

  IN代表该参数的值必须在调用存款和储蓄进程时钦赐,不可能回去    

  OUT代表该参数的值能够被储存进度更改,并且能够回去    

  INOUT代表该参数在调用时钦定,并且能够被更动和重回

characteristic(特性)

COMMENT 'string'
|{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY {DEFINER | INVOKER}

  COMMENT:注释

  CONTAINS SQL:包罗SQL语句,但不带有读或写多少的语句

  NO SQL:不包含SQL语句

  READS SQL DATA:包括读数据的言语

  MODIFIES SQL DATA:包罗写多少的讲话

  SQL SECUPAJEROITY {DEFINEHighlander | INVOKEXC60}:指明哪个人有权力来施行

过程体

  1.进程体由法定的SQL语句构成;

  二.进程体能够是“任性”SQL语句(那里的轻便首假诺指对记录的增加和删除改查,多表连接);

  叁.进度体若是为复合结构,则运用BEGIN…END语句;

  四.复合结构得以涵盖评释,循环,调控结构

创办未有参数的囤积进度

CREATE PROCEDURE sp1() SELECT VERSION();

调用存储进程

  方式一:CALL sp_name([parameter[,…]])
若是存储进程包括参数,则必须有小括号

  方式二:CALL sp_name[()] 如若存款和储蓄进度不包罗参数,则小括号可有可无

997755.com澳门葡京 28

修改存款和储蓄进程

ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
|{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }

  只可以修改存款和储蓄进程中的注释、当前内容的种类,并不能够改改进程体。要修改进度体的话,必要先删除存款和储蓄进程,然后重建

除去存款和储蓄进度

DROP PROCEDURE [IF EXISTS] sp_name

创办带有IN类型的囤积进度

DELIMITER //
CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
END//
DELIMITER;

997755.com澳门葡京 29

  下面来调用存款和储蓄进程

997755.com澳门葡京 30

成立带有IN和OUT类型参数的储存进度

DELIMITER //
CREATE PROCEDURE removeAndReturnUsersNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END
//
DELIMITER ;

997755.com澳门葡京 31

mysql变量分类 

  一.用户变量:以”@”初步,情势为”@变量名”

  用户变量跟mysql客户端是绑定的,设置的变量,只对近日用户使用的客户端生效

SET @i = 7;

  2.全局变量:定义时,以如下三种样式出现,set GLOBAL 变量名恐怕set
@@global.变量名 

  对具有客户端生效。唯有具备super权限才足以安装全局变量

  三.会话变量:只对一连的客户端有效

  四.局地变量:功用范围在begin到end语句块之间。在该语句块里设置的变量

  declare语句专门用于定义局地变量。set语句是设置不一样体系的变量,包蕴会话变量和全局变量

  下边来调用存储进程

CALL removeAndReturnUsersNums(1,@nums);

997755.com澳门葡京 32
997755.com澳门葡京 33

创建带有八个OUT类型参数的蕴藏进程

DELIMITER //
CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED,OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SAMLLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE age = p_age;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM users INTO userCounts;
END
//
DELIMITER ;

  [注意]ROW_COUNT()函数用来得到插入、删除以及更新的被潜移默化的笔录总量

997755.com澳门葡京 34
997755.com澳门葡京 35

  上面来调用存款和储蓄进程

CALL removeUserByAgeAndReturnInfos(20,@a,@b);

  [注意]@a代表删除的记录数,@b代表剩余的记录数

SELECT @a,@b;

997755.com澳门葡京 36

存款和储蓄进程与自定义函数的区分

  一.仓库储存进程落成的机能要复杂一些;而函数的针对更加强

  贰.仓库储存进程能够回到四个值;函数只可以有三个再次回到值

  三.仓库储存进度相似独立的来施行;而函数首要用作别的SQL语句的组成都部队分来出现

 

修改MySQL提示符

  1. 连天客户端时透过参数内定

$ shell>mysql -uroot -proot --prompt 提示符

(上面登6的是root用户,密码也是root)。

  1. 老是上客户端后,通过prompt命令修改

$ mysql>prompt 提示符

(Windows 命令行清屏命令 cls)

储存引擎

  MySQL能够将数据以分歧的技术存款和储蓄在文件(内部存款和储蓄器)中,那种技巧就称为存款和储蓄引擎。每1种存款和储蓄引擎使用差别的存储机制、索引技艺、锁定水平,最终提供广阔且差异的效益

  在关系型数据库中,数据的存款和储蓄是以表的花样来贯彻的。所以,存款和储蓄引擎也可以称呼表类型。所以,实际上,存款和储蓄引擎正是一种存款和储蓄数据、查询数据的技艺

  MySQL辅助的存款和储蓄引擎包罗MyISAM、InnoDB、Memory、CSV、Archive

并发调整 

  并发调节是指当八个一连对记录实行修改时保障数据的1致性和完整性

  举例:四个用户同时登六并操作数据库,在这之中多个用户删除某条记下,而另二个用户读取该条记录,那就须要并发调控,不然会报错或回到无效消息

  在管理并发’读’或’写’操作时,MySQL通过锁系统实现产出调节,包蕴共享锁和排他锁

  -共享锁(读锁):在同一时半刻间段内,八个用户可以读取同一个能源,读取进度中数据不会产生任何改换

  -排他锁(写锁):在其它时候只得有2个用户写入能源,当实行写锁时会阻塞其余的读锁或然写锁操作

  锁颗粒(也称为锁力度)是指锁定时的单位。只须求对修改的数指标准加锁就足以,而无需对具备能源都加锁

  加锁会增多系统开垦,所以需求经过锁攻略,在锁开支和系统安全之间搜索平衡。mysql锁攻略包蕴表锁和行锁二种政策

  - 表锁,是一种草费比比较小的锁战略

  - 行锁,是壹种开支最大的锁战术

事务处理

  事务是数据库不一致于文件系统的首要特色之1,事务首要用于保险数据库的完整性

  事务天性包含:原子性(Atomicity)、一致性(Consistency)、隔开性(Isolation)、持久性(Durability),简写为ACID

索引

  索引是对数据表中一列或多列的值进行排序的1种结构,使用索引能够飞快访问数据表的特定音讯。索引是记录连忙稳固的一种格局,类似于书的目录

  索引包含常见索引、唯一索引、全文索引、btree之索引、hash索引等

各样存款和储蓄引擎的表征

997755.com澳门葡京 37

  除了下面那二种存储引擎之外,还有上面三种不太宽广的发动机

  CSV存款和储蓄引擎不扶助索引,逗号分隔值(Comma-Separated
Values,CSV,有时也称为字符分隔值,因为分隔字符也得以不是逗号),其文件以纯文本情势积攒表格数据(数字和文书)。纯文本意味着该文件是二个字符连串,不含必须像2进制数字那样被解读的数据。CSV文件由率性数目标志录组成,记录间以某种换行符分隔

  BlackHole也叫黑洞引擎,写入的数目都会不复存在,一般用来做多少复制的连接

  MyISAM引擎适合于东西管理不多的图景

修改存款和储蓄引擎

  一、通过修改MySQL的安插文件贯彻

default-storage-engine = engine

  二、通过创办数量表命令实现

CREATE TABLE table_name(
  ...
) ENGINE = engine;

997755.com澳门葡京 38

  三、通过改换数据表命令落成

ALTER TABLE table_name ENGINE [=] engine_name;

997755.com澳门葡京 39

目录
[1]存款和储蓄进度 [2]仓库储存引擎 前面包车型地铁话
大家经常会对数据表实行插队、删除、更新及查找的行事,…

MySQL提示符

参数 描述
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户

MySQL常用命令

显示当前服务器版本

$ SELECT VERSION();

来稳当今天牛时间

$ SELECT NOW();  

展现当前用户

$ SELECT USER();

MySQL语句规范

  • 最首要字与函数名称全体大写
  • 数据库名称、表名称。字段名称全体大写。
  • SQL语句必须以分行结尾。

数据表操作

始建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET [=] charset_name

(“{}”中故事情节表示必选,”|”表示双方选其1,”[]”表示非必选)。

eg:

CREATE DATABASE t1;

查看当前服务器下的数据库列表

SHOW {DATABASES | SCHEMAS}
[LIKE 'pattern' | WHERE expr]

SHOW WARNINGS; 显示警告信息。
SHOW CREATE DATABASE db_name; 显示数据库创建的信息。

修改数据库

ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name

删去数据库

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

MySQL暗许的端口号是某些? 330陆;
MySQL中的拔尖用户叫什么? root;

数据类型:

整形

数据类型 存储范围 字节
TINYINT 有符号值:-128到127(-27到27-1)无符号值:0到255 (0到2^8-1) 1
SMALLINT 有符号值:-32768到32767(-215到215-1)无符号值:0到65535 (0到2^8-1) 2
MEDIUMINT 有符号值:-8388608到8388607(-224到224-1)无符号值:0到16777215 (0到2^16-1) 3
INT 有符号值:-2147483648到2147483647(-231到231-1)无符号值:0到4294967295 (0到2^32-1) 4
BIGINT 有符号值:-923372036854775808到923372036854775807(-263到263-1)无符号值:0到18446744073709551615 (0到2^64-1) 8

浮点型

数据类型 存储范围
FLOAT[(M,D)] -3.402823466E+38到-1.175494351E-38 , 0和1.175494351E-38到3.40223466E+38.M是数字总位数,D是小数d点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数。
DOUBLE[(M,D)] -1.1976931348623157E+308到-2.2250738585072014E-308 ,0和2.2250738585072014E-308到1.79763148623157E+308.

日期时间型

列类型 存储需求
YEAR 1
TIME 3
DATE 3
DATETIME 8
TIMESTAMP 4

字符型

类型 存储需求
CHAR(M) M个字节,0 <= M < 255
VARCHAR(M) L+1个字节,其中L <= M 且0 <= M <= 65535
TINYTEXT L+1个字节,其中L <2^8
TEXT L+2个字节,其中L <2^16
MEDIUMTEXT L+3个字节,其中L <2^24
LONGTEXT L+4个字节,其中L <2^32
ENUM(‘value1′,’value2’,…) 1或2个字节,取决于枚举值的个数(最多65535个值)
SET(‘value1′,’value2’,…) 1,2,3,4或者8个字节,取决于set成员的数目(最多64个成员)

数据表的操作

数据表(或称表)是数据库最重视的组成都部队分之壹,是其余对象的根基。

USE

开荒数据库

USE 数据库名称;

创制数据表

CREATE TABLE [IF NOT EXISTS] table_name(
cloumn_name data_type,
...
)

eg:

mysql> CREATE TABLE tb1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
SHOW TABALES

查看数据表列

SHOW TABLES [FROM db_name]
[LINK 'pattern' | WHERE expr]
SHOW COLUMNS

翻看数据表结构

SHOW COLUMNS FROM tbl_name

INSERT

插入记录

INSERT [INTO] tbl_name[(col_name,...)] VALUES(val,...)

SELECT

记录查找

SELECT expr,... FROM tbl_name

eg:

mysql> SELECT * FROM tb1; 查询全部数据。
空值与非空值
  • NULL,字段可以为空值
  • NOT NULL,字值禁止为空

eg:

mysql> CREATE TABLE tb2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL
    -> );
AUTO_INCREMENT
  • 活动编号,且务必与主键组合使用
  • 暗中认可情状下,开端值为1,每一次的增量为1
PRIMARY KEY

主键约束

  • 每张数据表只好存在叁个主键
  • 主键有限辅助记录的唯一性
  • 主键自动为NOT NULL

eg:

mysql> CREATE TABLE tb3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30)
    -> );
UNIQUE KEY

唯一约束

  • 唯1约束能够确认保证记录的唯1性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表能够存在七个唯1约束

eg:

mysql> CREATE TABLE tb5(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
DEFAULT

默认值

当插入记录时,要是未有分明为字段赋值,则自动赋予暗许值。

eg:

mysql> CREATE TABLE tb6(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> sex ENUM('mail','female','secret') DEFAULT 'secret'
    -> );
约束:
  1. 自律保障数据的完整性和一致性。
  2. 封锁分为表级约束和列级约束。
  3. 封锁类型包蕴:
  • NOT NULL (非空约束)
  • P汉兰达IMALacrosseY KEY (主键约束)
  • UNIQUE KEY (唯一约束)
  • DEFAULT (暗许约束)
  • FOREIGN KEY (外键约束)
FOREIGN KEYp
  • 保持数据一致性,完整性。
  • 得以达成一对1或1对多涉及。

外键约束的渴求:

  1. 父表和字表必须运用一样的积累引擎,而禁用暂且表。
  2. 数据表的囤积引擎只可以为InnoDB.
  3. 外键列和参照列必须持有相似的数据类型。个中数字的尺寸或是不是有号子位必须一致;而字符的长短则足以差异。
  4. 外键列和参照列必须创制索引。借使参照列不设有索引的话,MySQL将电动创制索引。
父表与子表

父表:子表所参照的表。
子表:具备外键列的表。

编排数据表的默许存款和储蓄引擎

MySQL配置文件(my.ini)
default-storage-engine=INNODB

询问数据表的创办新闻
SHOW CREATE TABLE tb_name

eg:创立两张表

表一(父表):

mysql> CREATE TABLE provinces(
    -> id SMALLINT PRIMARY KEY AUTO_INCREMENT,
    -> pname VARCHAR(20) NOT NULL
    -> );

表二(子表):

mysql> CREATE TABLE users(
    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> pid SMALLINT,
    -> FOREIGN KEY(pid) REFERENCES provinces (id)
    -> );
翻看数据表索引
SHOW INDEXES FROM tb_name

eg:

  mysql> SHOW INDEXES FROM provinces;

eg:

mysql> SHOW INDEXES FROM provinces\G; 以网格的形式查看。
外键约束的参阅操作
  1. CASCAED :从父表删除或更新且自动删除或更新子表中万分的行。
  2. SET NULL
    :从父表删除或更新行,并且安装子表中的外键列为NULL。要是使用该选项,必须保障子表列未有点名NOT
    NULL。
  3. REST奥迪Q叁ICT :拒相对父表的去除或更新操作。
  4. NO ACTION :标准SQL的关机字,在MySQL中与REST途锐ICT一样。

eg:

mysql> CREATE TABLE users1(
        -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
        -> username VARCHAR(20) NOT NULL,
        -> pid SMALLINT,
        -> FOREIGN KEY(pid) REFERENCES provinces (id) ON DELETE CASCADE
        -> );

非得先在父表中插入记录,再在子表中插入记录。

删除数据表中的数额

DELETE FROM tb_name WHERE column_name = where_condition

eg:

mysql> DELETE FROM provinces WHERE id = 3;
表级约束与列级约束
  • 对贰个数据列建立的自律,称为列级约束。
  • 对四个数据列建立的束缚,称为表级约束。
  • 列级约束既能够在列定义时宣称,也足以在列定义后宣称。
  • 表级约束只万幸列定义后宣称。

修改数据表

增加单列
ALTER TABLE tal_name ADD [COLUMN] col_name
column_definition [FIREST | AFTER col_name]

eg:

mysql> ALTER TABLE users1 ADD age TINYINT UNSIGNED DEFAULT 10;
足够多列
ALTER TABLE tbl_name ADD [COLUMN]
(col_name column_definition,...)  

累增添列只可以插在最后,不可能钦点地方。

删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name

eg:

mysql> ALTER TABLE users1 DROP password, DROP age;
丰硕主键约束
ALTER TABLE tb1_name ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)

eg:

mysql> ALTER TABLE users2 ADD CONSTRAINT PK_user2_id PRIMARY KEY (id);
加上唯1约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX | KEY] [index_name] [index_type] (index_col_name,...)

eg:

mysql> ALTER TABLE users2 ADD UNIQUE (username);
增加外键约束
ALTER TABLE tb1_name ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
reference_definition

eg:

mysql> ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces (id);
增加/删除暗中同意约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name
{SET DEFAULT literal | DROP DEFAULT}

eg:

mysql> ALTER TABLE users2 ALTER age SET DEFAULT 15;

eg:

mysql> ALTER TABLE users2 ALTER age DROP DEFAULT;
去除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY.
删去唯壹约束
ALTER TABLE tb1_name DROP {INDEX | KEY} index_name

eg:

mysql> ALETER TABLE users2 DROP INDEX username;

(查看索引用 SHOW INDEXES FROM tb1_name 命令)

去除此之外键约束
ALETER TABLE tal_name DROP FOREIGN KEY fk_symbol

eg:

mysql> ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;

(查看外键用 SHOW CREATE TABLE tb壹_name\G 命令)

修改列定义
ALTER TABLE tb1_name MODIFY [COLUMN] col_name
column_definition [FIRST | AFTER col_name]

(由大类型改成小类型,有极大可能导致数据的不见)。

eg:

mysql> ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
修改列名称

(同时能够用来修改列定义)

ALETER TABLE tal_name CHANGE [COLUMN] old_col_name
new_col_name column_definition [FIRST | AFTER col_name]

eg:

mysql> ALTER TABLE users2 CHANGE id p_id TINYINT UNSIGNED NOT NULL;
数据表更名

方法1

ALTER TABLE tbl_name RENAME [TO | AS] new_tbl_name

方法2

RENAME TABLE tb1_name TO new_tbl_name
[,tb1_name2 TO new_tbl_name2] ...

(尽量少的更该数据表的列名和数码表名,避防对别的表形成影响。)

INSERT

安排记录

方法1:

INSERT [INTO] tal_name [col_name,...] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

(为暗中同意的活动编号的值赋值,假如不想退换其值,可以为其赋值“NULL”可能“DEFAULT”).

方法2:

INSERT [INTO] tal_name SET col_name={expr | DEFAULT},...

说明:
与第二种方法的不一样在于,此办法能够使用子查询(SubQuery)。

方法3:

INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

表明:此办法能够将查询结果插入到钦点的数据表。

UPDATE

履新记录(单表更新)

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET
col_name1={expr | DEFAULT} [,col_name2={expr | DEFAULT}]...
[WHERE where_condition]

eg:

mysql> UPDATE users SET age = age-1, sex=0;

eg:

mysql> UPDATE users SET age=age+1 WHERE id % 2=0;
DELETE

去除记录(单表删除)

DELETE FROM tbl_name [WHERE where_condition]
SELECT

寻找记录

SELECT select_expr [,select_expr ...]
[
  FROM table_references
  [WHERE where_condition]
  [GROUP BY {col_name | position} [ASC | DESC], ...]
  [HAVING where_condition]
  [ORDER BY {col_name | expr | position} [ASC | DESC],...]
  [LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
说明

select_expr(查询表明式)

  • 每2个表达式表示想要的一列,必须有起码多少个。
  • 多少个列之间以英文逗号分隔。
  • 星号(*)表示全体列。 tbl_name.* 能够象征命名的全体列。
  • 查询表达式能够运用[AS] alias_name 为其授予外号。
  • 别称可用于GROUP BY ,OENVISIONDE中华V BY或HAVING子句。

WHERE(条件表达式)

  • 对记录实行过滤,假诺未有点名WHERE子句,则显示全数记录。
  • 在WHERE表明式中,能够行使MySQL扶助的函数或运算符。

GROUP BY(查询结果分组)

[GROUP BY {col_name | position} [ASC | DESC],...]

HAVING(分组条件)

[HAVING where_condition]

OOdysseyDE普拉多 BY(对查询结果开始展览排序)

[ORDER BY {col_name | expr | position} [ASC | DESC],...]

LIMIT(限制查询结果再次回到的数量)

[LIMIT{[offset,]row_count | row_count OFFSET offset}]

997755.com澳门葡京 ,子查询

子查询(Subquery)是提出以往其余SQL语句内的SELECT子句。

子查询:

  • 子查询指嵌套在询问内部,且务必一贯出现在圆括号内。
  • 子查询可以涵盖多少个重大字或规范,如DISTINCT,GROUP BY,O奥迪Q5DER
    BY,LIMIT,函数等。
  • 子查询的外围查询能够是:SELECT,INSERT,UPDATE,SET或DO。

子查询再次回到值:子查询能够回去标量、①行、1列或子查询。

一.利用比价运算符的子查询

动用比价运算符的子查询
=、>、<、<=、>=、<>、!=、<=>

语法结构operand comparison_operator subquery

用ANY、SOME 或 ALL 修饰的比较运算符

operand comparison_operator ANY (subquery)
operand comparison_operator SOME (subquery)
operand comparison_operator ALL (subquery)
2.使用[NOT] IN 的子查询

语法结构 operand comparison_operator [NOT] IN (subquery)

  • =ANY 运算符与 IN 等效。
  • !=ALL 或 <>ALL运算符与NOT IN等效。
3.使用[NOT] EXISTS的子查询

若是子查询重临任何行,EXISTS将回到TRUE;不然为FALSE。

INSERT…SELECT

将查询结果写入数据表

INSERT  [INTO] tbl_name [(col_name,...)] SELECT...

多表更新

UPDATE table_references SET col_name1={expr | DEFAULT}
[,col_name2 ={expr | DEFAULT}]...
[WHERE where_condition]

CREATE…SELECT

创造数据表同时将查询结果写入到数据表

CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
select_statement

连接

MySQL在SELECT语句、多表更新、多表删除语句中帮衬JOIN操作。

语法结构

table_reference
{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
table_reference
ON conditional_expr

数据表参照(table_reference)

tal_name [[AS] alias] | table_subquery [AS] alias

数据表能够接纳tbl_name AS alias_name 或 tbl_name alias_name
赋予小名。

table_subquery能够看作子查询使用在FROM子句中,那样的子查询必须为其授予别名。

连天类型
  • INNER JOIN,内连接
    在MySQL中,JOIN,CROSS JOIN 和 INNE科雷傲 JOIN 是等价的。
  • LEFT [OUTER] JOIN,左外连接
  • RIGHT [OUTER] JOIN,右外连接

  • 內连接:显示左表及右表符合连接条件的笔录。
  • 左外连接: 呈现左表的全方位记下及右表符合连接条件的记录。
  • 右外连接: 突显右表的壹体笔录及左表符合条件的笔录。

说明:

外连接

A LEFT JOIN B join_condition

  • 数量表B的结果集重视数据表A。
  • 数量表A的结果集依据左连接条件重视全体数据表(B表除却)。
  • 左外连接条件决定怎样找寻数据表B(在并未有点名WHERE条件的事态下)。
  • 只要数量表A的某条记下符合WHERE条件,可是在数据表B不存在符合连接条件的记录,将生成3个兼有列为空的附加的B行。

内连接

  • 假诺应用内连接查找的笔录在连接数据表中不设有,并且在WHERE子句中品尝以下操作:
  • col_name IS NULL时,如果col_name被定义为NOT NULL,
  • MySQL就要找到符合连接条件的笔录后停下搜索愈多的行。

连日来条件

常见选取ON关键字来设定条件,使用WHERE关键字张开结果集记录的过滤。

最棒级分类表的安排

设计:
相似设置 type_id, type_name, parent_id 那多少个字段。

本人连接
同二个数据表对其本身进行延续。(通过外号,将一张表看成左表和右表)。

多表删除

DELETE tbl_name[.*][,tal_name[.*]]...
FROM table_references
[WHERE where_condition]

MySQL数据库的函数

  • 字符函数
  • 数值运算符与函数
  • 正如运算符与函数
  • 日卯时间函数
  • 音讯函数
  • 聚合函数
  • 加密函数

字符函数

函数名称 描述
CONCAT() 字符连接
CONCAT_WS() 使用指定的分隔符进行字符连接,第一个参数是分隔符。
FORMAT() 数字格式化
LOWERE() 装换成小写字母
UPPER() 装换成大写字母
LEFT() 获取左侧字符
RIGHT() 获取右侧字符
LENGTH() 获取字符串长度
LTRIM() 删除签到空格
RTRIM() 删除后续空格
TRIM() 删除签到和后续空格
SUBSTRING() 字符串截取
[NOT] LIKE 模式匹配
REPLACE() 字符串替换

补充:

  • “%”(百分号)代表私下个字符
  • “_” (下划线)代表专擅一个字符

数值运算符与函数

函数名称 描述
CEIL() 进一取整
DIV 整数除法
FLOOR() 舍一取整
MOD 取余函数(取模)
POWER() 幂运算
ROUND() 四舍五入
TRUNCATE() 数字截取

正如运算符与函数

函数名称 描述
[NOT] BETWEEN…AND… [不]在范围之内
[NOT] IN() [不]在列出值范围内
IS [NOT] NULL [不]为空

日子时间函数

函数名称 描述
NOW() 当前日期和时间
CURDATE() 当前日期
CURTIME() 当前时间
DATE_ADD() 日期变化
DATEDIFF() 日期差值
DATE_FORMAT() 日期格式化

音信函数

函数名称 描述
CONNECTION_ID() 连接ID
DATEBASE() 当前数据库
LAST_INSERT_ID() 最后插入记录的ID号
USER() 当前用户
VERSION() 版本信息

聚合函数

函数名称 描述
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
SUM() 求和

加密函数

函数名称 描述
MD5() 信息摘要算法
PASSWORD() 密码算法

自定义函数

自定义函数: 用户自定义函数(use-defined function,
UDF)是1种对MySQL扩张的门路,其用法与内置函数同样。

在MySQL中等高校函授数参数的个数理论上不可能超越10二陆个。

始建自定义函数

CREATE FUNCTION function_name
RETURNS
{STRING | INTEGER | REAL | DECIMAL}
routine_body
关于函数体:
  • 函数体由法定的SQL语句构成;
  • 函数体能够是简轻松单的SELECT或INSERT语句;
  • 函数体假使为复合函数则利用BEGIN…END语句;
  • 复合结构能够涵盖证明、循环、调整结构;

eg: 封装八个格式化当前几日子的函数

mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30)
    -> RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日  %H点:%i分:%s秒');

调用该函数

mysql> SELECT f1();

删去该函数:

mysql> DROP FUNCTION f1;

(“DELIMITEEscort //” 将mysql的言语甘休符更为“//”。能够自定义别的标记)。

MySQL存款和储蓄进度

存储进程是SQL语句和调控语句的预编译集合,以二个名号存款和储蓄并视作二个单元管理。

累积进程的帮助和益处

  • 抓好SQL语句的成效和灵活性
  • 福寿康宁比较快的实践进程
  • 调整和裁减网络流量

开创存款和储蓄进程

CREATE
[DEFINER = {user | CURRENT_USER}]
PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body

proc_parameter:

  • [IN | OUT | INOUT] param_name type
  • IN ,表示该参数的值必须在调用存款和储蓄进程时钦定
  • OUT, 表示该参数的值能够被积存进程改造,并且能够回来
  • INOUT, 表示该参数在调用时钦点,并且能够被退换和重回

特性(characteristic)

  • COMMENT: 注释
  • CONTAINS SQL: 蕴涵SQL语句,但不含有读或写多少的话语
  • NO SQL: 不包含SQL语句
  • READS SQL DATA: 包蕴读数据库的言语
  • MODIFIES SQL DATA: 蕴含写数据库的讲话
  • SQL SECU景逸SUVITY {DEFINEOdyssey | INVOKE大切诺基} 指明什么人有权力来进行

过程体

  • 进程体由合法的SQL语句构成;
  • 进度体能够是任意SQL语句(CRUD);
  • 进度体假设为复合结构则使用 BEGIN…END语句;
  • 复合结构得以分包注解、循环、调控结构;

调用存款和储蓄进度

CALL sp_name([parameter[,...]])
call sp_name[()]

修改存款和储蓄进度

ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
|{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
|SQL SECURITY {DEFINER | INVOKER}

(无法修改进度体,假设急需修改进程体,只可以先删除,然后重新成立)

除去存款和储蓄进程

DROP PROCEDURE [IF EXISTS] sp_name

(带有“@”符号的变量为用户变量。)

积攒进程与自定义函数的差距

  • 存储进度达成的效益更复杂一些;而函数的对准更加强
  • 积存进程能够重回多少个值;而函数只可以有三个重临值
  • 储存进度一般独立的来实施;而函数能够用作任何SQL语句的组成都部队分来出现。

注意事项:

  • 创立存款和储蓄进程或然自定义函数时屡屡需求经过delimiter语句修改定界符。
  • 要是函数体或进度体有多少个语句,须求包罗在BEGIN…END语句块中。
  • 积攒进度通过call来调用。

仓库储存引擎

MySQL能够将数据以区别的才干存款和储蓄在文件(内部存储器)中,那种本领就叫做存款和储蓄引擎。

每壹种存储引擎使用不一样的仓库储存机制、索引手艺、锁定水平,最后提供广阔且差别的功用。

MySQL支持的储存引擎

  • MyISAM
  • InnoDB
  • Memory
  • CSV
  • Archive

连带知识点

并发调控

当两个接二连三对记录进行修改时有限支撑数据的一致性和完整性。

通过“锁”来实现,

  • 共享锁(读锁):在同目前间段内,三个用户能够读取同多个能源,读取进程中多少不会发生其余更换。
  • 排他锁(写锁):在其余时候只好有1个用户写入财富,当举行写锁时会阻塞其余的读锁也许写锁操作。

锁颗粒

  • 表锁,是壹种费用一点都不大的锁计谋。
  • 行锁,是一种草费最大的锁战术。
事务

工成效于有限支撑数据库的完整性。

事务的风味

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
外键

是保障数据一致性的战术。

索引

是对数据表中一列或多列的值进行排序的一种结构。

各个存款和储蓄引擎的性状

特点 MyISAM InnoDB Memory Archive
存储限制 256TB 64TB
事务安全 支持
支持索引 支持 支持 支持
锁颗粒 表锁 行锁 表锁 行锁
数据压缩 支持 支持
支持外键 支持

修改存款和储蓄引擎的格局

通过修改MySQL配置文件落到实处

-default-storage-engine = engine

透过创办数量表命令落成

CREATE TABLE table_name(
...
...

) ENGINE = engine;

经过改造数据表命令落成

ALTER TABLE table_name ENGINE [=] engine_name;

MySQL数据库图形分界面管理工科具

  • PHPMyAdmin
  • Navicat
  • MySQL Workbench

注:
本文为慕课网《与MySQL的零距离接触》课程笔记。感兴趣的同学能够见到教授的教学录制。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website