Mysql入门和基本知识

第一章 Mysql入门

1.1 了解数据库

1.1.1什么是数据库?

MySQL是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是应用软件。

数据库:数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加,修改,删除及查询操作。

关系型数据库:数据库中的记录是有行有列的数据库就是关系型数据库,与之相反的就是NoSQL数据库了。

常见的数据库管理系统

MYSQL开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL5.5版本之后都是由Oracle发布的版本。

Oracle收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

SQLServerMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

还有DB2,SyBase,SQLite数据库

1.1.2 Mysql的发展史

l MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。

l 1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。Monty直接借助于mSQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,决心自己重写一个SQL支持。

l 1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。

 

到了1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现了。在接下来的两年里,MySQL被依次移植到各个平台。

l 1999~2000年,MySQL AB公司在瑞典成立。Monty雇了几个人与Sleepycat合作,开发出了Berkeley DB引擎, 由于BDB支持事务处理,因此MySQL从此开始支持事务处理了。

l 2000,MySQL不仅公布自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。同年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。

2001年,集成Heikki Tuuri的存储引擎InnoDB,这个引擎不仅能持事务处理并且支持行级锁。后来该引擎被证明是最为成功的MySQL事务存储引擎。MySQL与InnoDB的正式结合版本是4.0

l 2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能。

2008年1月MySQL AB公司被Sun公司以10亿美金收购MySQL数据库进入Sun时代。在Sun时代,Sun公司对其进行了大量的推广、优化、Bug修复等工作。

l 2008年11月,MySQL 5.1发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。

2009年4月,Oracle公司以74亿美元收购Sun公司,自此MySQL数据库进入Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被Oracle公司收购

l 2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎MySQL 5.5不是时隔两年后的一次简单的版本更新,而是加强了MySQL各个方面在企业级的特性。Oracle公司同时也承诺MySQL 5.5和未来版本仍是采用GPL授权的开源产品。

1.1.3  Mysql的安装 

  1. mysql安装与使用

 

 

 

 

登录

格式1:cmd>  mysql –u用户名 –p密码

例如:mysql -uroot –proot

格式2:cmd>  mysql --user=用户名 --host=ip地址 --password=密码

1.2 Sql语句

1.2.1  Sql语句介绍

什么是SQL?

全称Structured Query Language,简称SQL,中文叫结构化查询语言。

关系数据库语言的国际标准。SQL92SQL99

不只是mysql还有其他数据库SQL92或者SQL99这些国际SQL标准基础之上它们还扩展了自己的一些SQL语句比如MySQL中的limit关键字

l SQL分类:

数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等

数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等

数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

1.2.2 子段类型

数字型:int

浮点型:double

字符型:varchar(可变长字符串)

日期类型:date(只有年月日,没有时分秒)

分类

类型名称

说明

整数类型

tinyInt

很小的整数

smallint

小的整数

mediumint

中等大小的整数

int(integer)

普通大小的整数

小数类型

float

单精度浮点数

double

双精度浮点数

decimal(m,d)

压缩严格的定点数------开发时用

日期类型

year

YYYY  1901~2155

time

HH:MM:SS  -838:59:59~838:59:59

date

YYYY-MM-DD 1000-01-01~9999-12-3

datetime-开发用

YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59

timestamp

YYYY-MM-DD HH:MM:SS  1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

文本、二进制类型

CHAR(M)

M为0~255之间的整数

VARCHAR(M)

M为0~65535之间的整数

TINYBLOB

允许长度0~255字节

BLOB

允许长度0~65535字节

MEDIUMBLOB

允许长度0~167772150字节

LONGBLOB

允许长度0~4294967295字节

TINYTEXT

允许长度0~255字节

 

TEXT

允许长度0~65535字节

 

MEDIUMTEXT

允许长度0~167772150字节

 

LONGTEXT

允许长度0~4294967295字节

 

VARBINARY(M)

允许长度0~M个字节的变长字节字符串

 

BINARY(M)

允许长度0~M个字节的定长字节字符串

 

1.2.3创建表

create table 表名(

   字段名 类型(长度) 约束,

   字段名 类型(长度) 约束

);

单表约束:

    * 主键约束:primary key

    * 唯一约束:unique

    * 非空约束:not null

    * 注意:主键约束 = 唯一约束 + 非空约束

例如:

###创建分类表

CREATE TABLE sort (

  sid INT PRIMARY KEY, #分类ID

  sname VARCHAR(100) #分类名称

);

 

1.2.4 查看表

查看数据库中的所有表:show tables;

查看表结构:desc 表名;

1.2.5 删除表

drop table 表名;

1.2.6 修改表

alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.

alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.

alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.

alter table 表名 drop 列名; --修改表删除列.

rename table 表名 to 新表名; --修改表名

alter table 表名 character set 字符集; --修改表的字符集

1.2.7 插入记录:insert

insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列

insert into 表 values (值1,值2,值3..); --向表中插入所有列

insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表

insert into 表 values select * from 表

1.2.8 CMD中文乱码

修改my.ini文件,然后重启mysql服务器

 

 

1.2.9聚合函数

特点:只对单列进行操作

常用的聚合函数: 

sum():求某一列的和

avg()求某一列的平均值

max()求某一列的最大值

min()求某一列的最小值

count()求某一列的元素个数

1.3 表与表之间的关系(表与表之间数据的关系)

1.3.1 外键

主从表的理解

 

主表是:商品表。主表中,应该有一个字段去关联从表,而这个关联字段就是外键

从表是:分类表。从表中,应该有一个字段去关联主表,而这个关联字段就是主键

主键外键的理解

 

alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从表主键)

