数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

浏览目录

  • 视图

  • 触发器

  • 存储过程

  • 函数

  • 事务

  • 数据库锁

  • 数据库备份

  • 事件

一、视图

1、视图概念

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据.

2、视图特点

  • 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系
  • 视图是由基本表(实表)产生的表(虚表)
  • 视图的建立和删除不影响基本表
  • 对视图内容的更新(添加、删除和修改)直接影响基本表
  • 当视图来自多个基本表时,不允许添加,修改和删除数据

3、视图的本质

视图是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用“视图名称”即可获取结果集,可以将该结果集当做表来使用.

4、创建视图

1
create view 视图名称 as SQL语句;

5、使用视图

1
select * from 视图名称;

6、更新视图

1
alter view 视图名称 AS SQL语句;

7、删除视图

1
drop view 视图名称;

二、触发器

1、触发器概念

监视某种情况,并触发某种操作。

2、触发器创建语法四要素

  • 监视地点(table)
  • 监视事件(insert/update/delete)
  • 触发时间(after/before)
  • 触发事件(insert/update/delete)

3、创建语法

1
2
3
4
5
6
7
8
create trigger triggerName  after/before  insert/update/delete
     on 表名 for each row #这句话是固定的
begin
     #需要执行的sql语句
end
注意1:after/before只能选一个 ,after 表示后置触发, before 表示前置触发
注意2:insert/update/delete只能选一个
特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行

4、触发器的使用

触发器无法由用户直接调用,而知由于对表的insert/update/delete操作被动引发的。

5、删除触发器

1
drop trigger 触发器名称;

三、存储过程

1、存储过程概念

类似于函数(方法),简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集合, 
该语句集包括SQL语句(对数据的增删改查)、条件语句和循环语句等。

2、查看现有的存储过程

1
show procedure status;

3、删除存储过程

1
drop procedure 存储过程名称;

4、调用存储过程

1
call 存储过程名称(参数入/出类型 参数名 数据类型);

5、创建存储过程

  • 封装

1
2
3
4
create procedure p1 ()
        begin
             select * from account; 
         end
  • 参数

1
2
3
4
5
6
7
8
9
10
11
create procedure p2(in int,out n varchar(50))
begin
 select name into n from account where id = i;
end
 
-- 调用
set @name =null;
CALL p2(1,@name);
select @name;
注意:mysql中有三种出入参数类型,分别为:1in 入参类型 2、out 出参类型 3、inout 出入参类型
注意:into关键字可以将前面字段的查询结果执行给into后面的变量.
  • 控制

1
2
3
4
5
6
7
8
create procedure p3(in int,in c char(1))
begin
    if ='d' then
         select * from account where money >x;
    else
         select * from account where money <x;    
    end if;
end
  • 循环:

例-计算1-100累加的和,并且返回计算结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create procedure p4(inout n int)
begin
      DECLARE sum int default 0-- 设置总和变量,并且指定初始值0
      declare i int-- 声明变量
      set = 0;    -- 通过set为变量设置值
    while i<=n DO  -- 开始循环
            set sum = sum +i;
            set = i+1;
      end while-- 结束循环
    select sum-- 提供结果         
     set = sum;--将计算结果提供给 输出变量 n;
end;
 
-- 调用:
set @n = 100;
call p4(@n);
select @n;

6、存储过程优点

  • 存储过程增强了SQL语言灵活性。存储过程可以使用控制语句编写,可以完成复杂的判断和较复杂的运算,有很强的灵活性;
  • 减少网络流量,降低了网络负载。存储过程在服务器端创建成功后,只需要调用该存储过程即可,而传统的做法是每次都将大量的SQL语句通过网络发送至数据库服务器端然后再执行
  • 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译。一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

7、存储过程缺点

  • 扩展功能不方便
  • 不便于系统后期维护

四、函数

