《第一章》
mysql 是一个开放源代码的数据库管理系统[DBMS],它是由MySQL AB 公司开发,发布并支持的,MySQL 是一个跨平台的开源关系型数据库管理系统,广泛的应用在Internet 上的中小型网站开发中。
mysql 的特点:稳定,可靠快速,管理方便以及支持众多系统平台,所以称为世界范围内最流行的开源数据库之一。
数据库基础:
数据库是由一批数据构成的有序的集合,这些数据被存放在结构化的数据表中。数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制
数据库 的发展大致分为:人工管理阶段,文件系统阶段,数据库系统阶段,高级数据库阶段。
数据库种类3种:层次式数据库,网络式数据库,关系式数据库。
数据类型:
数据类型决定了数据在计算机中的存储格式,代表了不同的信息类型。常用的数据类型包括:整数数据类型,浮点数据类型,精确小数类型,二进制数据类型,日期/时间类型,字符串数据类型。
主键:主码,用于唯一的标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。出现相同的值,则提示错误。
数据库技术构成:数据库系统由硬件和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机,存储设备等。
软件包括:DBMS,支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
数据库系统有3个主要的组成部分:
1.数据库:用于存储数据的地方。
2.数据库管理系统:用于管理数据库的软件。
数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。
数据库提供了一个存储空间用以存储各种数据,可以将数据库视为一个存储数据的容器。
一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。
数据库管理系统是用户创建,管理,维护数据库时所使用的软件,位于用户与操作系统之间,对数据库进行统一管理。
DBMS能定义数据存储结构,提供数据的操作机制,维护数据库的安全性,完整性和可靠性。
SQL语言:对数据库进行查询和修改操作的语言叫做SQL。SQL 的含义是结构化查询语言。
SQL 语言包含一下4个部分:
1.数据定义语言(DDL):drop,create, alter 语句。
2.数据操作语言(DML):insert,update,delete 语句。
3.数据查询语言(DQL):select 语句。
4.数据控制语言(DCL):grant,revoke,commit,rollback 语句。
insert into table(name,age)values('jack',25);
数据库访问接口:
不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行SQL语句,进行数据库管理。主要的数据库访问接口有:
1.ODBC:(open database connectivity) 开发数据库互连技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的意足代码访问不同的SQL数据库管理系统。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作又对应的DBMS 的odbc 驱动程序完成。不论是Access,mysql ,还是Oracle数据库,均可以通过ODBC api 进行访问。ODBC最大的有点是能以统一的方式处理所有的数据库。
2.JDBC: java data base connectivity(java 数据库连接)用于java 应用程序连接数据库的标准方法,是一种用于执行SQL执行的java api,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
3.ADO.NET : 是微软在.net 框架下开发设计的一组用于和数据源进行交互的面向对象类库。ado.net 提供了对关系数据,xml 和应用程序数据的访问,允许和不同类型的数据源以及数据库进行交互。
4.PDO:为PHP访问数据库定义了一个轻量级,一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,PDO是PHP5新加入的一个重大功能。
什么是MySQL:
MySQL 是一个小型关系型数据库管理系统,与其他大型数据库管理系统Oracle,DB2,SQL server相比,MySQL 规模小,功能有限,但是体积小,速度快,成本低,且它提供的功能对稍微复杂的应用来说已经够用。
客户端-服务器软件:
主从式架构或客户端-服务器结构简称C/S 结构,是一种网络架构,通常在该网络架构下软件分为客户端和服务器。
服务器是整个应用系统西元的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在客户/服务器结构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据传输量。用户使用应用程序时,首先启动客户端通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请求提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。
主从式架构通过不同的途径应用于很多不同类型的应用程序,比如,现在人们最熟悉的网页,还有客户端。
MySQL 版本:
MySQL community server社区版:该版本完全免费,但是官方不提供技术支持。
MySQL enterprise server企业版服务器:它能够以很高性价比为企业提供数据仓库应用,支持acid 事务处理,提供完整的提交,回滚,崩溃回复和行级锁定功能。但是该版本需要付费使用,官方提供电话技术支持。
注意:MySQL cluster 主要用于假设集群服务器,需要在社区版或企业版基础上使用。
MYSQL的优势:
1.速度:运行速度快
2.价格:MySQL 对多数个人用户来说时免费的
3.容易使用:与其他大型数据库的设置和管理相比,其复杂程度较低,易于学习
4.可移植性:能够工作再众多不同的系统平台上:windows,linux,unix,mac os等
5.丰富的接口:提供了用于c,c++,java,perl,php,python,ruby 等语言的api.
6.支持查询语言:MySQL可以利用标准sql语法,支持odbc的应用程序
7.安全性和连结性:十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输都采用加密形式,从而保证了密码安全。
8.并且由于MySQL是网络化的,因此可以再因特网上的任何地方访问,提高了数据共享的效率。
mysql 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在mysql中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
MySQL5.6支持的存储引擎有:csv,performance_schema,Memory,MyISAM,mrg_myisam,InnoDB 等,使用show engines 查看系统所支持的引擎类型。
MySQL5.6的新功能
1.子查询最佳化:通过优化子查询,可以提高执行效率,主要表现在查询的结果集合,分类和返回的执行次数上。
2.强化功能:运用EXPLAIN执行insert,update,delete ,explain 以json 格式输出,提供更精确的最佳化指标和绝佳的可读性,optimizer traces 功能更可追踪最佳化决策过程。
3.通过强化innodb 存储引擎,提升效能处理量和应用软件的可能性:提升处理和只读量高达230%,innodb重构得以尽量减少传统执行绪,冲洗和净化互斥的冲突和瓶颈,在高负载的OLTP系统展现更优异的数据同步性,显著提升只读和交易工作负载的处理量。
4.大幅提升可用性:数据库管理员运用在线数据定义语言作业,可执行新增索引和窗体变更功能,并同时更新应用程序。
5.新增icp 和BKA功能,提升特定查询量高达280倍。
6.InnoDB全文检索功能:开发人员可以在InnoDB窗体上建立全文索引功能,以呈现文字搜寻结果,加快搜寻单字和语句。
7.自我修复复制丛集:新增的Global Transaction Identifiers and utilities 简化自动侦测和复原功能。当数据库发生损毁时,数据库管理员无须介入,即可运用Crash-Safe Replication 功能,自动将二进制记录和备份数据恢复到正确位置。Checksums 可透过自动侦测和警示错误的功能,跨丛集保持数据的完整性。
8.时间延迟复制:防止主计算机的作业失误,例如意外删除窗体。
9.强化的performance_schema:协助用户得以监控使用最多资源的密集查询指令,对象,用户和应用程序,并可总集查询,执行绪,用户,主机和对象的统计数据汇整成新的摘要页面,新增功能让预设配置更加简易,而且耗费不到5%的成本。
10.mysql 5.6 纳入的新功能包含精确空间操作的地理信息系统,强化的IPv6 设备以及最佳化的服务器默认值。
MySQL 命令行实用程序。
MySQL 服务器端实用工具程序如下:
1.mysqld: sql 后台程序。该程序必须运行之后,客户端才能通过连接服务器来访问数据库
2.mysqld_safe:服务器启动脚本。在unix / netware 中推荐使用mysqld_safe来启动mysqld 服务器。mysqld_safe 增加了一些安全特性。例如当出现错误时重启服务器并向错误日志文件写入运行时间信息。
3.mysql.server:服务器启动脚本。该脚本用于使用包含为特定级别的,运行启动服务的脚本的,运行目录的系统。它调用mysqld_safe来启动mysql 服务器。
4.mysql_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务器。
5.myisamchk:用来描述,检查,优化和维护myisam 表的实用工具。
6.mysql.server:服务器启动脚本。在unix 中的MySQL 分发版包括mysql.server脚本。
7.mysqlbug:mysql 缺陷报告脚本。它可以用来向MySQL右键系统发送缺陷报告。
8.mysql_install_db:该脚本用默认权限创建MySQL授权表。通常只是在系统上首次安装MySQL 时执行一次。
MySQL 客户端实用工具程序如下:
1.myisampack:压缩myisam 表以产生更小的只读表的一个工具。
2.mysql: 交互式输入sql 语句或从文件以批处理模式执行他们的命令行工具。
3.mysqlaccess:检查访问主机名,用户名和数据库组合的权限的脚本。
4.mysqladmin:执行管理操作的客户程序,例如创建或删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件。mysqladmin还可以用来检索版本,进程,以及服务器的状态信息。
5.mysqlbinlog:从二进制日志读取语句的工具。在二进制日志文件中包含执行过的语句,可用来帮助系统从崩溃中恢复。
6.mysqlcheck:检查,修复,分析以及优化表的表维护客户程序。
7.mysqldump:将mysql 数据库转储到一个文件的客户程序。
8.mysqlhotcopy:当服务器在运行时,快速备份myisam 或isam表的工具。
9.mysql import:使用load data infile将文本文件导入相关表的客户程序。
10.mysqlshow:显示数据库,表,列以及索引相关信息的客户程序。
11. 显示系统或mysql 错误代码含义的工具。
MySQL workbench: 是下一代可视化数据库设计软件,MySQL workbench 为数据库管理员和开发人员提供了一整套可视化数据库操作环境,主要功能有:
1.数据库设计和模型建立
2.sql 开发
3.数据库管理
InnoDB存储引擎:
innodb 事务型数据库的首选引擎,支持事务安全表ACID,支持行锁定和外键。MYSQL5.5之后,innodb作为默认存储引擎,其特性有:
1.innodb给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全存储引擎。innodb锁定在行级并且也在select语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由的将InnoDB类型的表与其他MYSQL的表的类型混合起来,甚至在同一个查询中也可以混合。
2.InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
3.InnoDB存储引擎完全与mysql 服务器整合,innoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件。这与MYISAM不同。
使用主键约束:主键,主码。使表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一的标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。
show tables;
4.InnoDB 支持外键完整性约束:存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时定义时指定主键,InnoDB 会为每一行生成一个6字节的ROWID ,并以此作为主键。
5.InnoDB 被用在众多需要高性能的大型数据库站点上。
MyISAM 存储引擎:MyISAM基于ISAM存储引擎,并对其进行扩展。它是在web,数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入,查询速度,但不支持事务。
MyISAM特点:
1.大文件在支持大文件的文件系统和操作系统上被支持。
2.当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
3.每一个MyISAM 表最大索引数是64,这可以通过从新编译来改变。每个索引最大的列数是16个。
4.最大的键长度是1000字节,这也可以通过编译来改变。对于键长度超过250字节的情况,一个超过1024字节的键将被用上。
5.BOLB和TEXT列可以被索引。
6.Null值被允许在索引的列中。这个值占每个键的0-1个字节。
7.所有数字键值以高字节优先被存储以允许一个更高的索引压缩。
InnoDB与MyISAM 的比较:
如果要提供提交,回滚和崩溃恢复能力的事务安全(ACID)能力,并要求实现并发控制,InnoDB是个很好的选择。如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高 的处理效率;如果知识临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。如果只有Insert,select 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不适合事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用Archive 引擎。
一个数据库中多个表可以使用不同的引擎,使用合适的存储引擎,将会提高整个数据库的性能。
Memory 存储引擎:Memory存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
Memory特点:
1.Memory表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度。
2.Memory存储引擎执行Hash 和btree 索引。
3.可以在一个Memory表中有非唯一键
4.Memory表使用一个固定的记录长度格式。
5.Memory不支持BLOB OR TEXT列。
6.Memory支持auto_increment列和对可包含null 值的列的索引。
7.Memory表在素有客户端之间共享
8.Memory表内容被存在内存中,内存是Memory表和服务器在查询处理时的空闲中,创建的内部表共享。
9.当不再需要Memory表的内容时,要释放被Memory表使用 的内存,应该执行delete from 或者truncate table 或者删除整个表:drop table.
《第二章》
安装与下载:https://dev.mysql.com/downloads/mysql/#downloands
点击mysql-5.6.msi --install mysql products--access---find latest products--skip---choose a steup type[安装类型]--full[服务器&客户端都安装]/custom[自定义]--next--复选框[mysql server5.6 & documention]--安装。
services.msc
net start mysql
net stop mysql
连接数据库:
mysql -h 127.0.0.1 -u root -p
Navicat: Navicat mysql 是一个强大的MySQL 数据库服务器管理和开发工具。支持触发器,存储过程,函数,事件,视图,管理用户等,可以让用户用一种安全简便的方式快速的创建,阻止,访问,共享信息,支持中文,有免费版本。
下载地址:http://www.navicat.com/
MySQL dumper:MySQL dumper 使用基于PHP 开发的MySQL数据库备份恢复数据,解决了使用PHP进行大量数据库备份和恢复的问题。数百兆的数据库都可以方便的备份恢复,不用担心网速太慢而导致中断问题,方便易用。
下载地址:http://www.mysqldumper.de/en/
sqlyog: sqlyog 是一款简洁高效,功能强大的图形化MySQL数据库管理工具。使用sqlyog 可以快速直观的让用户从世界的任何角落通过网络来维护远端的MySQL 数据库。
下载地址: http://www.webyog.com/en/index.php
《第三章:数据库的基本操作》
#查看支持的搜索引擎
show engines;
#查看已存在的数据库
show tables;
#创建数据库
create database lx;
#查看数据库的定义
show create database lx;
#删除数据库
drop database lx;
功能 | myisam | memory | innoDB | archive |
存储限制 | 256TB | RAM | 64TB | None |
支持事务 | no | no | yes | no |
支持全文索引 | yes | no | no | no |
支持数索引 | yes | yes | yes | no |
支持哈希索引 | no | yes | no | no |
支持数据缓存 | no | N/A | yes | no |
支持外键 | no | no | yes | no |
如果要提供提交,回滚,崩溃恢复能力的事务安全(ACID)兼容能力,并要求实现并发控制,innoDB 是个很好的选择。
如果数据表主要用来插入和查询记录,则myISAM 引擎能提供较高的处理效率。
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的memory 引擎,MySQL 中使用该引擎作为临时表,存放查询的中间结果。
如果只有insert 和select 操作,可以选择archive 引擎,archive 存储引擎支持高并发的插入操作,但是本身不是事务安全的。archive 存储引擎非常适合存储归档数据,比如记录日志信息可以使用它。
《第四章:数据表的基本操作》
主键,又称主码,是表中一列或多列的组合,主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一的标识表中的一条记录,可以加快数据库查询到的速度。
外键约束: 外键用来在两个表的数据之间建立连接,它可以是一列或者多列,一个表可以有一个或多个外键,晚间对应的是参照完整性,一个表的外键可以为空,若不为空,则每一个外键值必须等于另一个表中主键的某个值。
非空约束:字段值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。
唯一性约束: 要求该列唯一,允许为空,但只能出现一个空指,唯一约束可以确保一列不出现重复值。
unique 和primary key 的区别: 一个表中可以有多个字段声明为unique,但只能有一个primary key 声明;生命为primary key 的列不能为空,但是声明unique 的字段允许空值存在。
默认约束:制定某列默认值。
#查看表字段信息
describe user_info;
#修改表中的字段 [change = modify]
alter table user_info change user_name user_name varchar(100);
#删除一个字段
alter table tableName drop columnName;
#更改存储引擎
alter table tableName engine = MyISAM;
#删除外键约束
alter table tableName drop foreign key 外键名
《第五章:数据类型介绍》
MySQL 支持多种数据类型,主要有数值类型,日期/时间类型和字符串类型。
1.数值类型:
整数类型:tinyint,smallint,mediumint,int,bigint
浮点小数类型: float,double
定点小数类型:decimal
2.日期/时间类型:year,time,date,datetime,timestamp
3.字符串类型:char,varchar,binary,varbinary,blob,text,enum,set 等。
数据类型 | 说明 | 存储需求 |
tinyint | 很小的整数 | 1个字节 |
smallint | 小的整数 | 2个字节 |
mediumint | 中等大小的整数 | 3个字节 |
int(integer) | 普通大小的整数 | 4个字节 |
bigint | 大整数 | 8个字节 |
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal(M,D),dec | 压缩的严格定点数 | M+2个字节 |
注意:在MySQL 中,定点数以字符串形式存储,在对精度要求较高的时候,使用decimal 类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以尽量避免做浮点数比较。
日期和时间类型:
类型名称 | 日期格式 | 日期范围 | 存储需求 |
year | yyyy | 1901-2155 | 1个字节 |
time | hh:mm:ss | 3个字节 | |
date | yyyy-MM-dd | 3个字节 | |
dateTime | yyyy-MM-dd hh:mm:ss | 8个字节 | |
timestamp | yyyy-MM-dd hh:mm:ss | 4个字节 |
注意:timestamp 与datetime 除了存储字节和支持的范围不同外,还有一个最大的区别就是:datetime 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;而timestamp 值的存储是以utc(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
字符串类型:
字符串类型用来存储字符串数据,除了可以存储字符串数据,还可以存储其他数据,比如图片和声音的二进制数据。字符串可以进行区分或者不区分大小写的串比较,还可以进行模式匹配查找。MySQL 中字符串类型指char,varchar,binary,varbinary,blob,text,enum和set
bolb类型:blob 是一个二进制大对象,用来存储可变数量的数据。blob 类型分为4种:tinyblob,blob,mediumblob ,longblob。
blob 列存储的是二进制字符串(字节字符串);text 列存储的是非二进制字符串(字符字符串)。blob 列没有字符集,并且排序和比较基于列值字节的数值;text 列有一个字符集,并且根据字符集对值进行排序和 比较。
数据类型 | 存储范围 |
tinyblob | 最大长度为255字节 |
blob | 最大长度为65535 字节 |
mediumblob | 最大长度为16777215字节 |
longblob | 最大长度为4294967295或4GB字节 |
如何选择数据类型:
MySQL 提供了大量的数据类型,为了优化存储,提高数据库性能,再任何情况下均应使用最精确的类型。
1.整数和浮点数:如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型,对于浮点数据列,存入的数值回对该列定义的小数位进行四舍五入。如果需要精度较高的则选择double 类型;
2.char 会删除尾部的空格,varchar 不会删除空格;
char 是固定长度字符, varchar 是可变长度字符;
char 处理速度比varchar 快,但会浪费存储空间。
存储引擎对于选择char 和varchar 的影响:
1.对于MyISAM存储引擎:最好使用固定茶馆年度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
2.对于InnoDB 存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用char 不一定比使用varchar 更好,但由于varchar 是按照实际的长度存储,比较节省空间,所以对磁盘I/O 和数据存储总量比较好。
enum 和set:
enum 只能取单值,它的数据列表是一个枚举集合。
set 可取多值,空字符串也是一个合法的set 值。再需要取多个值的时候,适合使用set 类型(比如爱好)。
blob 和 text:
blob 是二进制字符串,text 是非二进制字符串,两者都可以存放大容量的信息。blob 主要存储图片,音频信息等,而text 只能存储纯文本文件。
常见运算符介绍:主要有四大类[算术运算符,比较运算符,逻辑运算符,位操作符]
算术运算符:+,-,*,/,%[求余,模运算]
比较运算符:> ,<,=,>=,<=,!=, in, between and,is null,greatest,least,like,regexp 等。
逻辑运算符:not ,!,and ,&& ,or ,||,xor[逻辑异或]
位操作运算符:&,|,<< [左移],>> [右移]
is null: 判断一个值是否为null
is not null: 判断一个值是否不为null
least: 在有多个参数时,返回最小值
greatest:在有多个参数时,返回最大值
isNull: 与is null 作用相同
in: 判断一个值是in 列表中的任意一个值
not in :判断一个值不是in 列表中的任意一个值
like: 通配符匹配
regexp: 正则表达式匹配
#算术运算符
select num,num+10 as 'sum', num-10 as 'sub',num*2 as 'mul', num /2 as 'div',num % 2 as 'yu' from product_info;
#
select * from product_info where code is null;
#between ,包括 3,7
select num from product_info where num between 3 and 7;
# 多值之间取最小
select least(1,4,5) from product_info;
如果转换表的存储引擎,将会失去和原引擎相关的特性。比如,如果将一张InnoDB表转换为MyISam ,然后再转换为I弄弄DB,原InnoDB 表中的所有外键都会丢失。
为了更好的控制转换的过程, 可以使用mysqldump工具将数据导出到文件,然后修改创建表语句的存储引擎。