2 数据约束

2.1什么数据约束

​ 对用户操作表的数据进行约束

2.2 默认值

作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。

注意:

1)对默认值字段插入null是可以的。

2)对默认值字段可以插入非null

  1. -- 1.1 默认值
  2. CREATE TABLE student(
  3. id INT,
  4. NAME VARCHAR(20),
  5. address VARCHAR(20) DEFAULT '广州天河' -- 默认值
  6. )
  7. DROP TABLE student;
  8. -- 当字段没有插入值的时候,mysql自动给该字段分配默认值
  9. INSERT INTO student(id,NAME) VALUES(1,'张三');
  10. -- 注意:默认值的字段允许为null
  11. INSERT INTO student(id,NAME,address) VALUE(2,'李四',NULL);
  12. INSERT INTO student(id,NAME,address) VALUE(3,'王五','广州番禺');

2.3 非空

作用: 限制字段必须赋值

注意:

1)非空字符必须赋值

2)非空字符不能赋null

  1. -- 1.2 非空
  2. -- 需求: gender字段必须有值(不为null
  3. CREATE TABLE student(
  4. id INT,
  5. NAME VARCHAR(20),
  6. gender VARCHAR(2) NOT NULL -- 非空
  7. )
  8. -- 非空字段必须赋值
  9. INSERT INTO student(id,NAME) VALUES(1,'李四');
  10. -- 非空字符不能插入null
  11. INSERT INTO student(id,NAME,gender) VALUES(1,'李四',NULL);

2.4 唯一

作用: 对字段的值不能重复

注意:

1)唯一字段可以插入null

2)唯一字段可以插入多个null

  1. -- 1.3 唯一
  2. CREATE TABLE student(
  3. id INT UNIQUE, -- 唯一
  4. NAME VARCHAR(20)
  5. )
  6. INSERT INTO student(id,NAME) VALUES(1,'zs');
  7. INSERT INTO student(id,NAME) VALUES(1,'lisi'); -- ERROR 1062 (23000): Duplicate entry '1' for key 'id'
  8. INSERT INTO student(id,NAME) VALUES(2,'lisi');

2.5 主键

作用: 非空+唯一

注意:

1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。

  1. -- 1.4 主键(非空+唯一)
  2. DROP TABLE student;
  3. CREATE TABLE student(
  4. id INT PRIMARY KEY, -- 主键
  5. NAME VARCHAR(20)
  6. )
  7. INSERT INTO student(id,NAME) VALUES(1,'张三');
  8. INSERT INTO student(id,NAME) VALUES(2,'张三');
  9. -- INSERT INTO student(id,NAME) VALUES(1,'李四'); -- 违反唯一约束: Duplicate entry '1' for key 'PRIMARY'
  10. -- insert into student(name) value('李四'); -- 违反非空约束: ERROR 1048 (23000): Column 'id' cannot be null

2.6 自增长

​ 作用:自动递增

  1. -- 1.5 自增长
  2. CREATE TABLE student(
  3. id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始 ZEROFILL 零填充
  4. NAME VARCHAR(20)
  5. )
  6. -- 自增长字段可以不赋值,自动递增
  7. INSERT INTO student(NAME) VALUES('张三');
  8. INSERT INTO student(NAME) VALUES('李四');
  9. INSERT INTO student(NAME) VALUES('王五');
  10. SELECT * FROM student;
  11. -- 不能影响自增长约束
  12. DELETE FROM student;
  13. -- 可以影响自增长约束
  14. TRUNCATE TABLE student;

2.7 外键

作用:约束两种表的数据

出现两种表的情况:

解决数据冗余高问题: 独立出一张表

例如: 员工表 和 部门表

问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入!!!!!

使用外键约束:约束插入员工表的部门ID字段值

解决办法: 在员工表的部门ID字段添加一个外键约束

  1. -- 部门表(主表)
  2. CREATE TABLE dept(
  3. id INT PRIMARY KEY,
  4. deptName VARCHAR(20)
  5. )
  6. -- 修改员工表(副表/从表)
  7. CREATE TABLE employee(
  8. id INT PRIMARY KEY,
  9. empName VARCHAR(20),
  10. deptId INT,-- 把部门名称改为部门ID
  11. -- 声明一个外键约束
  12. CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
  13. -- 外键名称 外键 参考表(参考字段)
  14. )

注意:

1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

2)主表的参考字段通用为主键!

3)添加数据: 先添加主表,再添加副表

4)修改数据: 先修改副表,再修改主表

