时间:2021-07-01 10:21:17 帮助过:17人阅读
二,触发器
- <span style="color: #008000;">#</span><span style="color: #008000;"> 针对插入</span>
- create trigger tri_after_insert_t1 after insert on 表名 <span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- create trigger tri_after_insert_t2 before insert on 表名 </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 针对删除</span>
- create trigger tri_after_delete_t1 after delete on 表名 <span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- create trigger tri_after_delete_t2 before delete on 表名 </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 针对修改</span>
- create trigger tri_after_update_t1 after update on 表名 <span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- create trigger tri_after_update_t2 before update on 表名 </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- sql代码。。。
- end
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 案例</span>
- <span style="color: #000000;">CREATE TABLE cmd (
- id INT PRIMARY KEY auto_increment,
- USER CHAR (</span>32<span style="color: #000000;">),
- priv CHAR (</span>10<span style="color: #000000;">),
- cmd CHAR (</span>64<span style="color: #000000;">),
- sub_time datetime, </span><span style="color: #008000;">#</span><span style="color: #008000;">提交时间</span>
- success enum (<span style="color: #800000;">‘</span><span style="color: #800000;">yes</span><span style="color: #800000;">‘</span>, <span style="color: #800000;">‘</span><span style="color: #800000;">no</span><span style="color: #800000;">‘</span>) <span style="color: #008000;">#</span><span style="color: #008000;">0代表执行失败</span>
- <span style="color: #000000;">);
- CREATE TABLE errlog (
- id INT PRIMARY KEY auto_increment,
- err_cmd CHAR (</span>64<span style="color: #000000;">),
- err_time datetime
- );
- delimiter $$ </span><span style="color: #008000;">#</span><span style="color: #008000;"> 将mysql默认的结束符由;换成$$</span>
- create trigger tri_after_insert_cmd after insert on cmd <span style="color: #0000ff;">for</span><span style="color: #000000;"> each row
- begin
- </span><span style="color: #0000ff;">if</span> NEW.success = <span style="color: #800000;">‘</span><span style="color: #800000;">no</span><span style="color: #800000;">‘</span> then <span style="color: #008000;">#</span><span style="color: #008000;"> 新记录都会被MySQL封装成NEW对象</span>
- <span style="color: #000000;"> insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
- end </span><span style="color: #0000ff;">if</span><span style="color: #000000;">;
- end $$
- delimiter ; </span><span style="color: #008000;">#</span><span style="color: #008000;"> 结束之后记得再改回来,不然后面结束符就都是$$了</span>
- <span style="color: #008000;">#</span><span style="color: #008000;">往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志</span>
- <span style="color: #000000;">INSERT INTO cmd (
- USER,
- priv,
- cmd,
- sub_time,
- success
- )
- VALUES
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">0755</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">ls -l /etc</span><span style="color: #800000;">‘</span>,NOW(),<span style="color: #800000;">‘</span><span style="color: #800000;">yes</span><span style="color: #800000;">‘</span><span style="color: #000000;">),
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">0755</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">cat /etc/passwd</span><span style="color: #800000;">‘</span>,NOW(),<span style="color: #800000;">‘</span><span style="color: #800000;">no</span><span style="color: #800000;">‘</span><span style="color: #000000;">),
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">0755</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">useradd xxx</span><span style="color: #800000;">‘</span>,NOW(),<span style="color: #800000;">‘</span><span style="color: #800000;">no</span><span style="color: #800000;">‘</span><span style="color: #000000;">),
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">0755</span><span style="color: #800000;">‘</span>,<span style="color: #800000;">‘</span><span style="color: #800000;">ps aux</span><span style="color: #800000;">‘</span>,NOW(),<span style="color: #800000;">‘</span><span style="color: #800000;">yes</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 查询errlog表记录</span>
- select * <span style="color: #0000ff;">from</span><span style="color: #000000;"> errlog;
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 删除触发器</span>
- drop trigger tri_after_insert_cmd;
三,事物
简述:
作用:保证了对数据操作的数据安全性
事物具有4个属性:
原子性(atomicity):指代事务是个不可分割的工作单位,也就说必须要全部完成某个操作,才算完成,如果其中有一个操作未完成,那么就是未完成该操作。
一致性(consistency):是说事物必须使数据库从一个一致性的状态变成另一个一致性的状态。与原子性密切相关。
隔离性(isolation):一个事物的执行或是操作,是不能被其它事务所影响的,也就是说事务与事务之间相互隔离的,也不互相干扰。
持久性durability):指代一个事务一旦提交给数据库,数据据将永久保存新数据,即使出故障也不应该对这个提交完成的事务有所影响。
代码如下:
- <span style="color: #000000;">create table user(
- id int primary key auto_increment,
- name char(</span>32<span style="color: #000000;">),
- balance int
- );
- insert into user(name,balance)
- values
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">wsb</span><span style="color: #800000;">‘</span>,1000<span style="color: #000000;">),
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>,1000<span style="color: #000000;">),
- (</span><span style="color: #800000;">‘</span><span style="color: #800000;">ysb</span><span style="color: #800000;">‘</span>,1000<span style="color: #000000;">);
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 修改数据之前先开启事务操作</span>
- <span style="color: #000000;">start transaction;
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 修改操作</span>
- update user set balance=900 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">wsb</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">买支付100元</span>
- update user set balance=1010 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">中介拿走10元</span>
- update user set balance=1090 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">ysb</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">卖家拿到90元</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> 回滚到上一个状态</span>
- <span style="color: #000000;">rollback;
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘</span>
- <span style="color: #000000;">commit;
- </span><span style="color: #800000;">"""</span><span style="color: #800000;">开启事务检测操作是否完整,不完整主动回滚到上一个状态,如果完整就应该执行commit操作</span><span style="color: #800000;">"""</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> 站在python代码的角度,应该实现的伪代码逻辑,</span>
- <span style="color: #0000ff;">try</span><span style="color: #000000;">:
- update user set balance</span>=900 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">wsb</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">买支付100元</span>
- update user set balance=1010 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">egon</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">中介拿走10元</span>
- update user set balance=1090 where name=<span style="color: #800000;">‘</span><span style="color: #800000;">ysb</span><span style="color: #800000;">‘</span>; <span style="color: #008000;">#</span><span style="color: #008000;">卖家拿到90元</span>
- <span style="color: #0000ff;">except</span><span style="color: #000000;"> 异常:
- rollback;
- </span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
- commit;</span>
四,存储过程
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql
第一种:
应用程序:只需要开发应用程序的逻辑
mysql:编写好存储过程,以供应用程序调用
优点:开发效率,执行效率都高
缺点:考虑到人为因素、跨部门沟通等问题,会导致扩展性差
第二种:
应用程序:除了开发应用程序的逻辑,还需要编写原生sql
优点:比方式1,扩展性高(非技术性的)
缺点:
1、开发效率,执行效率都不如方式1
2、编写原生sql太过于复杂,而且需要考虑到sql语句的优化问题
第三种:
应用程序:开发应用程序的逻辑,不需要编写原生sql,基于别人编写好的框架来处理数据,ORM
优点:不用再编写纯生sql,这意味着开发效率比方式2高,同时兼容方式2扩展性高的好处
缺点:执行效率连方式2都比不过
创建存储过程以及使用存储过程
- <span style="color: #000000;">delimiter $$
- create procedure p1(
- </span><span style="color: #0000ff;">in</span> m int, <span style="color: #008000;">#</span><span style="color: #008000;"> in表示这个参数必须只能是传入不能被返回出去</span>
- <span style="color: #0000ff;">in</span><span style="color: #000000;"> n int,
- out res int </span><span style="color: #008000;">#</span><span style="color: #008000;"> out表示这个参数可以被返回出去,还有一个inout表示即可以传入也可以被返回出去</span>
- <span style="color: #000000;">)
- begin
- select tname </span><span style="color: #0000ff;">from</span> teacher where tid > m <span style="color: #0000ff;">and</span> tid <<span style="color: #000000;"> n;
- set res</span>=<span style="color: #000000;">0;
- end $$
- delimiter ;</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> 大前提:存储过程在哪个库下面创建的只能在对应的库下面才能使用!!!</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> 1、直接在mysql中调用</span>
- set @res=10 <span style="color: #008000;">#</span><span style="color: #008000;"> res的值是用来判断存储过程是否被执行成功的依据,所以需要先定义一个变量@res存储10</span>
- call p1(2,4,10); <span style="color: #008000;">#</span><span style="color: #008000;"> 报错</span>
- call p1(2,4<span style="color: #000000;">,@res);
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 查看结果</span>
- select @res; <span style="color: #008000;">#</span><span style="color: #008000;"> 执行成功,@res变量值发生了变化</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> 2、在python程序中调用</span>
- <span style="color: #000000;">pymysql链接mysql
- 产生的游表cursor.callproc(</span><span style="color: #800000;">‘</span><span style="color: #800000;">p1</span><span style="color: #800000;">‘</span>,(2,4,10)) <span style="color: #008000;">#</span><span style="color: #008000;"> 内部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10;</span>
- cursor.excute(<span style="color: #800000;">‘</span><span style="color: #800000;">select @_p1_2;</span><span style="color: #800000;">‘</span><span style="color: #000000;">)
- </span><span style="color: #008000;">#</span><span style="color: #008000;"> 3、存储过程与事务使用举例(了解)</span>
- delimiter //<span style="color: #000000;">
- create PROCEDURE p5(
- OUT p_return_code tinyint
- )
- BEGIN
- DECLARE exit handler </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> sqlexception
- BEGIN
- </span>--<span style="color: #000000;"> ERROR
- set p_return_code </span>= 1<span style="color: #000000;">;
- rollback;
- END;
- DECLARE exit handler </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> sqlwarning
- BEGIN
- </span>--<span style="color: #000000;"> WARNING
- set p_return_code </span>= 2<span style="color: #000000;">;
- rollback;
- END;
- START TRANSACTION;
- update user set balance</span>=900 where id =1<span style="color: #000000;">;
- update user123 set balance</span>=1010 where id = 2<span style="color: #000000;">;
- update user set balance</span>=1090 where id =3<span style="color: #000000;">;
- COMMIT;
- </span>--<span style="color: #000000;"> SUCCESS
- set p_return_code </span>= 0; <span style="color: #008000;">#</span><span style="color: #008000;">0代表执行成功</span>
- <span style="color: #000000;">
- END </span>//<span style="color: #000000;">
- delimiter ;</span>
五,MySQL中的函数
- <span style="color: #000000;">、数学函数
- ROUND(x,y)
- 返回参数x的四舍五入的有y位小数的值
- RAND()
- 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
- 二、聚合函数(常用于GROUP BY从句的SELECT查询中)
- AVG(col)返回指定列的平均值
- COUNT(col)返回指定列中非NULL值的个数
- MIN(col)返回指定列的最小值
- MAX(col)返回指定列的最大值
- SUM(col)返回指定列的所有值之和
- GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果
- 三、字符串函数
- CHAR_LENGTH(str)
- 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
- CONCAT(str1,str2,...)
- 字符串拼接
- 如有任何一个参数为NULL ,则返回值为 NULL。
- CONCAT_WS(separator,str1,str2,...)
- 字符串拼接(自定义连接符)
- CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
- CONV(N,from_base,to_base)
- 进制转换
- 例如:
- SELECT CONV(</span><span style="color: #800000;">‘</span><span style="color: #800000;">a</span><span style="color: #800000;">‘</span>,16,2<span style="color: #000000;">); 表示将 a 由16进制转换为2进制字符串表示
- FORMAT(X,D)
- 将数字X 的格式写为</span><span style="color: #800000;">‘</span><span style="color: #800000;">#,###,###.##</span><span style="color: #800000;">‘</span><span style="color: #000000;">,以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
- 例如:
- SELECT FORMAT(</span>12332.1,4); 结果为: <span style="color: #800000;">‘</span><span style="color: #800000;">12,332.1000</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- INSERT(str,pos,len,newstr)
- 在str的指定位置插入字符串
- pos:要替换位置其实位置
- len:替换的长度
- newstr:新字符串
- 特别的:
- 如果pos超过原字符串长度,则返回原字符串
- 如果len超过原字符串长度,则由新字符串完全替换
- INSTR(str,substr)
- 返回字符串 str 中子字符串的第一个出现位置。
- LEFT(str,len)
- 返回字符串str 从开始的len位置的子序列字符。
- LOWER(str)
- 变小写
- UPPER(str)
- 变大写
- REVERSE(str)
- 返回字符串 str ,顺序和字符顺序相反。
- SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
- 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">Quadratically</span><span style="color: #800000;">‘</span>,5<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">ratically</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">foobarbar</span><span style="color: #800000;">‘</span> FROM 4<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">barbar</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">Quadratically</span><span style="color: #800000;">‘</span>,5,6<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">ratica</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">Sakila</span><span style="color: #800000;">‘</span>, -3<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">ila</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">Sakila</span><span style="color: #800000;">‘</span>, -5, 3<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">aki</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT SUBSTRING(<span style="color: #800000;">‘</span><span style="color: #800000;">Sakila</span><span style="color: #800000;">‘</span> FROM -4 FOR 2<span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">ki</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- 四、日期和时间函数
- CURDATE()或CURRENT_DATE() 返回当前的日期
- CURTIME()或CURRENT_TIME() 返回当前的时间
- DAYOFWEEK(date) 返回date所代表的一星期中的第几天(</span>1~7<span style="color: #000000;">)
- DAYOFMONTH(date) 返回date是一个月的第几天(</span>1~31<span style="color: #000000;">)
- DAYOFYEAR(date) 返回date是一年的第几天(</span>1~366<span style="color: #000000;">)
- DAYNAME(date) 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
- FROM_UNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts
- HOUR(time) 返回time的小时值(0</span>~23<span style="color: #000000;">)
- MINUTE(time) 返回time的分钟值(0</span>~59<span style="color: #000000;">)
- MONTH(date) 返回date的月份值(</span>1~12<span style="color: #000000;">)
- MONTHNAME(date) 返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
- NOW() 返回当前的日期和时间
- QUARTER(date) 返回date在一年中的季度(</span>1~4<span style="color: #000000;">),如SELECT QUARTER(CURRENT_DATE);
- WEEK(date) 返回日期date为一年中第几周(0</span>~53<span style="color: #000000;">)
- YEAR(date) 返回日期date的年份(</span>1000~9999<span style="color: #000000;">)
- 重点:
- DATE_FORMAT(date,format) 根据format字符串格式化date值
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">2009-10-04 22:23:00</span><span style="color: #800000;">‘</span>, <span style="color: #800000;">‘</span><span style="color: #800000;">%W %M %Y</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">Sunday October 2009</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">2007-10-04 22:23:00</span><span style="color: #800000;">‘</span>, <span style="color: #800000;">‘</span><span style="color: #800000;">%H:%i:%s</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">22:23:00</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">1900-10-04 22:23:00</span><span style="color: #800000;">‘</span><span style="color: #000000;">,
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">%D %y %a %d %m %b %j</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">4th 00 Thu 04 10 Oct 277</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">1997-10-04 22:23:00</span><span style="color: #800000;">‘</span><span style="color: #000000;">,
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">%H %k %I %r %T %S %w</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">22 22 10 10:23:00 PM 22:23:00 00 6</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">1999-01-01</span><span style="color: #800000;">‘</span>, <span style="color: #800000;">‘</span><span style="color: #800000;">%X %V</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">1998 52</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- mysql</span>> SELECT DATE_FORMAT(<span style="color: #800000;">‘</span><span style="color: #800000;">2006-06-00</span><span style="color: #800000;">‘</span>, <span style="color: #800000;">‘</span><span style="color: #800000;">%d</span><span style="color: #800000;">‘</span><span style="color: #000000;">);
- </span>-> <span style="color: #800000;">‘</span><span style="color: #800000;">00</span><span style="color: #800000;">‘</span><span style="color: #000000;">
- 五、加密函数
- MD5()
- 计算字符串str的MD5校验和
- PASSWORD(str)
- 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
- <br></span>
六,流程控制
- <span style="color: #008000;">#</span><span style="color: #008000;"> if条件语句</span>
- delimiter //<span style="color: #000000;">
- CREATE PROCEDURE proc_if ()
- BEGIN
- declare i int default 0;
- </span><span style="color: #0000ff;">if</span> i = 1<span style="color: #000000;"> THEN
- SELECT </span>1<span style="color: #000000;">;
- ELSEIF i </span>= 2<span style="color: #000000;"> THEN
- SELECT </span>2<span style="color: #000000;">;
- ELSE
- SELECT </span>7<span style="color: #000000;">;
- END IF;
- END </span>//<span style="color: #000000;">
- delimiter ;</span>
- <span style="color: #008000;">#</span><span style="color: #008000;"> while循环</span>
- delimiter //<span style="color: #000000;">
- CREATE PROCEDURE proc_while ()
- BEGIN
- DECLARE num INT ;
- SET num </span>=<span style="color: #000000;"> 0 ;
- WHILE num </span>< 10<span style="color: #000000;"> DO
- SELECT
- num ;
- SET num </span>= num + 1<span style="color: #000000;"> ;
- END WHILE ;
- END </span>//<span style="color: #000000;">
- delimiter ;</span>
七,索引
索引就是一种数据结构,类似于字典的目录,查询可通过索引。
索引在MySQL中也叫做‘键’,它的目的是方便存储引擎快速找到记录的数据。
索引的影响:
1.在表的数据量很大的前提下,那么创建索引的速度是非常慢的。
2.在索引创建完毕后,虽然对表的查询性能会大幅度提升,但是写的性能会降低。
聚集索引(primary key)
指的就是表的主键,在innodb引擎下一张表中必须要有主键,那么在这种引擎下建表的时候对应到硬盘上的文件,是索引跟数据都放在一起的。
辅助索引(unique key,index key)
辅助索引:查询数据的时候不可能都是用id作为筛选条件,也可能会用name,password等字段信息,那么这个时候就无法利用到聚集索引的加速查询效果。就需要给其他字段建立索引,这些索引就叫辅助索引
上述语句叫覆盖索引:只在辅助索引的叶子节点中就已经找到了所有我们想要的数据
select age from user where name=‘jason‘;
MySQL其他专业术语介绍
标签:循环 ica 单位 iter 过程 pytho 原子性 round 时间函数