一.MySQL还是个黑盒子 我们都知道,只要我们系统引入了 MySQL 驱动和连接池,就能从数据库连接池获取一个数据库连接,然后就可以执行增删改查的操作了. 可是我们并不知道 MySQL 里面是怎么执行的,例如我们执行了 insert 语句,只知道表里面多了一条数据,MySQL 是怎么插入的我们就不知道了. 二.解开 MySQL 这个黑盒子 1.一条工作线程: 举例: 我们都知道,在 Socket 编程里,ServerSocket 会有一条线程负责监听 Socket 发送过来的网络请求,并且负责…
一.上节回顾 上节我们讲到,建议将 redo log 的刷盘策略设置为1:即提交事务时,强制将 redo log buffer 里的 redo log 刷入到磁盘后才算事务提交成功. 但是我们都知道,redo log buffer 是 InnoDB 存储引擎的组件,而 MySQL 支持很多种存储引擎,那么 MySQL 在撇除存储引擎后,自己就没有记录一下关于数据更新的日志吗? 二.binlog 日志文件 redo log 本身是 InnoDB 存储引擎特有的一个东西,所以 MySQL 也提供了一…
MySQL学习之路(一) 1.1MySQL的概述 MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一个开源的关系型数据库管理系统. MySQL分为社区版和企业版. 1.2MySQL的安装与配置 1.2.1 安装方式: msi(推荐)和zip: 1.2.2MySQL目录结构: bin 目录,存储可执行文件 data目录,存储数据文件 docs,文档 include目录,存储包含的头文件 lib目录,存储库文件 share ,错误消息和字符集文件 1.2.3MySQ…
1.下载绿色版mysql 从该地址http://dev.mysql.com/downloads/mysql/ 中选择windows的版本,选择下载. 2.将下载的压缩包解压. 3.将根目录下的my-default.ini复制重命名为my.ini. 4.打开my.ini文件,将下面的源码添加修改到my.ini中 [client]default-character-set=utf8 [mysqld] # 设置mysql服务器编码character_set_server=utf8 #basedir设置…
    MySQL内连接(inner join on) MySQL的内连接使用inner join on,它的效果跟使用where是一样的,如果联结的是两个表,那么需要左右的条件或者说字段是需要完全匹配的. 来看个例子:有两张表customers客户表和orders订单表,外键是cust_id,我们需要知道哪些客户有订单 select customers.cust_id,orders.order_num from customers , orders where customers.cust_i…