1、MySQL提供的内建函数

  1. 一、数学函数
  2. ROUND(x,y)
  3. 返回参数x的四舍五入的有y位小数的值
  4.  
  5. RAND()
  6. 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
  7.  
  8. 二、聚合函数(常用于GROUP BY从句的SELECT查询中)
  9. AVG(col)返回指定列的平均值
  10. COUNT(col)返回指定列中非NULL值的个数
  11. MIN(col)返回指定列的最小值
  12. MAX(col)返回指定列的最大值
  13. SUM(col)返回指定列的所有值之和
  14. GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果
  15.  
  16. 三、字符串函数
  17.  
  18. CHAR_LENGTH(str)
  19. 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
  20. CONCAT(str1,str2,...)
  21. 字符串拼接
  22. 如有任何一个参数为NULL ,则返回值为 NULL
  23. CONCAT_WS(separator,str1,str2,...)
  24. 字符串拼接(自定义连接符)
  25. CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
  26.  
  27. FORMAT(X,D)
  28. 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 0, 则返回结果不带有小数点,或不含小数部分。
  29. 例如:
  30. SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
  31.  
  32. INSERT(str,pos,len,newstr)
  33. str的指定位置插入字符串
  34. pos:要替换位置其实位置
  35. len:替换的长度
  36. newstr:新字符串
  37. 例如:
  38. SELECT INSERT('abcd',1,2,'tt'); 结果为: 'ttcd'
  39. SELECT INSERT('abcd',1,4,'tt'); 结果为: 'tt'
  40. 特别的:
  41. 如果pos超过原字符串长度,则返回原字符串
  42. 如果len超过原字符串长度,则由新字符串完全替换
  43.  
  44. INSTR(str,substr)
  45. 返回字符串 str 中子字符串的第一个出现位置。
  46.  
  47. LEFT(str,len)
  48. 返回字符串str 从开始的len位置的子序列字符。
  49. 例如:
  50. SELECT INSTR('abc','c'); 结果为: 3
  51. SELECT INSTR('abc','d'); 结果为: 0
  52.  
  53. LOWER(str)
  54. 变小写
  55.  
  56. UPPER(str)
  57. 变大写
  58.  
  59. REVERSE(str)
  60. 返回字符串 str ,顺序和字符顺序相反。
  61. 例如:
  62. SELECT REVERSE('') 结果为:7654321
  63.  
  64. SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
  65. 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
  66.  
  67. mysql> SELECT SUBSTRING('Quadratically',5); -- 从第5位开始截取
  68. -> 'ratically'
  69.  
  70. mysql> SELECT SUBSTRING('foobarbar' FROM 4); -- 从第4位开始截取
  71. -> 'barbar'
  72.  
  73. mysql> SELECT SUBSTRING('Quadratically',5,6); --从第5位开始截取,截取6个长度
  74. -> 'ratica'
  75.  
  76. mysql> SELECT SUBSTRING('Sakila', -3); -- 从倒数第3位开始截取
  77. -> 'ila'
  78.  
  79. mysql> SELECT SUBSTRING('Sakila', -5, 3); -- 从倒数第5位开始截取,截取3个长度
  80. -> 'aki'
  81.  
  82. 四、日期和时间函数
  83. CURDATE()或CURRENT_DATE() 返回当前的日期
  84. CURTIME()或CURRENT_TIME() 返回当前的时间
  85. DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)
  86. DAYOFMONTH(date) 返回date是一个月的第几天(1~31)
  87. DAYOFYEAR(date) 返回date是一年的第几天(1~366)
  88. DAYNAME(date) 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
  89. FROM_UNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts
  90. HOUR(time) 返回time的小时值(0~23)
  91. MINUTE(time) 返回time的分钟值(0~59)
  92. MONTH(date) 返回date的月份值(1~12)
  93. MONTHNAME(date) 返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
  94. NOW() 返回当前的日期和时间
  95. QUARTER(date) 返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
  96. WEEK(date) 返回日期date为一年中第几周(0~53)
  97. YEAR(date) 返回日期date的年份(1000~9999)
  98.  
  99. 重点:
  100. DATE_FORMAT(date,format) 根据format字符串格式化date
  101.  
  102. mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
  103. -> 'Sunday October 2009'
  104. mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
  105. -> '22:23:00'
  106. mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
  107. -> '%D %y %a %d %m %b %j');
  108. -> '4th 00 Thu 04 10 Oct 277'
  109. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
  110. -> '%H %k %I %r %T %S %w');
  111. -> '22 22 10 10:23:00 PM 22:23:00 00 6'
  112. mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
  113. -> '1998 52'
  114. mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
  115. -> ''
  116.  
  117. 五、加密函数
  118. MD5()
  119. 计算字符串strMD5校验和
  120. 例如:
  121. SELECT MD5('') 结果为:81dc9bdb52d04dc20036dbd8313ed055
  122. PASSWORD(str)
  123. 返回字符串str的加密版本,这个加密过程是不可逆转的
  124. 例如:
  125. SELECT PASSWORD('') 结果为:*A4B6157319038724E3560894F7F932C8886EBFCF
  126.  
  127. 六、控制流函数
  128. CASE WHEN[test1] THEN [result1]...ELSE [default] END
  129. 如果testN是真,则返回resultN,否则返回default
  130. CASE [test] WHEN[val1] THEN [result]...ELSE [default]END
  131. 如果testvalN相等,则返回resultN,否则返回default
  132.  
  133. IF(test,t,f)
  134. 如果test是真,返回t;否则返回f
  135.  
  136. IFNULL(arg1,arg2)
  137. 如果arg1不是空,返回arg1,否则返回arg2
  138. 例如:
  139. SELECT IFNULL('bbb','abc'); 结果为: bbb
  140. SELECT IFNULL(null,'abc'); 结果为: abc
  141.  
  142. NULLIF(arg1,arg2)
  143. 如果arg1=arg2返回NULL;否则返回arg1
  144. 例如:
  145. SELECT NULLIF('bbb','bbb');结果为: null
  146. SELECT NULLIF('aaa','bbb');结果为: aaa 