1.3.2 一对一关系

案例:(打比方)一个丈夫只能有一个妻子

建表语句

CREATE TABLE wife(

id INT PRIMARY KEY ,

wname VARCHAR(20),

sex CHAR(1)

);

CREATE TABLE husband(

id INT PRIMARY KEY ,

hname VARCHAR(20),

sex CHAR(1)

);

一对一关系创建方式1之外键唯一

添加外键列wid,指定该列的约束为唯一(不加唯一约束就是一对多关系

ALTER TABLE husband ADD wid INT UNIQUE;

n 添加外键约束

alter table husband add foreign key (wid) references wife(id);

1.3.3 一对多关系

 

案例:一个分类对应多个商品

 

1.3.4 多对多关系

 

1.4 多表关联查询

1.4.1 交叉连接

l 隐式交叉连接

SELECT  * FROM A, B

l 显式交叉连接

SELECT  *  FROM  A  CROSS  JOIN  B

1.4.2 内连接

l 隐式内连接

SELECT  *  FROM  A,B  WHERE A.id = B.id

l 显式内连接

SELECT  *  FROM  A  INNER JOIN  B ON A.id = B.id

1.4.3 外连接

左外连接:LEFT JOIN 或者 LEFT OUTER JOIN

SELECT  *  FROM  A  LEFT  JOIN  B ON A.id = B.id

右外连接::RIGHT JOIN 或者 RIGHT OUTER JOIN

SELECT  *  FROM  A  RIGHT  JOIN  B ON A.id = B.id

l 全外连接(MySQL不支持FULL  JOIN 或 FULL OUTER JOIN

SELECT  *  FROM  A  FULL JOIN  B ON A.id = B.id

1.4.4 分页查询

l 格式:

SELECT * FROM table LIMIT [offset,] rows

1.5 Mysql事务处理

1.5.1事务概述

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

事务用来管理DML操作,比如 insert,update,delete 语句

一般来说,事务是必须满足4个条件(ACID):

l Atomicity(原子性)

l Consistency(稳定性)

l Isolation(隔离性)

l Durability(可靠性)

对于ACID的解释如下:

原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。

稳定性(一致性)数据库在事务执行前后状态都必须是稳定的。

隔离性:事务之间不会相互影响。

可靠性(持久性)事务执行成功后必须全部写入磁盘。

1.5.2MySQL事务支持

常见的操作有一下三个:

l BEGIN或START TRANSACTION;显式地开启一个事务;

l COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;

l ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

第二章 进一步了解Mysql

2.1 mysql 架构

逻辑架构图1

 

逻辑架构图2

 

执行流程图

2.1.1 存储引擎介绍

多存储引擎是mysql有别于其他数据库的一大特性;

* 存储引擎是针对表的

* MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB

查看存储引擎show engines;

Innodb

Myisam

存储文件

.frm 表定义文件

.ibd 数据文件

.frm 表定义文件

.myd 数据文件

.myi 索引文件

表锁、行锁

表锁

事务

ACID

不支持

CRDU

读、写

读多

count

扫表

专门存储的地方

索引结构

B+ Tree

B+ Tree

2.1.2 MySQL物理结构

MySQL是通过文件系统对数据进行存储和管理的。

MySQL从物理结构上可以分为日志文件和数据文件。

MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志中继日志等。

错误日志(err log):

* 默认是开启而且从5.5.7以后无法关闭错误日志

* 记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息

默认的错误日志名称:hostname.err

* 错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。

* log_error可以直接定义为文件路径,也可以为ON|OFFlog_warings只能使用1|0来定义开关启动

2.1.3数据文件

查看MySQL数据文件:SHOW VARIABLES LIKE ‘%datadir%’;

.frm文件主要存放与表相关的数据信息,主要包括表结构的定义信息

.ibd和.ibdata文件:用来存储InnoDB存储引擎表数据和索引信息

.myd文件主要用来存储使用MyISAM存储引擎的表数据信息

.myi文件主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树。

2.2 Mysql索引

2.2.1 创建索引

CREATE INDEX index_name ON table(column(length)) 

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

 

CREATE UNIQUE INDEX index_name ON table(column(length)) 

CREATE FULLTEXTINDEX index_name ON table(column(length)) 

 

ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))

2.2.2删除索引

DROP INDEX index_name ON table

2.3MySQL性能优化之查看执行计划explain

2.3.1介绍

l Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。

通常我们是使用的explain,以及slow query log都无法做到精确分析,但是Query Profiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。不过该工具只有在MYSQL 5.0.37以及以上版本中才有实现。

默认的情况下,MYSQL的该功能没有打开,需要自己手动启动

2.3.2语句使用

show profile  show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.

show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条

 

show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列

 

show profile 还可根据 show profiles 列表中的 Query_ID ,选择显示某条记录的性能分析信息

 

2.3.3开启Profile功能

l Profile 功能由MySQL会话变量 : profiling控制,默认是OFF关闭状态。

查看是否开启了Profile功能:

* select @@profiling;

* show variables like ‘%profil%’;

开启profile功能

set profiling=1; --1是开启0是关闭

2.3.4示例

  1. 查看是否打开了性能分析功能

select @@profiling;

 

  1. 打开 profiling 功能

set profiling=1;

 

  1. 执行sql语句

 

  1. 执行 show profiles 查看分析列表
  1. 查询第二条语句的执行情况

show profile for query 2;

 

  1. 可指定资源类型查询

show profile cpu,swaps for query 2;

2.4 Mysql 

1.表级锁行级锁

2.共享锁、排他锁、间隙锁

猜你喜欢

转载自www.cnblogs.com/wnlsq/p/12109687.html