mysql 中常常出现对中文支持不友好的情况 常见的错误 "Illegal mix of collations for operation" 下面我们规整一下 mysql 数据库中一共涉及到哪些字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的 character-set-database:数据库字符集 character-set-table:数据库表字符集 一般情况下只需要设置character-set-se…
1.MySQL使用命令行启动时报错“发生系统错误 5”,如下: 原因:未用管理员身份运行cmd程序 解决方案:在开始菜单里找到命令提示符,右击选择以管理员身份运行 2.登录时报错“提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件” 解决方案:配置环境变量(右击我的电脑->高级系统设置->环境变量,选择Mysql安装的目录,在Mysql安装的目录中找到bin目录,把此路径复制.选择系统中的path->编辑->把刚复制的路径添加进去) 3.当忘记mysql数据库用户名密…
1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql> SELECT VERSION(), DATABASE(); +-------------------------+------------+ | VERSION() | DATABASE() | +-------------------------+------------+ | 5.5.34-0ubuntu0.13.10.1 | NULL…
1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结:数据永远是数据库的核心. 1.2.关系数据库管理系统 通过"数据库管理系统",数据库用户可以轻松地实现数据库容器中各种数据库对象的访问(增.删.改.查等操作),并可以轻松地完成数据库的维护工作(备份.恢复.修复等操作) 数据库用户无法直接通过操作系统获取数据库文件中的具体内容: 数据库管…
目录 一.安装包准备 二.开始安装 三.验证安装 四.客户端工具 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ 下载如下教程,这时要选MySql On Windows的 选择MysQl Installer 注意下自己对应的版本,系统的位数 下载Mysql安装包需要Oracel的账号,如果没有,自己注册一个,然后接上面的流程,再Login 账号进去之号就可以下载 了 这是下载完后的 二.开始安装 直接双击就开始了. 选择默认的 安装前会进行需要的工具检查,这…
mysql主从复制 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:   1.1.版本一致   1.2.初始化表,并在后台启动mysql   1.3.修改root的密码 2.修改主服务器master:    #vi /etc/my.cnf        [mysqld]        log-bin=mysql-bin   //[必须]启用二进制日志        server-id=222      //[必须]服务器唯一ID,默认是1,一般取…
一.存储引擎 上节我们最后说到,SQL 的执行计划是执行器组件调用存储引擎的接口来完成的. 那我们可以理解为:MySQL 这个数据库管理系统是依靠存储引擎与存放数据的磁盘文件进行交互的. 那么 MySQL 有哪些存储引擎呢? 主要有 MyISAM.InnoDB.Memory等等.而现在互联网中,基本都是使用 InnoDB 存储引擎,所以接下来我将简单总结自己关于 InnoDB 存储引擎的学习,比较简单的介绍 InnoDB 存储引擎里面的组件. 二.缓冲池 我们现在都知道了,数据库的数据是存放在磁…
有的时候我们需要对同一表中的数据进行多次检索,这个时候我们可以使用之前学习过的子查询,先查询出需要的数据,再进行一次检索. 例如:一张products表,有产品id,供应商id(vend_id),产品名称等等. mysql> select * from products; +---------+---------+-----------+------------+-----------+ | prod_id | vend_id | prod_name | prod_price | prod_de…
我用的时mac系统,本来想在mac系统上装一个,可是发现mac系统始终无法用password登入到本机server,很奇怪的问题(在stackflow上看了些回复,也没有找到原因),最后仅仅好装到虚拟机上面去了. 我的虚拟机版本号是centos6.3,yum中自带了安装包. CentOS6和RHEL6系统的YUM中包括了MySQL安装包,版本号是MySQL5.rpm软件包的名称是mysql-server. 使用下面命令能够安装MySQL数据库: yum install -y mysql-serv…
本人之前接触的关系型数据库主要是oracle和sqlserver,而对于mysql知之甚少,但查阅网上资料发现,mysql与oracle非常相似,所以学起来应该不会非常费劲,在总结的时候可能很多其它的把关注点放在它与oracle的不同之处. 一.简单介绍 MySQL是一个真正的多用户.多线程SQL数据库server.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言.MySQL是一个client/server结构的实现, 它由一个server守护程序mysqld和非常多不同的客户程序和…
一.客户端与服务端模型 1.mysql是一个典型的c/s服务结构 1.mysql自带的客户端程序(/application/mysql/bin) mysql       mysqladmin   mysqldump 2.市面上大部分的开发语言都需要一个客户端连接程序连接mysql的服务端 2.mysql是一个守护进程,是一个二进制的程序 mysql.server是一个启动脚本,mysqld_safe是一个启动命令,mysqld则是一个守护进程 3.连接客户端方式 1.TCP/IP mysql -…
环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205 主机名:edu-mysql-01 从节点IP:192.168.1.206 主机名:edu-mysql-02 主机配置:4核CPU.4G内存 依赖课程 <高可用架构篇--第13节--MySQL源码编译安装(CentOS-6.6+MySQL-5.6)> MySQL主从复制官方文档 http://dev.mysql.com/do…
备份 (所有) C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump --no-defaults -hlocalhost -P3306 -uroot -p -R test > h:\test.sql 备份 (结构) C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump --no-data -hlocalhost -P3306 -uroot -p -d -R -v test >…
1.数据定义语言(DDL):定义和管理数据对象,比如建立数据库.数据表 数据操作语言(DML):用于操作数据库对象中的包含的数据. 数据查询语言(DQL):用于查询数据库对象中包含的数据,能够对表进行查询. 数据控制语言(DCL):管理数据库的语言. 2.进入数据库的方式 开始->运行->cmd->mysql -u root -p Mysql -h 主机地址 -u 用户名 -p Mysql -h localhost -u root -p 3.数据库的操作: a.创建数据库 create…
从事前端开发的都知道,页面显示的数据一定要及时的呈现,否则会影响用户体现.那么导致页面加载数据慢或者显示滞后的原因又是什么呢? 拿自己之前做项目经历给大家讲讲吧,之前做后台,当时的项目实时性都非常高,前端页面实时显示要求非常高 ,慢1秒显示都会导致用户的投诉,最后没办法,通过本地(磁盘)缓存跟数据表分割来解决这一问题. 原因分析 主要原因1: 后台数据库中的数据过多,没做数据优化导致后台查询数据很慢 次要原因2: 前端数据请求-解析-展示过程处理不当 次要原因3: 网络问题所致 那么我们应该怎么…
最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不方便做统计和分析.所以我需要创建一张新表,把旧表中的数据一条一条取出来优化后放回新表: 一. 清除冗余数据,优化字段结构 2000W数据中,能作为查询条件的字段我们是预知的.所以将这部分数据单独创建新的字段,对于有规则的数据合理改变字段结构,比如身份证就是varchar(18).对于不重要的数据我们…
做服务器端开发的同学们,相信对于mysql应该是十分熟悉,但是一旦真正出现问题,你是否能够快速的发现问题的起因,并且解决呢?一旦问题涉及到数据库层面,往往不是那么好解决的,通常来说,我们需要提前做应对未来可能出现问题的准备.下面是几条针对mysql使用的优化建议: 尽量减少数据库上的计算操作 将那些需要耗费cpu资源计算数据的操作尽可能的放在服务器上运行,不要所有的数学计算全部抛给数据库,减小数据库开销,提升效率. 合理的分库分表 按照具体的业务需求,合理的设计数据库和表,将数据合理分开存储.单…
什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度 索引的优点是可以提高检索数据的速度 索引的缺点是创建和维护索引需要耗费时间 索引可以提高查询速度,会减慢写入速度 索引分类 1.普通索引     …
MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要占去10个字节的空间;而VARCHAR则是可变长度的,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为VARCHAR(10)是最合算的,VARCHAR类型的占用空间是它的值的实际长度+1. 为什么要+1呢?这一个字节用于保存实际使用了多大的长度.从这个+1中也应该看到…
一. 表设计 库名.表名.字段名必须使用小写字母,"_"分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE. 建议使用UNSIGNED存储非负数值. 建议使用INT UNSIGNED存储IPV4. 整形定义中不添加长度,比如使用INT,而不是INT(4). 使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED.…
注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数. 1.concat连接字符串: 从上图中可以看出,直接使用select concat就可以连接任意两个以上的字符串,同时也可以用来连接查询结果,一般情况中也是会用来连接查询结果.需要注意的是,如果连接的内容有null存在的话,那么结果就只会是null. 2.concat_ws使用分隔符连接字符串: 在上边的语法中,第一个字符传代表指定的连接格式,其他的代表需要连接…
mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后的子查询结果通常是多行多列的,充当临时表:而出现在where后的子查询结果通常是单行单列,充当条件: 2.where后作为条件的子查询多与"="."!=".">"."<"等比较运算符一起使用.结果虽然通常是单行单列,但…
1)谨慎而有效地使用索引 选择合理的索引(前缀性及可选性).删除没有用的索引. 2)使用规范化,但不要使用过头 规范化(至少是第三范式)是一个易于理解且标准的方法.然而,在有些情况下,你可能希望违反这些规则.查询表通常是规范化的产物,也就是说,你创建了一个特殊的表,这个表包含了在其他表中被频繁使用的相关信息的列表.然而,当使用那些经常被访问且分布有限(仅有或有限的行数拥有小值)的查找表时,会使系统性能降低.在这种情况下,每次你使用查询信息,它们必须使用join以获取完整数据.join的开销很大,…
在MySQL中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint.另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.…
MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.例如,字符串连接函数可以很方便的将多个字符串连接在一起.在这一讲中将讲解的内容包括: 数学函数 字符串函数 日期和时间函数 条件判断函数 系统信息函数 加密函数 格式化函数 MySQL函数是MySQL数据库提供的内部函数.这些内部函数可以帮助用户更加方便的处理表中的数据.本小节中将简单介绍MySQL中包含哪几类函数,以…