mysql数据库

mysql数据库操作(2)

一世执手 提交于 2020-01-22 07:07:54
上一篇 文章 我们接触了一些常用的 mysql 语句,当我们需要产生复杂的逻辑的时候,我们需要组合mysql语句,这时候的 mysql 语句又臭又长,那么我们就有必要知道 mysql 语句执行的顺序了。 比如一个 SELECT 语句中,既有 GROUP BY 子句又有 ORDER BY子句,还有 LIMIT 子句,那么到底是哪个子句执行在先,哪个执行其次,哪个执行在后?通过下面的探究我们可以知道一二。 1.mysql 语句执行顺序? MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟 的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个 子句,那么将会跳过相应的步骤。 下面我们来具体分析一下查询处理的每一个阶段 FORM : 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1 ON : 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。 JOIN : 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug

django连接mysql出现"django.db.utils.OperationalError: (2059, "Authentication plugin 'caching_sha"错误的解决方法

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-22 02:56:32
django连接mysql数据库出现"Authentication plugin ‘caching_sha2_password’ cannot be loaded"错误的解决方法 最近在练习python(pycharm)+django搭建网站时,连接mysql数据库,出现错误: django.db.utils.OperationalError: (2059, "Authentication plugin ‘caching_sha2_password’ cannot be loaded: …) 经过检查发现了问题的所在——主要是mysql8.0版本的问题。 (最近才从官网上面下载最新的mysql数据库,之前都是用的sql server数据库 0_0 ) 目前最新的mysql8.0数据库对用户密码的加密方式为caching_sha2_password, django暂时还不支持这种加密方式。所以只需将加密方式改为老版的即可。 解决方法: 在cmd命令中以root的身份登录mysql。 分别输入以下命令查看加密方式: > use mysql ; > select user,plugin from user where user = 'root' ; 修改加密方式: > alter user 'root' @ 'localhost' identified with mysql_native

MySQL高级---索引优化分析(三、索引简介)

偶尔善良 提交于 2020-01-22 02:47:01
1、索引的概念 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质: 索引是数据结构 。可以简单理解为 排好序的快速查找数据结构 。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。 2、下图就是一种可能的索引方式示例: 左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。我们平时说的索引,进入没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引,其中狙击符合索引,前缀索引,唯一索引默认都是使用的B+树索引,统称索引。 3、优缺点 优势: 1、类似于大学的图书馆里建书目索引,提高数据检索的效率,降低数据库的IO成本。 2、通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。 劣势: 1、虽然索引大大 提高了查询速度 ,同时却会 降低更新表的速度 ,如对表进行INSERT

mysql避免插入重复数据

冷暖自知 提交于 2020-01-22 01:49:49
 我们在进行数据库操作的时候,有时候需要插入不重复的数据。所谓不重复的数据,可以是某个字段不重复,也可以是某几个字段重复。当然我们可以在插入之前先将数据库的数据查询出来,然后与将要插入的数据进行对比,如果出现一样的数据信息,那么就不进行插入,但是这种方法是不明智的。如果数据库的数据很多,那么必然影响到效率。最近在做一个项目的时候,出现了这种情况,其实我们可以使用sql语句帮助我们达到目的。下面就是我写的sql语句: 1 insert into question(path) select '$value' from DUAL where '$value' not in (select path from question)  因为我在PHP页面中使用的sql语句,所以$value是我申明的变量.其中DUAL表示在虚拟表中进行查询。这样一句SQL就能保证我在requestion表中不会插入相同的path。  如果你还想比较其他数据是否有重复,那么SQL语句的格式为: insert into tablename(表名) (name1,name2.....)(要比较的字段名) select '$value1','$value2',......(要插入的真实数据) from DUAL where '$value1','$value2',......(要插入的真实数据) not in (

LAMP环境搭建

橙三吉。 提交于 2020-01-22 01:29:37
一、LAMP简介 LAM(M)P: L: linux A: apache (httpd) M: mysql, mariadb M:memcached P: php, perl, python WEB资源类型: 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 Web相关语言: 客户端技术: html,javascript 服务器端技术:php, jsp,python,asp CGI:Common Gateway Interface 通用网关接口;可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准 二、PHP 1、php简介 php:通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此其也可以在大多数系统上作为一个独立的shell来使用 Zend Engine:PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。Zend

linux下jdk,tomcat,mysql安装

核能气质少年 提交于 2020-01-22 00:56:57
目录: 目录见文章1 类似Hadoop,Hive也有三种也不同的部署模式(本文采用第二种): 内嵌模式 :将元数据保存在Hive内嵌的Derby数据库中,只允许一个会话连接 本地模式 :(以MySQL为例)在本地安装MySQL,将元数据保存在MySQL中,支持多个会话、多用户连接 远程模式 :将元数据保存在远端数据库中 1.下载安装hive 我用的是hive3.1.2,地址如下: https://mirrors.tuna.tsinghua.edu.cn/apache/hive/ 解压并重命名文件夹为hive cd /usr/software //解压 tar -zxvf apache-hive-3.1.2-bin.tar.gz//重命名 mv apache-hive-3.1.2-bin hive 2.配置Hive 2.1 配置环境变量 vi /etc/profile,将 HIVE_HOME加上 HADOOP_HOME=/usr/software/hadoop HIVE_HOME=/usr/software/hive JAVA_HOME=/usr/software/java/jdk1.8 JAVA_BIN=/usr/software/java/jdk1.8/bin PATH=$PATH:$JAVA_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin

SQL学习基础——MySQL入门(4)_JDBC

人盡茶涼 提交于 2020-01-21 21:29:34
文章目录 1. JDBC: 1. 概念: 2. 快速入门: 3. 详解各个对象: 2.抽取JDBC工具类 : JDBCUtils 3.JDBC控制事务: 1. JDBC: 1. 概念: Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 * JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 2. 快速入门: * 步骤: 1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar 1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下 2.右键-->Add As Library 2. 注册驱动 3. 获取数据库连接对象 Connection 4. 定义sql 5. 获取执行sql语句的对象 Statement 6. 执行sql,接受返回结果 7. 处理结果 8. 释放资源 * 代码实现: //1. 导入驱动jar包 //2.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //3.获取数据库连接对象 Connection conn =

mysql 命令行常用命令

蓝咒 提交于 2020-01-21 21:08:09
mysql服务的启动和停止 cmd 输入 net start 服务名字 net stop 服务名 退出: exit 登录: mysql [-h 主机名 -p 端口号] -u root -p mysql 常用命令 show databases;//显示数据库 use 数据库名; //切换数据库 show tables [from 数据库名]//显示数据库表 desc 表名; //查看表的结构 mysql 语法规范 不区分大小写 建议关键字大写, 表名列名小写 命令用";"结尾 注释 单行: #注释 单行:--空格注释 多行:/* 注释 */ 来源: https://www.cnblogs.com/l1057618497/p/12222907.html

《MySql必知必会》笔记整理

天涯浪子 提交于 2020-01-21 19:35:28
数据库基础 关键词: 数据库 表 (表名唯一,取决多个因素,如不同数据库的表可以同名) 模式 (关于数据库和表的布局及特性的信息) 列 (表中的字段) 行 [行(raw)和记录(record)很大程度可以等同,但行才是正确的术语] 数据类型 (限制数据种类,帮助正确排序,磁盘优化方面的作用) 主键 (primary key): 一列,其值可以唯一区分表中的行。 SQL [(Structured Query Language):结构化查询语言。] 主键条件: 每行都应有一个主键,所以其值不为null。 任意两行间的主键值不同。 主键通常是一列,但也可多列共同构成主键。 主键设置建议: 不更新主键列中的值; 不重用主键列的值; 不在主键列中使用可能会更改的值。 SQL命令执行: 命令在 mysql> 之后输入; 命令用 ; 或 \g 结束,仅按 Enter 不执行命令; 输入 help 或 \h 获取帮助; 输入 quit 或 exit 退出程序。 基本语句: myslq -u root -p; use Database; #SHOW相关 SHOW databases; SHOW tables; SHOW columns FROM tables; -- 等于 describe "tables"; SHOW CREATE DATABASE db_name; 显示完整的建库语句 SHOW

mysql undo log研究

梦想与她 提交于 2020-01-21 19:05:06
undo log基础 大家都知道,数据库的四个隔离级别。有一个情况大家也熟悉:即RC和RR两种隔离级别下的不同可见性,即不可重复读问题。 不可重复读的含义是事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取时数据不一致 在RC隔离级别下,伪代码 session1 start transaction; session2 start transaction; session1先读取一次,是1200 session2加了300,之后commit session1再读取一次,是1500 如果session1基于1200进行了操作,就可能造成数据紊乱的结果 而在RR隔离级别下,结果 会发现session1读取的结果一致都是第一次start transaction之前数据的值,在整个session过程中不变,比如说都是1200 而在RR隔离级别下,如果我就在这个基础上做修改,会存在问题吗? session2 1500 session1 read 仍是1200,但其执行 UPDATE account_innodb SET balance = balance - 100 WHERE id = 1; commit; 再查询,结果是1400,是正确的,而不是我们之前预想的1100 这个不可重复读的问题,或者说是RC、RR下innodb的快照读