2、自定义函数

1
2
3
4
5
6
7
CREATE FUNCTION fun1(i1 int,i2 int)
RETURNS INT //设置返回类型
BEGIN
    DECLARE sum int default 0;
    set sum = i1+i2;
    RETURN(sum); //返回结果
END

3、调用自定义函数

1
2
3
4
5
#直接调用自定义函数
select fun1(1,5);
 
#在sql语句中使用自定义函数
select fun1(参数1,参数2),name from 表名

4、删除自定义函数

1
DROP FUNCTION fun_name;

5、函数与存储过程的区别

函数 存储过程
一般用于计算数据 完成特定任务
声明为 FUNCTION 声明为 PROCEDURE
需要描述返回类型,且PL/SQL块中至少有一个有效的RETURN语句 无返回类型,可通过IN、OUT、INOUT参数返回多个值
不能独立运行,必须作为表达式的一部分 可作为一个独立的PL/SQL语句运行
在 DML 和 DQL 中可调用函数 在 DML 和 DQL 中不可调用过程

函数接收参数,并返回一个值。

存储过程接收参数,并创造一个返回值,还可以执行sql语句,并把结果返回。

五、事务

1、事务概念

一组SQL语句批量执行,要么全部执行成功,要么全部执行失败

2、事务的作用

为了解决如今多用户、多程序、多线程情况下对同一个表可能同时有很多人在用,为保持数据的一致性,所以有了事务的概念。

3、事务的特性

  • 原子性(Atom):对于其数据修改,要么全都执行,要么全都不执行。
  • 一致性(Consistent):数据库原来有什么样的约束,事务执行之后还需要存在这样的约束,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
  • 隔离性(Isolate):一个事务不能知道另外一个事务的执行情况(中间状态)
  • 持久性(Durable):即使出现致命的系统故障也将一直保持。
  • 注意: 
      • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
      • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
      • 事务用来管理 insert/update/delete 语句

4、事务控制语句

  • BEGIN 或 START TRANSACTION;显式地开启一个事务;
  • COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
  • ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
  • SAVEPOINT : 保存点,可以把一个事物分割成几部分.在执行ROLLBACK时可以指定在什么位置上进行回滚操作.
  • 注意: SET AUTOCOMMIT=0禁止自动提交和SET AUTOCOMMIT=1开启自动提交.

六、数据库锁

1、锁的基本概念

当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。

2、锁的基本类型

    • 多个事务同时读取一个对象的时候,是不会有冲突的。同时读和写,或者同时写才会产生冲突。 
      因此为了提高数据库的并发性能,通常会定义两种锁:共享锁和排它锁。
    • 共享锁(Shared Lock,也叫S锁) 
      共享锁(S)表示对数据进行读操作。因此多个事务可以同时为一个对象加共享锁。 
      (如果试衣间的门还没被锁上,顾客都能够同时进去参观)
    • 排他锁(Exclusive Lock,也叫X锁) 
      排他锁(X)表示对数据进行写操作。如果一个事务对 对象加了排他锁,其他事务就不能再给它加任何锁了。 
      (某个顾客把试衣间从里面反锁了,其他顾客想要使用这个试衣间,就只有等待锁从里面给打开了)

