mysql临时表

Explain详解与索引最佳实践

混江龙づ霸主 提交于 2019-12-16 22:23:54
相信大多数的java开发程序员,日常工作,免不了涉及数据库的增删改查。而当你写完一句查询语句后,你肯定在想,如果可以事先知道该语句的执行效率,那就可以一定程度上避免设计出糟糕的语句了。那这种工具有吗?还真的有,那就是Explain。 使用EXPLAIN关键字可以模拟数据库优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈。在 select 语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。 Explain分析实战 说明下实验环境,博主使用的mysql数据库为8.0.18 MySQL Community Server - GPL,运行在阿里云的centos服务器上。 数据库初始化脚本如下,创建了三张表,student学生信息表,course课程信息表,stuent_course学生选课评教表。 DROP TABLE IF EXISTS ` student ` ; CREATE TABLE ` student ` ( ` id ` bigint ( 14 ) NOT NULL , ` name ` varchar ( 45 ) NOT NULL , ` sex ` CHAR ( 1 ) NOT NULL , PRIMARY KEY ( ` id ` ) ) ENGINE = InnoDB DEFAULT

MySQL面试总结

浪尽此生 提交于 2019-12-14 20:29:18
MySQL面试总结 # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键,适用于频繁的查询。表锁,不会出现死锁,适合小数据和小并发。 - 为什么不会出死锁?(没有事务就不会继续持有锁) 答:因为`MyISAM`再查询的时候,会同时锁定这个`sql`里面所有用到的表(获取锁的顺序是一致的),不局限与一张表,再写锁又重叠时,就得等待。 **注意:【`MySQL5.5`之前默认的是`MyISAM`引擎了,5.5之后的版本默认都是`innodb`作为存储引擎】** `innodb`:支持事务安全的存储引擎,适用于插入和更新,支持外键,行锁,事务。适合大数据,大并发。特别是针对多个并发和`QPS`较高的情况。 - `QPS:`就是每秒查询率,`QPS`是对一个特定服务器再规定时间内能处理多少流量的衡量标准。 - `TPS:`就是每秒传输处理的事务个数。 - `innodb`的行锁模式:共享锁,排他锁,意向共享锁(表锁),意向排他锁(表锁),间隙锁。(注意:如果`sql`语句没有使用索引,`innodb`不能确定操作的行时,使用意向锁(表锁))。 - 死锁问题 - 什么是死锁? 死锁就是当俩个事务都需要获取对方持有的排他锁才能完成事务的时候,就导致了循环锁等待

Mysql安装、配置、优化

妖精的绣舞 提交于 2019-12-13 00:50:45
一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单: RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo apt-get install mysql mysql-server 安装之后不知道mysql装到哪了怎么办,用whereis mysql 命令来找一下。 先找到mysql的默认配置文件。一般来说,安装后有这么几个备选的配置: 1 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf  就2014年的机器配置来说,咱们直接用my-huge.cnf。把my-huge.cnf 复制到/etc/下,改名my.cnf。配置文件就有了, 然后启动mysql: /etc/init.d/mysqld start 。 安装之后默认的帐号是root, 密码为空。咱们要做的第一件事是改root密码。 进入mysql:mysql -uroot -p 选择数据库: use mysql 改密码: UPDATE user SET Password = PASSWORD(‘xxxx’) WHERE user = ‘root’; 刷新权限: FLUSH PRIVILEGES; 现在数据库装好了, 帐号和权限也设置了

Mysql安装、配置、优化

Deadly 提交于 2019-12-12 13:15:05
Mysql安装、配置、优化 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单: RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo apt-get install mysql mysql-server 安装之后不知道mysql装到哪了怎么办,用whereis mysql 命令来找一下。 先找到mysql的默认配置文件。一般来说,安装后有这么几个备选的配置: 1 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf  就2014年的机器配置来说,咱们直接用my-huge.cnf。把my-huge.cnf 复制到/etc/下,改名my.cnf。配置文件就有了, 然后启动mysql: /etc/init.d/mysqld start 。 安装之后默认的帐号是root, 密码为空。咱们要做的第一件事是改root密码。 进入mysql:mysql -uroot -p 选择数据库: use mysql 改密码: UPDATE user SET Password = PASSWORD(‘xxxx’) WHERE user = ‘root’; 刷新权限: FLUSH PRIVILEGES;

MySQL基础教程

ⅰ亾dé卋堺 提交于 2019-12-11 16:42:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这是一个基础的MySQL教程,通过教程的学习后可以到达一个初级到中级 MySQL应用水平级别 ,主要介绍一些MySQL中基本的SQL语句。如果这是您第一次使用关系数据库管理系统(之前没有学习SQL相关知识)那么也没有关系,本教程将为您提供使用 MySQL数据库服务器的工作所需知识和示例,如:查询数据,更新数据,管理数据库和创建表等等。 如果已经熟悉其它的关系数据库管理系统,如:PostgreSQL,甲骨文(Oracle),或Microsoft SQL Server等,那么将有助于理解和使用本教程,刷新知识并理解MySQL的SQL语句,看看MySQL与其他数据库系统有怎样的不同。 第1节、开始使用MySQL 本节将帮助您快速使用MySQL。我们将开始安装MySQL,下载一个样本数据库,并将样本数据加载到MySQL服务器中,作为后续示例练习使用。 安装MySQL数据库服务器 - 一步一步演示如何在您的计算机上安装 MySQL 数据库服务器(软件)。 下载MySQL的示例数据库 - 介绍一个MySQL的示例数据库(studymysql)。我们将提供链接下载示例数据库和它的ER图。 加载示例数据库到本地MySQL数据库服务器 – 演示如何将示例数据库(studymysql)加载到MySQL数据库服务器中进行练习。

