前端学数据库的存储

前的讲话

  我们经常会面针对数据表进行插队、删除、更新和搜寻的办事,即我们常常说的CURD。其实,当我们输入指令时,mysql引擎会按照下图进行操作

图片 1

  如果我们大概了分析和编译的环,那么执行效率将大大提高。这就待下面介绍的储存来兑现

 

囤过程

  存储过程是SQL语句和控制语句的预编译集合,以一个称呼存储并作为一个单元处理。存储过程存储在数据库内,可以由应用程序调用执行,允许用户声明明变量和开展流程控制。存储过程可吸纳参数(输入型参数、输出类型参数),可以有多独返回值。所以,存储过程的施行效率超过单一SQL命令的实践效率

优点

  1、增强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 SECURITY {DEFINER | INVOKER}:指明谁起权力来实行

过程体

  1.了程体由官方的SQL语句构成;

  2.过程体可以是“任意”SQL语句(这里的擅自主要是赖对记录的增删改查,多表连接);

  3.过程体如果为复合结构,则采取BEGIN…END语句;

  4.复合结构得以分包声明,循环,控制结构

创建没有参数的积存过程

CREATE PROCEDURE sp1() SELECT VERSION();

调用存储过程

  方式一:CALL sp_name([parameter[,…]])
如果存储过程包含参数,则要产生小括号

  方式二:CALL sp_name[()] 如果存储过程未带有参数,则小括号可有可无

图片 2

修改存储过程

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;

图片 3

  下面来调用存储过程

图片 4

创建带有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 ;

图片 5

mysql变量分类 

  1.用户变量:以”@”开始,形式为”@变量名”

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

SET @i = 7;

  2.全局变量:定义时,以如下两栽形式出现,set GLOBAL 变量名或者set
@@global.变量名 

  对持有客户端生效。只有所有super权限才可以装全局变量

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

  4.局管变量:作用范围在begin到end语句块之间。在该语句块里设置的变量

  declare语句专门用来定义有变量。set语句是设置不同档次的变量,包括会话变量和全局变量

  下面来调用存储过程

CALL removeAndReturnUsersNums(1,@nums);

图片 6

图片 7

创造带有多只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()函数用来取插入、删除以及更新的被影响之笔录总数

图片 8

图片 9

  下面来调用存储过程

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

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

SELECT @a,@b;

图片 10

囤过程与自定义函数的区分

  1.储存过程实现之意义而复杂一些;而函数的对更胜似

  2.仓储过程可回到多个价;函数只能发出一个返回值

  3.囤积过程相似独立的来施行;而函数主要作其它SQL语句的一些来起

 

储存引擎

  MySQL可以以数据以不同的艺存储于文书(内存)中,这种技能就称为存储引擎。每一样种存储引擎使用不同的积存机制、索引技巧、锁定水平,最终提供广泛且不同之作用

  于论及项目数据库中,数据的储存是以表的样式来兑现之。所以,存储引擎也堪称呼表类型。所以,实际上,存储引擎就是均等栽存储数据、查询数据的艺

  MySQL支持之仓储引擎包括MyISAM、InnoDB、Memory、CSV、Archive

并作控制 

  并作控制是恃当多只连续对记录进行修改时保证数据的一致性与完整性

  例如:两只用户同时登录并操作数据库,其中一个用户删除某条记下,而其他一个用户读取该永记下,这即得并作控制,否则会报错或返回无效信息

  在拍卖并发’读’或’写’操作时,MySQL通过锁系统实现产出控制,包括联合享锁和扫除他锁

  -共享锁(读锁):在同一时间段内,多单用户可以读取同一个资源,读取过程遭到多少不见面发生其他变化

  -排他锁(写锁):在其它时刻只得发出一个用户写副资源,当进行摹写锁经常会见阻塞其他的读锁或者写锁操作

  锁颗粒(也号称锁力度)是负锁定时的单位。只需要针对修改的数标准加锁就足以,而无需对所有资源还加锁

  加锁会大增系统出,所以用通过锁策略,在沿开销和系统安全之间找平衡。mysql锁策略包括表锁和行锁两种植政策

  - 表锁,是一样种出最小之锁策略

  - 行锁,是一致种植出最特别之锁策略

事务处理

  事务是数据库区别为文件系统的显要特征有,事务主要用来保证数据库的完整性

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

索引

  索引是指向数据表中千篇一律列或多排的价值进行排序的一律种结构,使用索引可以快速访问数据表的特定信息。索引是记录快速稳定的同等种方法,类似于书之目

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

各种囤引擎的表征

图片 11

  除了上面就几乎种存储引擎之外,还有下面几乎栽不极端宽广的发动机

  CSV存储引擎不支持索引,逗号分隔值(Comma-Separated
Values,CSV,有时也叫做字符分隔值,因为分隔字符也可以无是逗号),其文件为纯文本形式储存表格数据(数字与文书)。纯文本意味着该文件是一个字符序列,不带有必须像二进制数字那样被解读的数量。CSV文件由随机数目的记录组成,记录里因为某种换行符分隔

  BlackHole为吃黑洞引擎,写副的多少还见面流失,一般用于做多少复制的连通

  MyISAM引擎适合给东西处理不多之情况

修改存储引擎

  1、通过改MySQL的配备文件贯彻

default-storage-engine = engine

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

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

图片 12

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

ALTER TABLE table_name ENGINE [=] engine_name;

图片 13

网站地图xml地图