5)删除数据: 先删除副表,再删除主表

  1. -- 1.6 外键约束
  2. -- 员工表
  3. CREATE TABLE employee(
  4. id INT PRIMARY KEY,
  5. empName VARCHAR(20),
  6. deptName VARCHAR(20) -- 部门名称
  7. )
  8. INSERT INTO employee VALUES(1,'张三','软件开发部');
  9. INSERT INTO employee VALUES(2,'李四','软件开发部');
  10. INSERT INTO employee VALUES(3,'王五','应用维护部');
  11. SELECT * FROM employee;
  12. -- 添加员工,部门名称的数据冗余高
  13. INSERT INTO employee VALUES(4,'陈六','软件开发部');
  14. -- 解决数据冗余高的问题:给冗余的字段放到一张独立表中
  15. -- 独立设计一张部门表
  16. CREATE TABLE dept(
  17. id INT PRIMARY KEY,
  18. deptName VARCHAR(20)
  19. )
  20. DROP TABLE employee;
  21. -- 修改员工表
  22. CREATE TABLE employee(
  23. id INT PRIMARY KEY,
  24. empName VARCHAR(20),
  25. deptId INT,-- 把部门名称改为部门ID
  26. -- 声明一个外键约束
  27. CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :级联修改
  28. -- 外键名称 外键 参考表(参考字段)
  29. )
  30. INSERT INTO dept(id,deptName) VALUES(1,'软件开发部');
  31. INSERT INTO dept(id,deptName) VALUES(2,'应用维护部');
  32. INSERT INTO dept(id,deptName) VALUES(3,'秘书部');
  33. INSERT INTO employee VALUES(1,'张三',1);
  34. INSERT INTO employee VALUES(2,'李四',1);
  35. INSERT INTO employee VALUES(3,'王五',2);
  36. INSERT INTO employee VALUES(4,'陈六',3);
  37. -- 问题: 该记录业务上不合法,员工插入了一个不存在的部门数据
  38. INSERT INTO employee VALUES(5,'陈六',4); -- 违反外键约束: Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`))
  39. -- 1)当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据
  40. -- 2)当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据
  41. -- 3)当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据
  42. -- 修改部门(不能直接修改主表)
  43. UPDATE dept SET id=4 WHERE id=3;
  44. -- 先修改员工表
  45. UPDATE employee SET deptId=2 WHERE id=4;
  46. -- 删除部门
  47. DELETE FROM dept WHERE id=2;
  48. -- 先删除员工表
  49. DELETE FROM employee WHERE deptId=2;
  50. SELECT * FROM dept;
  51. SELECT * FROM employee;

2.8 级联操作

​ 问题:当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表!但是,我们希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现!!!

​ 级联修改: ON UPDATE CASCADE

​ 级联删除: ON DELETE CASCADE

  1. CREATE TABLE employee(
  2. id INT PRIMARY KEY,
  3. empName VARCHAR(20),
  4. deptId INT,-- 把部门名称改为部门ID
  5. -- 声明一个外键约束
  6. CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :级联修改
  7. -- 外键名称 外键 参考表(参考字段)
  8. )
  9. -- 注意: 级联操作必须在外键基础上使用

3 数据库设计

3.1 引入

  1. 需求分析 - 需求分析师 -》 原始需求- > 抽取业务模型
  2. 图书模型:图书名称,版本号,作者
  3. 学生模型: 学号,学生姓名 手机号码
  4. ......
  5. 角色:学生 老师,图书管理员
  6. 《需求说明书》
  7. 需求设计 -
  8. 概要设计:
  9. 抽取实体:业务模型 -> 实体模型(java c++类)内存
  10. class Book{ name, bookNo,author }
  11. 数据库设计:
  12. 业务模型/实体模型 - > 数据模型 (硬盘)
  13. 数据库表设计
  14. 问题: 如何设计?
  15. 详细设计
  16. 类详细,属性和方法

3.2 三大范式

  1. 设计原则: 建议设计的表尽量遵守三大范式。
  2. 第一范式: 要求表的每个字段必须独立的不可分割的单元
  3. 学生表: student name --违反第一范式
  4. 张三|狗娃
  5. 王含|张小含
  6. 查询: 现用名中包含‘张’的学生
  7. select * from student where name like '%张%';
  8. 学生表: student name old_name --符合第一范式
  9. 张三 狗娃
  10. 王含 张小含
  11. 第二范式: 在第一范式的基础上,要求表的除主键以外的字段都和主键有依赖关系的。
  12. 一张表应该只表达一个意思!!!!
  13. 员工表:employee
  14. 员工编号 员工姓名 部门名称 订单名称 --违反第二范式
  15. 员工表:employee
  16. 员工编号 员工姓名 部门名称 --符合第二范式
  17. 订单表:
  18. 订单编号 订单名称
  19. 第三范式: 在第二范式基础上,要求表的除主键外的字段都只能和主键有直接决定的依赖关系。
  20. 员工表:employee --不符合第三范式(出现数据冗余)
  21. 员工编号 员工姓名 部门编号 部门名称
  22. 1 张三 1 软件开发部
  23. 2 李四 1 软件开发部
  24. 员工表:employee --符合第三范式(降低数据冗余)
  25. 员工编号 员工姓名 部门编号
  26. 1 张三 1
  27. 2 李四 1
  28. 部门表: dept
  29. 部门编号 部门名称
  30. 1 软件开发部
  31. 数据库存储空间 数据查询效率

4 关联查询(多表查询)

  1. -- **************二、关联查询(多表查询)****************----
  2. -- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
  3. -- 2.1 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)
  4. SELECT empName,deptName FROM employee,dept;
  5. -- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
  6. -- 多表查询规则:1)确定查询哪些表 2)确定哪些哪些字段 3)表与表之间连接条件 (规律:连接条件数量是表数量-1)
  7. -- 2.2 内连接查询:只有满足条件的结果才会显示(使用最频繁)
  8. SELECT empName,deptName -- 2)确定哪些哪些字段
  9. FROM employee,dept -- 1)确定查询哪些表
  10. WHERE employee.deptId=dept.id -- 3)表与表之间连接条件
  11. -- 内连接的另一种语法
  12. SELECT empName,deptName
  13. FROM employee
  14. INNER JOIN dept
  15. ON employee.deptId=dept.id;
  16. -- 使用别名
  17. SELECT e.empName,d.deptName
  18. FROM employee e
  19. INNER JOIN dept d
  20. ON e.deptId=d.id;
  21. -- 需求: 查询每个部门的员工
  22. -- 预期结果:
  23. -- 软件开发部 张三
  24. -- 软件开发部 李四
  25. -- 应用维护部 王五
  26. -- 秘书部 陈六
  27. -- 总经办 null
  28. -- 2.2 左[外]连接查询: 使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
  29. -- (注意: 左外连接:左表的数据一定会完成显示!)
  30. SELECT d.deptName,e.empName
  31. FROM dept d
  32. LEFT OUTER JOIN employee e
  33. ON d.id=e.deptId;
  34. -- 2.3 右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
  35. -- (注意: 右外连接:右表的数据一定会完成显示!)
  36. SELECT d.deptName,e.empName
  37. FROM employee e
  38. RIGHT OUTER JOIN dept d
  39. ON d.id=e.deptId;
  40. -- 2.4 自连接查询
  41. -- 需求:查询员工及其上司
  42. -- 预期结果:
  43. -- 张三 null
  44. -- 李四 张三
  45. -- 王五 李四
  46. -- 陈六 王五
  47. SELECT e.empName,b.empName
  48. FROM employee e
  49. LEFT OUTER JOIN employee b
  50. ON e.bossId=b.id;

5 存储过程

5.1什么是存储过程

存储过程,其实就是带逻辑的(多个)sql语句。也是sql编程

之前的sql没有条件判断,没有循环

存储过程带上流程控制语句(if while)

5.2存储过程特点

1)执行效率非常快!存储过程是在数据库的服务器端执行的!!!

2)移植性很差!不同数据库的存储过程是不能移植。

5.3存储过程语法

  1. -- 创建存储过程
  2. DELIMITER $ -- 声明存储过程的结束符
  3. CREATE PROCEDURE pro_test() --存储过程名称(参数列表)
  4. BEGIN -- 开始
  5. -- 可以写多个sql语句; -- sql语句+流程控制
  6. SELECT * FROM employee;
  7. END $ -- 结束 结束符
  8. -- 执行存储过程
  9. CALL pro_test(); -- CALL 存储过程名称(参数);
  10. --参数:
  11. --IN 表示输入参数,可以携带数据带存储过程中
  12. --OUT 表示输出参数,可以从存储过程中返回结果
  13. --INOUT 表示输入输出参数,既可以输入功能,也可以输出功能

存储过程种类:

  1. -- **************三、存储过程*******************-
  2. -- 声明结束符
  3. -- 创建存储过程
  4. DELIMITER $
  5. CREATE PROCEDURE pro_test()
  6. BEGIN
  7. -- 可以写多个sql语句;
  8. SELECT * FROM employee;
  9. END $
  10. -- 执行存储过程
  11. CALL pro_test();
  12. -- 3.1 带有输入参数的存储过程
  13. -- 需求:传入一个员工的id,查询员工信息
  14. DELIMITER $
  15. CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数
  16. BEGIN
  17. SELECT * FROM employee WHERE id=eid;
  18. END $
  19. -- 调用
  20. CALL pro_findById(4);
  21. -- 3.2 带有输出参数的存储过程
  22. DELIMITER $
  23. CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) -- OUT:输出参数
  24. BEGIN
  25. -- 给参数赋值
  26. SET str='helljava';
  27. END $
  28. -- 删除存储过程
  29. DROP PROCEDURE pro_testOut;
  30. -- 调用
  31. -- 如何接受返回参数的值??
  32. -- ***mysql的变量******
  33. -- 全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用)
  34. -- 查看所有全局变量: show variables
  35. -- 查看某个全局变量: select @@变量名
  36. -- 修改全局变量: set 变量名=新值
  37. -- character_set_client: mysql服务器的接收数据的编码
  38. -- character_set_resultsmysql服务器输出数据的编码
  39. -- 会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!
  40. -- 定义会话变量: set @变量=值
  41. -- 查看会话变量: select @变量
  42. -- 局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!!
  43. -- 1)定义一个会话变量name, 2)使用name会话变量接收存储过程的返回值
  44. CALL pro_testOut(@NAME);
  45. -- 查看变量值
  46. SELECT @NAME;
  47. -- 3.3 带有输入输出参数的存储过程
  48. DELIMITER $
  49. CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT 输入输出参数
  50. BEGIN
  51. -- 查看变量
  52. SELECT n;
  53. SET n =500;
  54. END $
  55. -- 调用
  56. SET @n=10;
  57. CALL pro_testInOut(@n);
  58. SELECT @n;
  59. -- 3.4 带有条件判断的存储过程
  60. -- 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;
  61. DELIMITER $
  62. CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
  63. BEGIN
  64. IF num=1 THEN
  65. SET str='星期一';
  66. ELSEIF num=2 THEN
  67. SET str='星期二';
  68. ELSEIF num=3 THEN
  69. SET str='星期三';
  70. ELSE
  71. SET str='输入错误';
  72. END IF;
  73. END $
  74. CALL pro_testIf(4,@str);
  75. SELECT @str;
  76. -- 3.5 带有循环功能的存储过程
  77. -- 需求: 输入一个整数,求和。例如,输入100,统计1-100的和
  78. DELIMITER $
  79. CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
  80. BEGIN
  81. -- 定义一个局部变量
  82. DECLARE i INT DEFAULT 1;
  83. DECLARE vsum INT DEFAULT 0;
  84. WHILE i<=num DO
  85. SET vsum = vsum+i;
  86. SET i=i+1;
  87. END WHILE;
  88. SET result=vsum;
  89. END $
  90. DROP PROCEDURE pro_testWhile;
  91. CALL pro_testWhile(100,@result);
  92. SELECT @result;
  93. USE day16;
  94. -- 3.6 携带数据库的数据给输出参数(INTO)
  95. DELIMITER $
  96. CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )
  97. BEGIN
  98. SELECT empName INTO vname FROM employee WHERE id=eid;
  99. END $
  100. CALL pro_findById2(1,@NAME);
  101. SELECT @NAME;

6 触发器

6.1 触发器作用

当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成!!

例如: 当向员工表插入一条记录时,希望同时往日志表插入数据

  1. -- 需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据
  2. -- 创建触发器(添加)
  3. CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 当往员工表插入一条记录时
  4. INSERT INTO test_log(content) VALUES('员工表插入了一条记录');
  5. -- 插入数据
  6. INSERT INTO employee(id,empName,deptId) VALUES(7,'扎古斯',1);
  7. INSERT INTO employee(id,empName,deptId) VALUES(8,'扎古斯2',1);
  8. -- 创建触发器(修改)
  9. CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW -- 当往员工表修改一条记录时
  10. INSERT INTO test_log(content) VALUES('员工表修改了一条记录');
  11. -- 修改
  12. UPDATE employee SET empName='eric' WHERE id=7;
  13. -- 创建触发器(删除)
  14. CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW -- 当往员工表删除一条记录时
  15. INSERT INTO test_log(content) VALUES('员工表删除了一条记录');
  16. -- 删除
  17. DELETE FROM employee WHERE id=7;

7 mysql权限问题

  1. -- ***********五、mysql权限问题****************
  2. -- mysql数据库权限问题:root :拥有所有权限(可以干任何事情)
  3. -- 权限账户,只拥有部分权限(CURD)例如,只能操作某个数据库的某张表
  4. -- 如何修改mysql的用户密码?
  5. -- password: md5加密函数(单向加密)
  6. SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
  7. -- mysql数据库,用户配置 : user
  8. USE mysql;
  9. SELECT * FROM USER;
  10. -- 修改密码
  11. UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';
  12. -- 分配权限账户
  13. GRANT SELECT ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456';
  14. GRANT DELETE ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456';

8 总结

  1. 1sql基础语法(重点)
  2. DDL create/drop/alter
  3. DML insert/update/delete
  4. DQL:
  5. 单表: 12
  6. 多表: 内连接 左外连接 右外连接 自连接
  7. 2)数据约束(应用)
  8. 默认值
  9. 唯一
  10. 主键
  11. 自增长
  12. 外键+级联
  13. 3)存储过程
  14. 3.1 输入参数
  15. 3.2 输出参数
  16. 3.3 输入输出参数
  17. 3.4 if条件
  18. 3.5 while条件
  19. 3.6 into
  20. 4)数据库设计(重点)
  21. 三大范式
  22. 5)触发器+权限问题+备份问题

mysql高级知识的更多相关文章

  1. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  2. MySQL高级知识(十五)——主从复制

    前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...

  3. MySQL高级知识(十四)——行锁

    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...

  4. MySQL高级知识(十三)——表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  5. MySQL高级知识系列目录

    MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...

  6. MySQL高级知识(十二)——全局查询日志

    前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...

  7. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  8. MySQL高级知识(十)——批量插入数据脚本

    前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...

  9. MySQL高级知识(九)——慢查询日志

    前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志 ...

  10. MySQL高级知识(八)——ORDER BY优化

    前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table i ...

随机推荐

  1. python编程基础之简单购物车

    #good文件夹内容[ ['Iphone7', 5800], ['Coffee', 30], ['疙瘩汤', 10], ['Python Book', 99], ['Bike', 199], ['Vi ...

  2. 详解Document.Cookie

    转自:https://www.jb51.net/article/77009.htm 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时 ...

  3. ABBYY FineReader 14.0.107.232 Enterprise 下载和安装使用

    目录 1. 按 2. 软件功能 3. 软件特色 4. 安装说明 5. 激活说明 6. 下载地址 1. 按 ABBYY FineReader 是款功能强大的OCR文字识别软件:它支持者用户进行使用文档的 ...

  4. pgtclsh -- PostgreSQL TCLshell 客户端

    SYNOPSIS pgtclsh [filename [argument...]] DESCRIPTION 描述 pgtclsh 是一个 Tcl shell 接口,用 PostgreSQL 数据库访问 ...

  5. 04.Linux-CentOS系统sudo权限配置

    visudo权限配置普通用户的使用权限范围配置文件: (请根据自己公司需求配置) [root@localhost ~]# visudo ## Allow root to run any command ...

  6. Linux shell中自动完成登录

    在写shell脚本时,需要登录到不同的服务器上执行相关命令,在未建立信任之前如何批量操作. 1.ssh 首次登录服务器时会提示RSA key fingerprint输入yes/no,可以通过下面的方法 ...

  7. voc数据集坐标,coco数据集坐标

    voc,如上图 x1 ,y1 ,x4, y4    bbox的坐标格式是,x,y的最大最小值,也就是box的左上角和右下角的坐标 coco x,y,w,h       box左上角的坐标以及宽.高 图 ...

  8. LYXF-PE-tools

    先随便说一下这个PE-tools有什么用? 我开发这款PE-tools是为了学习而开发的,且是开源的,这里我会提供源码链接.它可以解析windows 32/64位程序中比较常用的一些属性. 里面有个稍 ...

  9. JAVA学习笔记--ClassLoader

    仅先摘要书中内容以记之,后续也许需要更深入的去探索.先推荐篇博文http://blog.csdn.net/xyang81/article/details/7292380 6.9 初始化和类装载 在许多 ...

  10. 对getBoundingClientRect属性的研究

    1.getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. .top:元素上边到视窗上边的距离; right: ...