3、实际开发中常见的两种锁

    • 悲观锁 
      行为悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block(阻塞)直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制. 
      注意:要使用悲观锁,我们必须关闭mysql数据库的自动提交属性.因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果进行提交。关闭自动提交命令为:set autocommit=0; 
      注意:在使用悲观锁时,如果表中没有指定主键,则会进行锁表操作. 
      注意: 悲观锁的确保了数据的安全性,在数据被操作的时候锁定数据不被访问,但是这样会带来很大的性能问题。 
      因此悲观锁在实际开发中使用是相对比较少的。  
    • 乐观锁(需要自行实现) 
      行为乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。 
    • 实现的两种方式: 
      • 使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录 的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。
      • 同样是在需要乐观锁控制的table中增加一个字段,名称无所谓,字段类型使用时间戳 (datatime), 和上面的version类似,也是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突。

4、悲观锁类乐观锁的优缺点

  • 乐观锁适用于写入比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量
  • 但如果经常产生冲突,上层应用会不断的进行重试操作,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适

锁的用法示例

1
2
3
4
5
6
7
8
9
- 终端:
    begin;
    select xx from xx for update; #必须加
    commit;
- pymysql
    cursor.execute('select * from xx for update')
- django  #事务
    with trancation.automic():
        models.User.objects.all().for_update()

七、数据库备份

1、mysqldump命令实现备份

mysqldump 命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。 
mysqldump命令的工作原理很简单。它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。 
然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。

2、使用mysqldump实现逻辑备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#语法:
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
 
#示例:
#单库备份
mysqldump -uroot -p123456 db1 > c:/db1.sql
mysqldump -uroot -p123456 db1 table1 table2 > c:/db1-table1-table2.sql
 
#多库备份
mysqldump -uroot -p123456 --databases db1 db2 mysql db3 > c:/db1_db2_mysql_db3.sql
 
#备份所有库
mysqldump -uroot -p123456 --all-databases > c:/all.sql
 
注意:可能MySQL5.7的用户在使用mysqldump备份时会报错 mysqldump: unkown option '--no-beep',处理办法如下:
1. 删除my.ini [client]下的 no-beep 参数;
2. 在 mysqldump 后加--no-defaults参数,即:mysqldump --no-defualts -h主机IP -u用户名 -p密码 数据库 > xxx.sql  

3、恢复逻辑备份

1
2
3
4
5
#在mysql命令下,用source命令导入备份文件:
mysql>  USE 数据库名;
mysql>  source 备份文件.sql;
 
注意:只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令,会报错,因为cmd是直接调用mysql.exe来执行命令的。  

