MySQL入坑手册(含教学视频)
2017-04-06
小螺号
码个蛋 码个蛋
码个蛋
WeChat ID codeegg
Intro 在这,我们相互学习,共同成长,分享使我们并不孤单. BRVAH@www.recyclerview.org
前言
MySQL是最流行的关系型数据库管理系统
作者
技能点乱点的全炸工程师
视频
在「码个蛋」公众号中回复“20170405”获取
目录
数据库的常识
关系型数据库
非关系型数据库
搭建Mysql环境
windwos
linux
工作流程
库操作
存储引擎
表操作
数据基本操作
支持的数据类型
字段属性
数据高级操作
关系
数据库的常识
数据库分为两大阵营:关系型数据库,非关系型数据库。
关系型数据库SQL
定义:
建立在关系模型上的数据库。
关系模型:
通过各种关系来体现数据与数据之间的联系的模型。
关系型数据库:
大型(ORACLE,DB2),中型(mysql,SqlServer),小型(access)
特点:
数据的灵活性 数据库管理系统不是把数据简单堆积,它在记录数据信息的基础上具有很多的管理功能,如输入、输出、查询、编辑修改等。
数据的结构化 数据库中的数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征。
非关系型数据库NOSQL:Not Only SQL
定义:
所有不是关系型数据库的数据库都是非关系型数据库
非关系型数据库保存数据的方式:
键值对
特点:
运行在内存
使用键值对来保存和表示数据
运行之后,会进行数据同步(将内存的数据写入到磁盘)
两者对比
保存数据的介质不同(关系型在磁盘,非关系型在内存)
非关系型数据库效率比关系型数据库高得多
关系型数据库比非关系型数据库安全
2
搭建Mysql环境
windwos
使用安装包 .msi
使用zip解压的形式
将 my-default.ini 重命名为my.ini
更改相关配置~~
basedir = D:\MySQL\Server\mysql-5.6.20-win32
datadir = D:\MySQL\Server\data
mysqld -install
net start mysql
linux
sudo apt-get install mysql-server
apt isntall mysql-client
apt install libmysqlclient-dev
测试是否安装成功 `sudo netstat -tap | grep mysql`
工作流程
1. 客户端发送连接请求,建立连接:mysql –h –P –u –p
h:host,ip地址或者域名,默认可以没有代表localhost
P:大写,端口默认为3306
u:username,用户名
p:password,用户密码
2. 准备SQL语句:逐行执行,以分号为结束符
3. 发送SQL语句:发送给服务器
4. 服务器接收SQL并执行
5. 服务器发送执行结果给客户端
6. 客户端解析结果
7. 关闭连接
exit
quit
\q
3
库操作
数据库命名规范
1. 使用字母,下划线和数字构成
2. 不能是关键字,如果是关键字,需要使用反引号将名字包裹
反引号:esc下面的波浪线按键对应的英文状态下的输出
新增数据库
create database 数据库名字 [库选项];
库选项:
字符集设置(charset):表示以后在当前数据库存储的数据,默认采用utf-8的字符集存储
校对集设置(collate):如何比较大小
查看数据库
查看数据库基本信息:show databases;||模糊查询:show databases like ‘pattern’
模糊匹配:%匹配任何内容,_表示匹配一个字符
查看数据库创建语句:show create database 数据库名字
修改数据库
数据库名称不可修改,只能修改数据库的库选项
语法:alter database 数据库名字 [库选项]
删除数据库
drop Database 数据库名字;
4
存储引擎
存储引擎:处理和保存数据的方式。主要存储引擎是InnoDB和Myisam
InnoDB:会创建一个结构文件,数据和索引都放在ibdata1文件里
Myisam:创建三个文件,结构,索引和数据
引擎因为费用的问题分为两类
免费:InnoDB和Myisam都是免费
收费:BDB,memory,archive都是收费
Myisam与InnoDB的区别
1. Myisam在插入数据和查询数据的时候都比InnoDB效率高
2. InnoDB在更新和删除的时候比Myisam效率高
3. InnoDB支持事务安全,Myisam不支持
如何选择存储引擎?
1. 基本可以使用数据库默认的存储引擎(InnoDB)
2. 如果在需要事务处理的时候,只能选择InnoDB
3. 数据本身以插入和查询为主,那么可以使用Myisam
SQL语言是一种强类型语言,在为数据进行定义的时候,必须要指定数据类型。
5
表操作
新增表
create table 表名(字段1 字段类型,字段2 字段类型)[表选项];
1. 字段必须要有字段名,字段类型
2. 字段与字段之间使用逗号分隔
3. 最后一个字段不需要使用逗号
表选项
字符集:当前表的数据采用什么字符集保存,字符集以表的字符集为标准
存储引擎:当前表的数据采用什么样的存储引擎来存储
InnoDB:只会创建一个表结构文件,其他的索引和数据存放在ibdata1文件中
Myisam:会创建三个文件,一个是结构文件,一个是数据文件,一个是索引文件
删除表
drop table 表名
查看表
1. 查看表基本信息:show tables || show tables like ‘pattern’;
2. 查看表的创建语句:show create table表名;
3. 查看表结构:desc|describe 表名||show columns from 表名
修改表
可以修改表的名字,表的字段的增删改查,字段的属性的修改,字段的位置的修改
语法:alter table 表名 [add/modify/drop] [column] 字段名字 [字段类型] [字段位置]
增加字段[add]
alter table 表名
add column 字段名字 字段类型 [位置]
字段默认在表最后增加
位置:first表示在最前面,after表示在某个字段之后(默认其实是after在最后一个字段之后)
修改字段[modify]
alter table 表名 modify 字段名字 字段类型 [位置]
修改字段名字[change]
alter table 表名 change 旧字段 新字段 字段类型 [字段位置]
删除字段[drop]
alter table 表名 drop 字段名字
注意:
创建过程中会不知道当前表名是否存在:if not exists表示只有表名不存在的时候才去创建,否则放弃执行;
create table [if not exists] 表名(字段1 字段类型,字段2 字段类型)[表选项]
删除表的过程中,不知道表是否已经存在:if exists
drop table [if exists] 表名
数据库和数据表都不能随意的删除,删除具有不可逆性。如果确定要删除数据库或者数据表,那么必须要事先备份。
6
数据基本操作
新增数据
insert into 表名 (字段列表) values(值列表)
字段列表可以没有,意味着值列表里的字段数必须与表中的字段数完全一致
插入数据必须注意
1. 插入的值类型必须与数据字段定义的数据类型一致,除了整型可以不加引号之外,其他的都要加上引号
2. 整型也可以加上引号
3. 允许一次性插入多条记录,在values字段后面使用逗号分隔即可
查看数据
select 字段列表 from 表名 [where 条件]
修改/更新数据
update 表名 set 字段 = 值 [where条件]
删除数据
delete from 表名 [where条件]
行(row)和记录(record):行和记录表示的意思是完全一样的,行是站在表结构的角度上定义,而记录是站在数据的角度上去定义
列(column)和字段(Field):与行和记录的区别是一样的。
7
数据类型
8
字段属性
null/not null
表示字段的值可以为空(在进行数据插入的时候,该字段可以不给数据),not null表示不能为空,必须要给定值(不能是null)
default
primary key
主键,主要的键,用主键修饰的字段,该字段具有唯一性(不能重复)
一张表最多只能有一个主键
主键字段不能为空
auto_increment
自动增长
字段必须是整型
必须保证使用自动增长的字段首先满足的一个条件:是一个索引字段
一张表只能有一个自动增长
自动增长通常是配合逻辑主键(id int primary key auto_increment)
unique key
唯一键,字段的值不能重复
一张表唯一键可以有多个
唯一键不对null进行处理
comment
注释
9
数据高级操作
增
主键冲突:insert into 表名 values(值列表) on duplicate key update 字段 = 值,字段=值
替换插入:replace into 表名 (字段列表) values(值列表);
删
delete from 表名 [where条件] [limit]
删除数据并不能修改一张表的索引和自增长。如果想删除表的自增长重新来过
先删除表(drop),再新建表(create)
mysql提供了简单方式实现两个步骤:truncate 表名;
查
别名:as
where:依据条件筛选数据
比较运算符:>,>=,<,<=,=(比较),!=,<>,in,between and,is [not]null
in:表示某个字段的值,在某个集合(包含多个数据)中
语法:select * from 表 where 字段 in (值1,值2…);
between and:表示在某个区间内(闭区间)
语法: select * from 表 where 字段 between A and B(A必须小于等于B);
is null:判断数据是否为null
语法:select * from 表 where 字段 is [not] null;
逻辑运算符:&& and,|| or,not
group by:
group by分组之后,会将数据进行合并,从而只象征性的保留每组的第一条记录。
通常group by不是为了得到分组后的每组的全部数据,而是用来统计每组的信息。
统计函数:都是数学统计
count:统计所有的记录的个数,也可以是所有字段(不统计null)
max:统计分组后每组里面的最大值,通常是某个字段
min:统计最小
avg:统计平均数
sum:求和
having:
功能与where一样,用于做条件判断
不同点:having可以使用字段别名,而where不能
不同点:having可以使用统计函数
order by:
主要是对字段进行排序,有两种方式:asc默认的,desc降序排序,比较的依据是校对集。
limit:
限制数据查询的起始位置和返回数据的条数 (默认情况下从第一条开始)
改
update 表名 set 字段 = 值 [where条件] [limit]
10
关系
多对一/一对多
需求:有一个学生表一张班级表
一个学生只属于一个教室,一个教室却包含多个学生。这种关系就称之为多对一或者一对多的关系
多对多
需求:有一个教师表和一个学生表
一个学生被多个老师教过,一个老师教过多个学生,这个关系就称之为多对多的关系
一对一
需求:一个学生信息,有10种信息,其中只有5个信息是非常常用的,其他5个信息基本上用不上(婚姻状况,籍贯,国籍)。
将一个表中常用的数据和不常用的数据分离开来,分别保存,但是使用同样的id进行管理。