:【一】概论
(1)什么是 MySQL?
一种关系型开源数据库,定义了存储信息的结构。
在数据库中,存在着一些表。类似 HTML 表格,数据库表含有行、列以及单元。
在分类存储信息时,数据库非常有用。一个公司的数据库可能拥有这些表:"Employees员工", "Products产品", "Customers客户" 以及 "Orders订单"
(2)应用状况
国内企业包括百度,阿里,腾讯,新浪,搜狐,网易等企业,都在使用MySQL数据库
(3)关系型数据库
关系型:MySQL、sqlserver、db2
介于关系和非关系型之间:MongoDB
非关系型:NoSQL,泛指非关系型的数据库。主要有NoSql、Cloudant
(4)关系型与非关系型区别
关系型数据库:
关系型数据库,是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织
非关系型数据库:
以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些
时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id
取出相应的value就可以完成查询。所以性能较高。NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高
并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就
为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
(5)开源
因为MySQL是开放源码的,所以任何人都可以在GPL(通用性公开许可证General Public License)的许可下下载并根据需求进行修改
(6)开发端口
mysql的默认端口是3306,可以编辑用户目录下的 .my.cnf 文件进行修改
代理服务器常用以下端口:
① HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
②SOCKS代理协议服务器常用端口号:1080
③ FTP(文件传输)协议代理服务器常用端口号:21
④ Telnet(远程登录)协议代理服务器常用端口:23
【二】数据库5个基本单位
(1)数据库服务器
(2)数据库
(3)数据表
(4)数据字段 / 数据列
(5)数据行
下面分开解析下
(1)数据库服务器:用来运行数据库服务的一台电脑
(2)数据库:一个数据库服务器里有多个数据库。主要用来分类使用,可以建立交通信息数据库、游戏数据库、酒店开房数据库等。用来将各个不同用途的数据,按照业务进行大块划分。
(3)数据表:建立不同数据表,来专门区分不同的数据。例如游戏数据库中:用户数据、人物数据、装备数据、充值数据等
(4)数据字段:也叫数据列,就是数据表格里的列,根据类型进行区分。例如姓名、年龄、性别
(5)数据行:每个表的行里存放真实数据
【三】数据库安装
环境集成包里一般已经安装,如果要全新安装MySQL服务器,下面说下步骤
①下载安装包
②按照步骤安装
③选择服务器安装:1.develop服务器为开发机【推荐】;2. server only只安装服务器;3. client ony只安装客户操作端;4. full全部安装;5. custom自定义
④服务器参数修改:配置文件类型,TCP/IP开放的端口,mysql默认的端口是3306
⑤设置密码:自定义用户名和密码。而环境集成包默认用户为root,密码为root
⑥日志文件存放位置确认:1. Bin log是二进制文件;2. Error Log是错误文件;3. slow Query Log慢查询文件
⑦启动服务
注意:如果不想太过麻烦,可以安装phpstudy一键安装环境包,不需要繁琐的配置,即可形成环境,自带的mysql数据库
【四】数据语句操作类型
SQL结构化查询语言(Structured Query Language)是操作数据库核心,是关系型数据库操作语言
SQL语句按照功能范围不同划分3个类别1. 数据定义语言;2 .数据操作语言;3. 数据控制语言
1. 数据定义语言DDL(Data Definition Language)
定义不同的数据段、数据库、表、列、索引等。常用的语句关键词包括create创建、drop删除、alter改变等
2. 数据操作语言DML(Data Manipulation Language)
添加、删除、更新、查询数据库记录,并检查数据完整性。常用的语句关键词包括insert添加、delete删除、update更新、select选择
3. 数据控制语言DCL(Data Control Language)
用于控制不同数据段直接的许可和访问级别的语句直接的许可和访问级别的语句,定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant发放、
revoke撤销等
【五】MySQL连接数据库
方法一:
安装后,在开始菜单里单击MySQL Command Line Client(MySQL命令行客户端),打开对话框输入用户名密码,默认为root。即可连接上
方法二:
对于环境集成包来说,如果想通过命令行连接数据库,可以先将MySQL加入windows环境变量,然后在命令行下直接操作。
输入命令连接
mysql - h localhost -u -root -p
//参数
//-h 数据库连接地址,连接本机可不填;
//-u 要连接的用户
//-p 使用密码登录
因为是本机,所以可以省略个别参数,输入
mysql -u root -p
之后在Enter password:输入root即可连接
拓展:
①加入环境变量,将路径复制粘贴到控制面板--高级---环境变量--PATH后,追加;---粘贴路径--点击确定
②连接成功后会输出连接次数,例如以下表示连接第3次
Your MySQL connection id is 3.
【六】数据库操作
注意:MySQL写法与PHP类似,每行结束后加 ;
(1)创建数据库
语法:create database 数据库名;
案例:创建名为data的数据库
mysql > create database data;
Query OK,1 row affected(0.00 sec)
Query OK表示命令执行成功,所有DDL和DML操作执行成功后都会显示"Query OK",执行成功。
1 row affected表示操作只影响了数据库里一行的记录;
0.00 sec记录了操作执行时间;
(2)查看数据库(显示当前所有数据库)
语法:show databases:
(3)选中数据库
语法:use 数据库名;
案例:选中名为data的数据库
mysql > use data;
Database changed
注意:可以用use语句随意来回切换
(4)查看数据库中的表
语法:show tables;
(5)删除数据库
语法:drop database 数据库名;
【七】数据表操作
(1)创建表
语法:create table 表名(字段名1 字段类型1...字段名n 字段类型n);
案例:创建一个表名为user的表,第一个字段为username,字段类型为varchar,长度为32;第二个字段为password,字段类型为varchar,长度为32.
mysql > create table user(username varchar(32),password varchar(32));
//Query OK , 0 rows affected (0.13 sec)
(2)查看表字段结构信息
语法:desc 表名;(describe描述)
案例:查看上面刚创建的user表,输入以下命令即可查看
desc user;
(3)删除表格
语法:drop table 表名;
与删除数据库语法相同
(4)建表语句
查看存在的建表语句
show create table user;
输入后会打印出建表语句
(5)指定表引擎和字符集
在创建表之后,常用MyISAM或innoDB引擎。
在指定引擎时可以使用
ENGINE=InnoDB;
指定表默认字符集
DEFAULT CHARSET = utf8;
(6)修改表名
语法:alter table 表名 rename 新表名;
案例:修改user表的表名为myuser
mysql > alter tabke user rename myuser;
Query OK , 0 rows affected (0.01 sec)
(拓展)
①字段类型
int为整型;float浮点型;char和varchar字符串;
【八】数据字段操作
(1)修改表字段类型
语法:alter table 表名 modify 字段名 varchar(20);
翻译:alter修改;modify改变;
案例:修改user表的username字段类型为char(10)
mysql > alter table user modify username char(10);
Query OK , 0 rows affected (0.14 sec)
(2)增加表字段
语法:alter table 表名 add column 字段名 类型;
翻译:column行
案例:向user表增加age字段,类型为整型
mysql > alter table user add column age int;
Query OK , 0 rows affected (0.11 sec)
(3)增加字段时控制字段顺序
①添加到首位
语法:alter table 表名 add 字段名 字段类型 first;
案例:向user表单首位添加id字段
mysql > alter table user add id int(10) first;
Query OK , 0 rows affected (0.16 sec)
②添加到指定位置 / 某个字段后
语法:alter table 表名 add 字段名 字段类型 after 字段名;
案例:向user表单添加sex字段到name后
mysql > alter table user add sex char(10) after name;
Query OK , 0 rows affected (0.09 sec)
③删除表字段
语法:alter table 表名 drop 字段名;
案例:删除user表的sex字段
mysql > alter table user drop sex;
Query OK , 0 rows effected (0.14 sec)
④表字段改名
语法:alter table 表名 change 字段原名 字段新名 字段类型;
案例:修改表字段age为user_age
mysql > alter table user change user_age char(10);
Query OK , 0 rows effected (0.11 sec)
【九】MySQL数据类型
(1)数据类型
1. 数值类型(整型、浮点型);
2. 字符串类型;
3. 时间日期类型;
4. 复合类型;
5. 空间类型(常用于科学性工作)
(2)数据类型详解
1. 整型
数据类型 所占字节 字节范围
tinyint 1字节 -128~127
samllint 2字节 -32768~32767
mediumint 3字节 -8388608~8388607
int 4字节 -2147483648~2147483647
bigint 5字节 +-9.22*10的18次方
2. 浮点型
数据类型 所占字节 值范围
float(m,d) 4字节 单精度浮点型,m总个数,d小数位
double(m,d) 8字节 双精度浮点型,m总个数,d小数位
decimal(m,d) decimal是存储为字符串的浮点数
3. 字符类型
数据类型 所占字符 值范围
char 0-255字节 定长字符串
varchar 0-255字节 变长字符串
4. 时间类型
数据类型 所占字符 值范围
date 3字节 日期,格式:2017-09-18
time 3字节 时间,格式:08:42:30
database 8字节 日期时间,格式:2017-09-18 08:20:30
timestamp 4字节 自动存储记录修改的时间
year 1字节 年份
5. 集合类型
数据类型 说明 案例
set 集合类型 set("member1","member2"...)
enum 枚举类型 enum("member1","member2"...)
6. 拓展
创建时在整型或浮点型后接上default值或not null;
【十】MySQL字符集
为了更好识别中英文,对于常用的符号进行编码,这个编码就是字符集
现在浏览器基本用的unicode编码的UTF-8,为可变字节编码;而GBK编码是2字节编码,所以在火狐浏览器转换编码会出现乱码
(1)常见字符集
英文字符集
ASCII 美国标准信息交换代码 单字节
GBK 汉字内码扩展规范 双字节
Unicode 万国码 4字节
UTF-8 Unicode可变长度字符编码 1-6字节
【十一】MySQL表引擎
MySQL强大之处在于插件式存储引擎,可以基于表的特点使用不同的存储引擎,从而达到最好的性能
(1)查看当前服务器支持的所有引擎
命令行输入以下命令即可查看
show engines;
(2)常用引擎
MyISAM 常用 读取效率高
innoDB 常用 写入、支持事务处理等
Archive 归档引擎 压缩比为1:10,用于数据归档
NDB 不常用 主要在MySQL集群服务器中使用
下面做下详解
①MyISAM
不支持事务,表锁(表级锁,加锁会锁住整个表),支持全文索引,操作速度快。常用于读取多的业务
MySIAM存储引擎表,由MYD存放数据文件,MYI存放索引文件组成。
MySQL数据库只缓存其索引文件,数据文件的缓存由操作系统本身来完成
②innoDB
支持事务,主要面向在线事务处理方面的应用
行锁设计,支持外键,即默认情况下读取操作不加锁
innoDB常用于处理数据量大的业务
(3)创建表的时候可以指定对应引擎
【十二】MySQL数据库索引
作用:索引用于快速找出在某个列中有特定值的行
注意:索引不易过多,索引写入的越多,修改的速度就越慢。因为写入修改数据时,也要修改索引。
(1)索引类型
普通索引、唯一索引、主键索引、全文索引
①普通索引
语法:alter table 表名 add index(字段);
案例:为myuser表的username字段增加索引
mysql > alter table myuser add index(username);
Query OK , 0 rows affected(0.19 sec)
②唯一索引
语法:alter table 表名 add unique(字段);
翻译:unique唯一的
案例:为myuser表的password字段增加唯一索引
mysql > alter table myuser add unique(passowrd);
Query OK , 0 rows affected (0.13 sec)
③全文索引
语法:alter table 表名 add fulltext(字段);
案例:为myuser表的age字段增加全文索引
mysql > alter table myuser add fulltext(age);
Query OK , 0 rows affected(0.14 sec)
④主键索引
语法:alter table 表名 add primary(字段);
翻译:primary主
案例:为myuser表的id字段增加主键索引
mysql > alter table myuser add primary(id);
Query OK , 0 rows affected(0.15 sec)
拓展:创建表时,也可以声明索引
在创建表语句后加上对应的类型即可声明索引
primary key(字段);-------主键索引
index [索引名](字段);----普通索引
fulltext [索引名](字段);---全文索引
unique [索引名](字段);----唯一索引
【十三】MySQL增删改查之插入
(1)插入语法一
语法:insert into 表 values(值1,值2,值n);
案例:向myuser表中插入数据:id为1,名字为Tony,密码为123,年龄为23
insert into myuser values(1,'tony',123,23)
(2)插入语法二
语法:insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
案例:向myuser表中插入数据:id为1,名字为Tony,密码为123,年龄为23
insert into myuser(id,username,password,user_age) (1,'Tony',123,23);
(3)对比
语法1的写法,表里有多少个字段就必须插入多少个值。若有默认值不想传,可以写上null
语法2的写法,除了必须值外,默认值可以省略不写,MySQL会自动补充默认值
推荐语法二
(4)插入多条数据
语法二经过变形,可以一次插入多条数据
语法:insert into 表名(字段1,字段2,字段n) values(值1,值2,值n),(值1,值2,值3);
案例:向myuser数据表插入多条数据,名字为one,two等
mysql > insert into myuser(id,username,password,user_age) values(1,'one',123,23),(2,'two',123,23);
【十四】MySQL增删改查之查询
(1)基础查询
语法:select * from 表名;
(2)指定字段查询
语法:select 字段 from 表名;
案例:查询myuser表里的id字段所有结果
select id from myuser;
(3)去重查询单个字段distinct
语法:select distinct 字段 from 表名;
案例:查询myuser表里的年龄项user_age
select distinct user_age from myuser;
(4)条件查询where
语法:select *from 表名 where 字段名=字段值;
案例:筛选出表myuser里所有有关Tony的数据
select *from myuser where username='Tony';
where后可以接的条件,>,<,<=,>=,!=,=等条件判断
逻辑运算符,where后面也可以接其他逻辑运算符or,and
(5)结果集排序
语法:select 字段 from 表 order by 字段 排序关键词;
案例:查询myuser表里的username字段,按照降序desc进行排列
select username from myuser order by username desc;
排序关键词:
asc( ascending) 升序排列,从小到大(默认);
desc(descend) 降序排列,从大到小;
(6)结果集排序---多字段排序
语法:select 字段 from 表 order by 字段1,字段2,字段n 排序关键词,;
案例:查询myuser表里的username字段和id字段等多字段,按照降序desc进行排列
select username from myuser order by username,id desc;
注意:如果排序字段的顺序一样,则按照第二个排序字段进行排序
(7)结果集限制
查询结果如果只想显示一部分,可以使用limit关键字进行数量限制
语法:select 字段 from 表单 limit 数量;
案例:选出myuser表里username数据,但只显示出3个
select username from myuser limit 3;
(8)限制结果集并排序
语法:select 字段 from 表 order by 字段 排序关键词asc/desc limit 数量;
【十五】统计类函数
常用的统计类函数包含
①sum 求和;
②count 统计总数;
③max 最大值;
④min 最小值;
⑤avg 平均值;
下面依次介绍
①sum 求和
select sum(id) from myuser;
②count 统计总数
select count(id) from myuser;
③max 最大值;
④min 最小值;
⑤avg 平均值;
其他语法类似
【十五】多表联合查询
将多张表并排查询,多表查询的本质:表连接
当要查询多个 表字段时,可以用表连接来实现,分为内连接和外连接
(1)内连接:将两个表存在连接关系的字段,符合连接关系的那些形成记录集;
语法:select 表名1.字段,表名2.字段 from 表名1,表名2 where 条件;
案例:连接表one和two,查询两表里username一样的数据
场景:查询用户买过哪些东西,将已购买和未购买作对比
select one.username,two username from one,two where one.username=two.username;
(2)外连接:选出其他不匹配的记录,分为外左连接和外右连接
①左连接
语法:select 表1.字段,表2.字段, from 表1 left json 表n on 条件;
场景:查询用户没有买过哪些东西,将已购买和未购买作对比
案例:以左表one为主,查询哪些用户未购买过该商品,并将用户信息打印出来
select* from one left join two on one.name=two.name;
注意:写在前面的即为左表,主表格
②右连接
以右表为主进行对比,语法和左连接类似,将left改为right即可
select* from one right join two on one.name=two.name;
(3)子查询
查询时,需要的条件是另一个session的结果,这时需要子查询
子查询关键字in、not in、=、!=、exists、not exists
①案例:将id为1,3,4的用户查询输出
select* from myuser where id in(1,3,4);
②案例:表2的查询id结果是表1查询id的条件---简单理解就是嵌套查询
select* from one where id in(select id from two);
【十六】更新
(1)查询
更新前查询出具体数据
案例:在one表里查询出id为3的用户
select * from one where id=3;
(2)更新
注意:更新操作结尾要加上条件限制,否则会更新整个表单
语法:update 表名 set 字段名=修改值 where 字段名=字段值;
案例:修改one表里的name为Tony,id为2的字段(id即为限制条件)
update one set name='Tony' where id=2;
(3)更新多个字段
语法:update 表名 set 字段名=修改值,字段值=修改值 where 字段名=字段值;
(4)同时更新两个表
update 表1,表2 set 字段1=值1,字段2=值2 where 条件
【十七】删除
(1)基本语法
使用delete删除
语法:delete from 表名1 where 条件;
案例:将表单user里id大于5的用户删除
delete from user where id>5;
注意:不加where条件的话,会将这个表删干净,包括具体数据
(2)清空表
语法:truncate table 表名;
与delete删除数据不添加where条件时,产生结果相同
但delete会返回删除的记录数,而truncate返回的始终为0
注意:删除重要数据前要备份
【十八】DCL语句
创建库语句
(1)创建权限
语法:grant 权限 on 库.表 to '用户'@'主机' identified by '密码';
案例:grant select,insert on two.myuser to'root'@'localhost' identified by '4311';
给予root用户,在本机连接two数据库myuser表的权限,操作表具有查询和写入的权限
(2)删除权限
revoke 权限 on 库.表 from '用户'@'主机';
(3)参数说明
grant all 给予所有权限;
revoke all 移除所有权限;
【十九】MySQL常用词语
表字段的增删改查 insert,delete,update,select
(1)select
选择,从表中选取数据展示select* from 表名 where;
(2)update
更新,更新数据update 表名 set 表名 字段名=字段值 where 条件;
(3)delete
删除,删除数据delete from 表名 where 条件;
(4) drop
删除表字段,alter table 表名 drop 字段名;
(5)insert
添加字段,insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
(6)order by
结果集查询排序,select 字段 from 表 order by 字段 排序关键词;
(7)limit
查询结果集限制展示,select 字段 from 表单 limit 数量;
【总结】
(1)数据库无法重命名,解决方案为先删除后新加,间接改名;
(2)删除表会导致表和数据均删除,所以一般在删除表之前都会备份数据