mysql You can't specify target table 'xxx' for update in FROM clause

依然范特西╮ 提交于 2019-12-09 12:28:33
含义: 您不能在子句中为更新指定目标表'xxx'。 错误描述:删除语句中直接含select,如下: DELETE FROM meriadianannotation WHERE SeriesID IN ( SELECT SeriesID as tid FROM meriadianannotation GROUP BY SeriesID HAVING count(SeriesID) > 1 ) AND data NOT IN ( SELECT min(data) as bid FROM meriadianannotation GROUP BY SeriesID HAVING count(SeriesID) > 1 ) 解决方法:加临时表,如下, DELETE FROM meriadianannotation WHERE SeriesID IN ( select t.tid from( SELECT SeriesID as tid FROM meriadianannotation GROUP BY SeriesID HAVING count(SeriesID) > 1 ) t ) AND data NOT IN ( select b.bid from( SELECT min(data) as bid FROM meriadianannotation GROUP BY SeriesID

MySQL数据库 (下)

不羁岁月 提交于 2019-12-08 05:18:29
MySQL数据库 (下) MySQL高级应用 一、 MySQL联结表 : 预备知识: 1、关系表:把信息分解成多个表, 一类数据 一个表, 各表 通过某些 共同的值相互关联 (所以才称为 关系数据库 )。 2、联结:联结是一种机制,用来在一条SELECT语句中关联表,因此称为联结。通过联结,一条SELECT语句可以联结多个表返回一组输出。 3、完全限定列名: 表名+ . +列名 。 4、笛卡儿积(叉联积):由没有联结条件表关系返回的结果为笛卡儿积,结果的行数是第一个表的行数乘以第二个表的行数。 5、表别名和列别名(SQL 一个别名只存在于查询期间。表别名只会在查询执行中使用。与列别名不同,表别名不返回MySQL客户端):SELECT 列名 AS 列别名 FROM 表名 AS 表别名 (Oracle中没有AS,别名设置不用AS,直接指定别名即可)   一、 INNER JOIN(内连接/等值连接)--获取两个表中字段匹配关系的记录; mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author; mysql> SELECT a.runoob_id, a.runoob

Explain详解与索引最佳实践

喜欢而已 提交于 2019-12-07 20:33:28
使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中) 使用的表 DROP TABLE IF EXISTS `actor`; CREATE TABLE `actor` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `actor` (`id`, `name`, `update_time`) VALUES (1,'a','2017-12-22 15:27:18'), (2,'b','2017-12-22 15:27:18'), (3,'c','2017-12-22 15:27:18'); DROP TABLE IF EXISTS `film`; CREATE TABLE

【MySql】关于临时表cann't reopen

寵の児 提交于 2019-12-07 19:01:53
当你创建临时表的时候,你可以使用temporary关键字。如:    create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null)‘ 或 CREATE TEMPORARY TABLE IF NOT EXISTS sp_output_tmp ENGINE = MEMORY SELECT …from … where ID=current_id;    临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用 已经存在的表,但不是临时表的表名。(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)。创建临时表你必须有   create temporary table 权限。   下面几点是临时表的限制:   1、临时表只能用在 memory,myisam,merge,或者innodb 2、临时表不支持mysql cluster(簇)   3、在同一个query语句中,你只能查找一次临时表。例如:下面的就不可用   mysql> SELECT * FROM temp_table, temp_table AS t2;   ERROR 1137: Can't reopen

MySQL_数据表命令

落爺英雄遲暮 提交于 2019-12-07 15:56:32
目录 数据表操作 1.创建数据表: 2. 修改表结构: 数据表查看 1.查看数据库中所有表的信息 2.查看表结构 3.查看创建表时所输入的命令 4.删除数据表 数据表操作 关于Mysql的数据类型, 点击一下 1.创建数据表: create [temporapy] table [if not exists] <表名> [(<字段名> <数据类型> [完整性约束条件] [,...])] [表的选项]; temporapy表示新创建的表为临时表 表的选项用于描述如何春促引擎、字符集等选项 engine=存储引擎类型 default charset=字符集类型 2. 修改表结构: 1. 增加一个字段 : //first 代表第一个位置 //after 代表在字段名2之后插入字段名1 alter table 数据表名 add (<新字段><数据类型>[<完整约束条件>][first|after已存在的字段名][,...]) 2. 修改字段数据类型 alter table 数据表名 modify column(<字段名><新数据类型>[<完整性约束条件>]) 3. 修改字段名 alter table<表名> change <旧列名><新列名><新数据类型> 4. 修改字段位置 alter table 数据表名 modify 字段名1 数据类型 first; ·················