Mysql入门和基本知识

第一章 Mysql入门

1.1 了解数据库

1.1.1什么是数据库?

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

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

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

常见的数据库管理系统

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

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

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

D 还有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发布,它只面向一小拨人,相当于内部发布。

l 到了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语句介绍

l 什么是SQL?

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

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

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

l SQL分类:

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

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

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

n 数据查询语言:简称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中文乱码

l 修改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)

);

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

n 添加外键列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 外连接

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

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

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

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

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

l 事务用来管理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|OFF;log_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关闭状态。

l 查看是否开启了Profile功能:

* select @@profiling;

* show variables like ‘%profil%’;

l 开启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.共享锁、排他锁、间隙锁

原文地址:https://www.cnblogs.com/wnlsq/p/12109687.html

时间: 2024-08-02 00:58:53

Mysql入门和基本知识的相关文章

MySQL入门(三)

写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想写有关SQL的部分的,因为这个部分其实很简单,基本上大学只要好好听听数据库概论这门课基本上都能写满足功能的SQL,但是后来想想,SQL其实是人和数据库交互的一种接口,不会SQL确实是不可以的,写的不好感觉不出数据库有多么的强大,甚至有可能会让人产生出数据库慢的坏印象. MySQL作为most popular的

MySQL入门(alter语法 与 外键)

MySQL入门(三) 字段的修改.添加.与删除 修改表字段使用alter table语句,谨记! create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter table tf1 modify x char(4) default ''; alter table tf1 change y m char(4) default ''; # 增加 mysql>: alter table 表名 add 字段名

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

MySQL入门02-MySQL二进制版本快速部署

在上篇文章 MySQL入门01-MySQL源码安装 中,我们介绍了MySQL源码安装的方法.源码安装虽然有着更加灵活和更加优化等诸多优势.但源码编译安装部署的过程相对复杂,而且整个过程所花费的时间很长.对于一整套系统和硬件完全一样的机器,其实完全可以只在一台机器源码安装,然后打包好编译出来的二进制版本,拷贝到其他机器解压,直接进行一些配置即可. 本篇文章就来介绍一下二进制版本安装配置MySQL的整个过程. 1.上传二进制版本 2.规划数据存放目录 3.解压二进制版本的MySQL 4.添加组和用户

[python] 专题九.Mysql数据库编程基础知识

在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 首先下载mysql-5.0.96-winx64,安装

21分钟 MySQL 入门教程 &amp;&amp; mysql数据类型

转自:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1 http://www.cnblogs.com/zbseoag/archive/2013/03/19/2970004.html 21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录

MySQL 入门教程

MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称; 列(row): 具有相同数据类型的数据的集合; 行(col): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 键(key):

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

PHP链接Mysql数据库的小知识

1:在PHP写隔行变色有三种写法(但是最好的是用js+css) (1)CSS: tr:nth-child(even){             background: #cad9ea;         } even:代表偶数: ood:代表奇数:   (2)PHP: <?php                 if($n %2 == 0){            ?>            <tr style="background: #cad9ea"> <