4、Mysqldump命令补充

  1. --all-databases , -A
  2. 导出全部数据库。
  3. mysqldump -uroot -p --all-databases
  4. --all-tablespaces , -Y
  5. 导出全部表空间。
  6. mysqldump -uroot -p --all-databases --all-tablespaces
  7. --no-tablespaces , -y
  8. 不导出任何表空间信息。
  9. mysqldump -uroot -p --all-databases --no-tablespaces
  10. --add-drop-database
  11. 每个数据库创建之前添加drop数据库语句。
  12. mysqldump -uroot -p --all-databases --add-drop-database
  13. --add-drop-table
  14. 每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
  15. mysqldump -uroot -p --all-databases (默认添加drop语句)
  16. mysqldump -uroot -p --all-databases skip-add-drop-table (取消drop语句)
  17. --add-locks
  18. 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
  19. mysqldump -uroot -p --all-databases (默认添加LOCK语句)
  20. mysqldump -uroot -p --all-databases skip-add-locks (取消LOCK语句)
  21. --allow-keywords
  22. 允许创建是关键词的列名字。这由表名前缀于每个列名做到。
  23. mysqldump -uroot -p --all-databases --allow-keywords
  24. --apply-slave-statements
  25. 'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'
  26. mysqldump -uroot -p --all-databases --apply-slave-statements
  27. --character-sets-dir
  28. 字符集文件的目录
  29. mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets
  30. --comments
  31. 附加注释信息。默认为打开,可以用--skip-comments取消
  32. mysqldump -uroot -p --all-databases (默认记录注释)
  33. mysqldump -uroot -p --all-databases --skip-comments (取消注释)
  34. --compatible
  35. 导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansimysql323mysql40postgresqloraclemssqldb2maxdbno_key_optionsno_tables_optionsno_field_options等,
  36. 要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。
  37. mysqldump -uroot -p --all-databases --compatible=ansi
  38. --compact
  39. 导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
  40. mysqldump -uroot -p --all-databases --compact
  41. --complete-insert, -c
  42. 使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
  43. mysqldump -uroot -p --all-databases --complete-insert
  44. --compress, -C
  45. 在客户端和服务器之间启用压缩传递所有信息
  46. mysqldump -uroot -p --all-databases --compress
  47. --create-options, -a
  48. CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)
  49. mysqldump -uroot -p --all-databases
  50. --databases, -B
  51. 导出几个数据库。参数后面所有名字参量都被看作数据库名。
  52. mysqldump -uroot -p --databases test mysql
  53. --debug
  54. 输出debug信息,用于调试。默认值为:d:t,/tmp/mysqldump.trace
  55. mysqldump -uroot -p --all-databases --debug
  56. mysqldump -uroot -p --all-databases --debug=” d:t,/tmp/debug.trace
  57. --debug-check
  58. 检查内存和打开文件使用说明并退出。
  59. mysqldump -uroot -p --all-databases --debug-check
  60. --debug-info
  61. 输出调试信息并退出
  62. mysqldump -uroot -p --all-databases --debug-info
  63. --default-character-set
  64. 设置默认字符集,默认值为utf8
  65. mysqldump -uroot -p --all-databases --default-character-set=utf8
  66. --delayed-insert
  67. 采用延时插入方式(INSERT DELAYED)导出数据
  68. mysqldump -uroot -p --all-databases --delayed-insert
  69. --delete-master-logs
  70. master备份后删除日志. 这个参数将自动激活--master-data
  71. mysqldump -uroot -p --all-databases --delete-master-logs
  72. --disable-keys
  73. 对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。
  74. mysqldump -uroot -p --all-databases
  75. --dump-slave
  76. 该选项将主的binlog位置和文件名追加到导出数据的文件中(show slave status)。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0
  77. mysqldump -uroot -p --all-databases --dump-slave=1
  78. mysqldump -uroot -p --all-databases --dump-slave=2
  79. --master-data
  80. 该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。
  81. mysqldump -uroot -p --host=localhost --all-databases --master-data=1;
  82. mysqldump -uroot -p --host=localhost --all-databases --master-data=2;
  83. --events, -E
  84. 导出事件。
  85. mysqldump -uroot -p --all-databases --events
  86. --extended-insert, -e
  87. 使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。
  88. mysqldump -uroot -p --all-databases
  89. mysqldump -uroot -p --all-databases--skip-extended-insert (取消选项)
  90. --fields-terminated-by
  91. 导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项
  92. mysqldump -uroot -p test test --tab=”/home/mysql --fields-terminated-by=”#”
  93. --fields-enclosed-by
  94. 输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项
  95. mysqldump -uroot -p test test --tab=”/home/mysql --fields-enclosed-by=”#”
  96. --fields-optionally-enclosed-by
  97. 输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项
  98. mysqldump -uroot -p test test --tab=”/home/mysql --fields-enclosed-by=”#” --fields-optionally-enclosed-by =”#”
  99. --fields-escaped-by
  100. 输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项
  101. mysqldump -uroot -p mysql user --tab=”/home/mysql --fields-escaped-by=”#”
  102. --flush-logs
  103. 开始导出之前刷新日志。
  104. 请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs
  105. mysqldump -uroot -p --all-databases --flush-logs
  106. --flush-privileges
  107. 在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。
  108. mysqldump -uroot -p --all-databases --flush-privileges
  109. --force
  110. 在导出过程中忽略出现的SQL错误。
  111. mysqldump -uroot -p --all-databases --force
  112. --help
  113. 显示帮助信息并退出。
  114. mysqldump --help
  115. --hex-blob
  116. 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARYVARBINARYBLOB
  117. mysqldump -uroot -p --all-databases --hex-blob
  118. --host, -h
  119. 需要导出的主机信息
  120. mysqldump -uroot -p --host=localhost --all-databases
  121. --ignore-table
  122. 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
  123. mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user
  124. --include-master-host-port
  125. 在--dump-slave产生的'CHANGE MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'
  126. mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port
  127. --insert-ignore
  128. 在插入行时使用INSERT IGNORE语句.
  129. mysqldump -uroot -p --host=localhost --all-databases --insert-ignore
  130. --lines-terminated-by
  131. 输出文件的每行用给定字符串划分。与--tab选项一起使用,不能用于--databases和--all-databases选项。
  132. mysqldump -uroot -p --host=localhost test test --tab=”/tmp/mysql --lines-terminated-by=”##”
  133. --lock-all-tables, -x
  134. 提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
  135. mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables
  136. --lock-tables, -l
  137. 开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDBBDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。
  138. 请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。
  139. mysqldump -uroot -p --host=localhost --all-databases --lock-tables
  140. --log-error
  141. 附加警告和错误信息到给定文件
  142. mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err
  143. --max_allowed_packet
  144. 服务器发送和接受的最大包长度。
  145. mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240
  146. --net_buffer_length
  147. TCP/IPsocket连接的缓存大小。
  148. mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024
  149. --no-autocommit
  150. 使用autocommit/commit 语句包裹表。
  151. mysqldump -uroot -p --host=localhost --all-databases --no-autocommit
  152. --no-create-db, -n
  153. 只导出数据,而不添加CREATE DATABASE 语句。
  154. mysqldump -uroot -p --host=localhost --all-databases --no-create-db
  155. --no-create-info, -t
  156. 只导出数据,而不添加CREATE TABLE 语句。
  157. mysqldump -uroot -p --host=localhost --all-databases --no-create-info
  158. --no-data, -d
  159. 不导出任何数据,只导出数据库表结构。
  160. mysqldump -uroot -p --host=localhost --all-databases --no-data
  161. --no-set-names, -N
  162. 等同于--skip-set-charset
  163. mysqldump -uroot -p --host=localhost --all-databases --no-set-names
  164. --opt
  165. 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用.
  166. mysqldump -uroot -p --host=localhost --all-databases --opt
  167. --order-by-primary
  168. 如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。
  169. mysqldump -uroot -p --host=localhost --all-databases --order-by-primary
  170. --password, -p
  171. 连接数据库密码
  172. --pipe(windows系统可用)
  173. 使用命名管道连接mysql
  174. mysqldump -uroot -p --host=localhost --all-databases --pipe
  175. --port, -P
  176. 连接数据库端口号
  177. --protocol
  178. 使用的连接协议,包括:tcp, socket, pipe, memory.
  179. mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp
  180. --quick, -q
  181. 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
  182. mysqldump -uroot -p --host=localhost --all-databases
  183. mysqldump -uroot -p --host=localhost --all-databases --skip-quick
  184. --quote-names,-Q
  185. 使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
  186. mysqldump -uroot -p --host=localhost --all-databases
  187. mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names
  188. --replace
  189. 使用REPLACE INTO 取代INSERT INTO.
  190. mysqldump -uroot -p --host=localhost --all-databases --replace
  191. --result-file, -r
  192. 直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。
  193. mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt
  194. --routines, -R
  195. 导出存储过程以及自定义函数。
  196. mysqldump -uroot -p --host=localhost --all-databases --routines
  197. --set-charset
  198. 添加'SET NAMES default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。
  199. mysqldump -uroot -p --host=localhost --all-databases
  200. mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset
  201. --single-transaction
  202. 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。
  203. mysqldump -uroot -p --host=localhost --all-databases --single-transaction
  204. --dump-date
  205. 将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。
  206. mysqldump -uroot -p --host=localhost --all-databases
  207. mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date
  208. --skip-opt
  209. 禁用–opt选项.
  210. mysqldump -uroot -p --host=localhost --all-databases --skip-opt
  211. --socket,-S
  212. 指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock
  213. mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock
  214. --tab,-T
  215. 为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。注意使用--tab不能指定--databases参数
  216. mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"
  217. --tables
  218. 覆盖--databases (-B)参数,指定需要导出的表名,在后面的版本会使用table取代tables。
  219. mysqldump -uroot -p --host=localhost --databases test --tables test
  220. --triggers
  221. 导出触发器。该选项默认启用,用--skip-triggers禁用它。
  222. mysqldump -uroot -p --host=localhost --all-databases --triggers
  223. --tz-utc
  224. 在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。
  225. mysqldump -uroot -p --host=localhost --all-databases --tz-utc
  226. --user, -u
  227. 指定连接的用户名。
  228. --verbose, --v
  229. 输出多种平台信息。
  230. --version, -V
  231. 输出mysqldump版本信息并退出
  232. --where, -w
  233. 只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。
  234. mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”
  235. --xml, -X
  236. 导出XML格式.
  237. mysqldump -uroot -p --host=localhost --all-databases --xml
  238. --plugin_dir
  239. 客户端插件的目录,用于兼容不同的插件版本。
  240. mysqldump -uroot -p --host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”
  241. --default_auth
  242. 客户端插件默认使用权限。
  243. mysqldump -uroot -p --host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/<PLUGIN>”  

八、事件

1、事件

  • 事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
  • 事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。
  • 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。

2、事件的优缺点

    • 优点

      • 一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
      • 可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
    • 缺点 
      • 定时触发,不可以调用。

3、事件的创建

  • 一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(event schedule),表示事件何时启动以及按什么频率启动,第二部分是事件动作(event action),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者 begin…end语句块,这两种情况允许我们执行多条SQL。一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。
  • 创建语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;
 
schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
 
interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} 
  1. 名词解释:
  2. event_name :创建的event名字(唯一确定的)。
  3. ON SCHEDULE:计划任务。
  4. schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 ATEVERY
  5. [ON COMPLETION [NOT] PRESERVE]:可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉。
  6. [COMMENT comment’] :可选项,comment 用来描述event;相当注释,最大长度64个字节。
  7. [ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改
  8. DO event_body: 需要执行的sql语句(可以是复合语句)。CREATE EVENT在存储过程中使用时合法的。
  • 开启关闭事件调度器

    • MySQL事件调度器event_scheduler负责调用事件,它默认是关闭的。这个调度器不断地监视一个事件是否要调用, 要创建事件,必须打开调度器。

查看调度器命令:

1
mysql> show variables like '%event_scheduler%';
    • 开启事件调度器(以下任一方式均可)

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

SET GLOBAL event_scheduler = 1;

SET @@global.event_scheduler = 1;

1
event_scheduler = 1 #或者ON
    • 查看调度器线程  
1
mysql> show processlist;
    • 关闭事件调度器(以下任一方式均可)

SET GLOBAL event_scheduler = OFF; 
SET @@global.event_scheduler = OFF; 
SET GLOBAL event_scheduler = 0; 
SET @@global.event_scheduler = 0; 
通过配置文件my.cnf,在[mysqld]下增加:

1
event_scheduler = 0 #或者OFF,DISABLED
    • 查看调度器线程
1
mysql> show processlist;
    • 例:创建一个表记录每次事件调度的名字和事件戳
1
2
3
#创建测试表
    mysql> drop table if exists events_list;
    mysql> create table events_list(event_name varchar(20not null, event_started timestamp not null);
  • 例:创建一个表记录每次事件调度的名字和事件戳
1
2
3
4
5
6
7
#创建事件1(立即启动事件)
    create event event_now 
    on schedule 
    at now() 
    do insert into events_list values('event_now', now()); 
#查看事件执行结果
    mysql> select * from events_list; 
  • 例:创建一个表记录每次事件调度的名字和事件戳
1
2
3
4
5
6
7
#创建事件2(每分钟启动事件)
    create event test.event_minute 
    on schedule 
    every  1 minute  
    do insert into events_list values('event_now', now()); 
#查看事件执行结果
    mysql> select * from events_list;  
  • 例:创建一个表记录每次事件调度的名字和事件戳
1
2
3
4
5
#创建事件3(每秒钟启动事件)
    CREATE event event_now 
    ON SCHEDULE 
    EVERY 1 SECOND
    DO INSERT INTO event_test VALUES(1); 
  • 例:创建一个表记录每次事件调度的名字和事件戳
1
2
3
4
# 创建事件4(每秒钟调用存储过程)
   CREATE DEFINER=`root`@`localhost` EVENT `eventUpdateStatus`
   ON SCHEDULE EVERY 1 SECOND
   STARTS '2017-11-21 00:12:44' ON COMPLETION PRESERVE ENABLE DO call updateStatus()
  • 注意  

默认创建事件存储在当前库中,也可显示指定事件创建在哪个库中 
通过show events只能查看当前库中创建的事件 
事件执行完即释放,如立即执行事件,执行完后,事件便自动删除,多次调用事件或等待执行事件可以查看到。 
如果两个事件需要在同一时刻调用,mysql会确定调用他们的顺序,如果要指定顺序,需要确保一个事件至少在另一个事件1秒后执行 
对于递归调度的事件,结束日期不能在开始日期之前。 
select可以包含在一个事件中,然而他的结果消失了,就好像没执行过。   

4、事件的查看

  • 查看当前所在库的事件
1
mysql> show events;
  • 查看所有事件
1
mysql> select * from mysql.event;

5、事件的修改

  • 一条alter event语句可以修改事件的定义和属性。我们可以让一个事件成为停止的或者再次让它活动,也可以修改一个事件的名字或者整个调度。然而当一个使用 ON COMPLETION NOT PRESERVE 属性定义的事件最后一次执行后,事件直接就不存在了,不能修改。
  • 语法
1
2
3
4
5
6
7
8
9
ALTER
    [DEFINER = { user | CURRENT_USER }]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    [DO event_body] 
  • 例:修改上面例子3.3.3 每分钟启动事件为每30秒启动
1
2
3
4
alter event test.event_minute
on schedule 
every  30 second  
do insert into events_list values('event_now', now());
  • 修改上面例子事件名字为event_second
1
2
alter event test.event_minute 
rename to test.event_second;
  • 修改上面例子事件为不活动和再次活动
1
2
alter event test.event_second disable;
alter event test.event_second enable;    

6、事件的删除

  • 如果一个事件不再需要,我们可以使用一条drop event 语句删除它。使用这条语句我们不需要等到最后一次事件调用。
  • 语法
1
DROP EVENT [IF EXISTS] event_name
1
drop event if exists event_second;

数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件的更多相关文章

  1. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  2. Mysql 视图,触发器,存储过程,函数,事务

    视图 视图虚拟表,是一个我们真实查询结果表,我们希望将某次查询出来的结果作为单独的一个表,就叫视图,无法对图字段内容进行增删改. --格式: CREATE VIEW 视图名字 AS 操作; --比如: ...

  3. Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

  4. MySQL 索引 视图 触发器 存储过程 函数

    1.索引 索引相当于图书的目录,可以帮助用户快速的找到需要的内容. 数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万 ...

  5. day40 mycql 视图,触发器,存储过程,函数

    视图,触发器,存储过程,自定义函数 -- 回顾 1.mysql 约束 1.非空 not null 2. 主键约束 primary key 3. 唯一约束 unique 4. 外键约束 foreign ...

  6. python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数

    python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...

  7. MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式

    视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...

  8. python数据库MySQL之视图,触发器,事务,存储过程,函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  9. mysql视图 触发器 事物 函数 存储过程

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

随机推荐

  1. 笔记:开源协议 Apache 2 和 GPL 兼容

    笔记:开源协议 Apache 2 和 GPL 兼容 Apache 2 和 GPL v3 兼容. GPL 分了很多版本,LGPL 为最宽松的 GPL,而 AGPL 为最严格的 GPL 协议. Linux ...

  2. Hibernate 查询语句用法记录

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

  3. mysql 创建用户自定义函数(转可运行)

    set global log_bin_trust_function_creators = 1; -- 开启bin_log 复制 函数创建DROP FUNCTION IF EXISTS hello; - ...

  4. 插耳机对orientation sensor的影响

    偶然发现,耳机孔插上耳机对手机的磁感应器有非常大的影响. 具体影响的方式和解决的方法,慢慢研究下

  5. win7 安装过程中遇到的错误解决方法

    win7 安装过程中遇到的错误解决方法 windows安装无法继续.若要安装windows 请单击 确定 重新启动计算机: 当 出现如上提示的时候,按下shift+f10 会打开命令窗口,进入到C:\ ...

  6. 小程序切换账户拉取仓库文件的appid提示

    小程序切换账户拉取仓库文件,拉取后appid会提示项目不是当前appid的项目,因为切换了账户,而每个小程序账户只有一个appid,所以会冲突 去project.config.json里吧appid改 ...

  7. (转)Oracle存储过程中的事务

    本文转载自:http://www.cnblogs.com/linjiqin/archive/2011/04/18/2019990.html 1.事务用于确保数据的一致性,由一组相关的DML语句组成,该 ...

  8. 1078 Hashing

    题意:给出表长和待插入的元素,求每个元素的插入位置,散列函数为H(key)=key%TSize,解决冲突利用平方探测法(只考虑正向偏移). 思路:同1145 Hashing - Average Sea ...

  9. xunsearch搜索使用

    目录 如何开始搜索? 典型处理 快捷操作 搜索中的串接操作 构建搜索语句 如何开始搜索? <?php // 引入 require_once './sdk/xs/lib/XS.php'; // 创 ...

  10. C Primer Plus学习笔记(十一)- 存储类别、链接和内存管理

    存储类别 从硬件方面来看,被储存的每个值都占用一定的物理内存,C 语言把这样的一块内存称为对象(object) 对象可以储存一个或多个值.一个对象可能并未储存实际的值,但是它在储存适当的值时一定具有相 ...