前言:
简单地介绍一下MySQL的应用场景以及如何启动、连接MySQL;还有其他相关的表操作、表记录操作、库操作等MySQL语句。
存储数据的仓库
金融机构,银行,游戏网站,购物网站,论坛 …
a.MySQL(目前是社区开源,被Oracle收购,Oracle是闭源);
b.Mariadb(基本和MySQL一模一样);
c.mangoDB,sql_Server,Oracle, DB2
Linux操作系统:Ubuntu,CentOS,RedHat
生产环境中,如何选择使用哪个数据库?
a.是否开源 |
开源软件:不一定免费,MySQL、Mariadb、MongoDB 商业软件:Oracle、DB2、sql_server、 |
b.是否跨平台 |
跨平台:可在不同os上部署,一般部署在Linux、Unix; 不跨平台:sql_server |
c.公司类型 |
开源软件:游戏网站、购物网站、论坛等中小型民营企业 商业软件:政府部门、金融机构、大公司(京东…) |
a.是关系型数据库,(会对比的问,MySQL的特点,和mangoDB) |
|
b.跨平台 |
可以在Unix、Linux、Windows部署、运行数据库 |
c.支持多种编程语言 |
Python、Java、PHP、… |
1.数据是以行和列的形式存储 |
2.表中每一行叫一条记录 |
3.表中每一列叫一个字段;列名叫字段名; |
4.表和表之间的逻辑关联叫关系 |
1.关系型数据库存储 表1、 学生信息表
表2、班级信息表
查找:水冰月的班主任是谁? 通过2张或多张表进行查询;有相同的字段使得多张表有关联; |
2.非关系型数据库存储(ManogoDB) 以键值对的方式存储 {‘姓名’:‘星矢’,‘年龄’:25,‘班级’:‘三班’,‘班主任’:‘大空翼’} {‘姓名’:‘水冰月’,‘年龄’:25,‘班级’:‘六班’,‘班主任’:‘松人’} 性能特别高,高于关系型数据库,省去解析过程; 有‘班主任’,才能找到;没有,就找不到。 |
|||||||||||||||
|
数据库软件、数据库、数据仓库
a.数据库软件 |
可以操作数据库的软件,看得见,可操作; 用来实现数据库的逻辑功能; |
b.数据库 |
是一种逻辑概念,用来存放数据的仓库; 通过数据库软件来实现,侧重存储数据,不会分析数据; |
c.数据仓库 |
比数据库庞大,主要用于数据挖掘和数据分析; 网购: 数据库:user表——存储用户名和密码 数据仓库:哪个时间段用户登陆量最多,哪个用户一年购物最多,… |
客户端把数据存储到数据库服务器的过程:
1.先连接到数据库服务器 |
2.选择库 |
3.创建或修改表 insert |
4.断开与数据库的连接 exit; | quit; |\q; |
a.安装服务端 |
Sudo apt-get install mysql-server |
b.安装客户端 |
Sudo apt-get install mysql-client |
如果安装失败,需要安装软件 |
更新源文件 |
Sudo apt-get update |
修复依赖关系 |
Sudo apt-get –f install |
|
安装软件包 |
Sudo apt-get install |
a.官网下载安装包 |
Mysql-installer***5.7.***.msi |
b.双击,按教程安装 |
环境变量,各个路径用分号‘;’隔开 |
a.服务端启动 |
Sudo /etc/init.d/mysql start |
Sudo /etc/init.d/mysql stop |
|
Sudo /etc/init.d/mysql restart #重启 |
|
Sudo /etc/init.d/mysql status #查看当前状态 |
|
Sudo /etc/init.d/mysql reload #重新加载配置文件 |
|
b.客户端连接 |
mysql –h主机地址 -u用户名 –p密码 mysql –hlocalhost -uroot –p123456 主机地址:(数据库服务器地址)(127.0.0.1) |
本地连接可省略-h选项 Mysql -uroot –p123456 |
|
c.退出 |
Exit; quit; \q |
方法 |
通过更改MySQL配置文件来实现 |
|
步骤 |
1.获取root权限 |
sudo -i |
2.备份配置文件 |
cd /etc/mysql/mysql.conf.d/ cp mysqld.cnf mysqld.cnf.bak |
|
3.更改mysqld.cnf配置 |
[mysqld] character_set_server = utf8 |
|
4.重启MySQL服务 |
sudo /etc/init.d/mysql restart |
1.每条命令必须以‘;’结尾 |
2.sql不区分大小写 |
3.使用\c终止当前命令的执行 |
1.数字、字母、_,但不能只有数字 |
2.库名区分字母大小写 |
3.库名具有唯一性 |
4.不能使用特殊字符和MySQL关键字 |
1.查看已有的库 |
show databases; |
2.创建库 |
create database 库名; |
create database 库名 character set utf8; Latin1默认的字符集,习惯用utf-8。创建时,指定字符集 |
|
3.查看创建库的语句 |
show create database 库名; (查看字符集) |
4.查看当前所在库 |
select database(); |
5.切换库 |
use 库名; |
6.查看库中已有表 |
show tables; |
7.删除库 |
drop database 库名; |
1.创建表(指定字符集) |
create table 表名( 字段名1 数据类型, 字段名2 数据类型 )character set utf8; ps:库默认什么字符集,表就默认什么字符集; |
2.查看创建表的语句 |
show create table 表名;(查看字符集) |
3.查看表结构 |
desc 表名; |
4.删除表 |
drop table 表名; |
5.注意 |
1.所有数据都是以文件的形式存放在数据库目录 /var/lib/mysql |
2.基于硬盘存储 |
1.插入记录 |
a.insert into 表名 values(值1),(值2),…; Insert into t1 values(1,‘Bob’,20) |
b.insert into 表名 (字段名1,字段名2) values(值1),(值2),…; insert into t1(name) values ("jinmao"); |
|
2.查询记录 |
a.select * from 表名 [where 条件]; |
b.select 字段名1,字段名2,… from 表名 [where 条件]; select name,age from t2 where id < 4; |
|
删除表记录delete |
delete from 表名 where 条件; 必须有where |
更新表记录update |
update 表名 set 字段1=值1,字段2=值2,...where 条件; 必须有where |
(有符号 和 无符号unsigned)
int |
大整型 |
4个字节 |
有符号:正21亿多 |
无符号:0~2**32-1(42亿多) |
Tinyint |
微小整型 |
1个字节 |
有符号:-128~127 |
无符号(unsigned):0~255 |
age tinyint unsigned,(只能写正数) |
||||
bigint |
极大整型 |
8个字节 |
极少用,可用于手机号 |
会自动补全
float |
4个字节,最多显示7个有效位 |
字段名 float(m,n) m:总位数,n:小数位位数 |
Float(5,2):-999.99~999.99 Insert的是:1234567890.12 Select的是:1234567936.00 只能显示7个有效位 |
||
decimal |
最多显示28个有效位,精度高 |
字段名 decimal(m,n) |
多用于对精度要求高的场合,such as 金额 |
||
存储空间 |
整数部分和小数部分分开存储 |
|
规则 |
将9的倍数包装成4个字节; |
|
|
余数 字节 1~2 1 3~4 2 5~6 3 7~8 4 |
|
示例 |
decimal(19,9): 整数部分:10/9=1 … 1 4字节+1字节 小数部分:9/9=1 … 0 4字节+0字节 一共9个字节 |
Char(定长) |
char(宽度值),范围:1-255,必须填宽度 |
Varchar(变长) |
varchar(宽度值),范围:1-65535,必须填宽度 |
示例 |
“A” (是字符的宽度) Name char(20)存的是: “A ” (会自动补上19个空) Name varchar(20)存的是:“A” |
Text/ longtext(4G) |
|
Char和varchar特点 |
1.char:定长,浪费存储空间,性能高 |
2.varchar:变长,节省存储空间,性能低 |
(数值类型&字符类型)
数值类型 |
a.显示宽度,超过宽度也能正常存储; b.只用于select查询显示,和存储空间没有关系; c.用zerofill来显示效果;id int(3) zerofill |
字符类型 |
a. 超过宽度,则无法正常存储; b. 和存储空间有关; |
示例 |
Create的时候,int(3) Insert的时候,values(1),(2)(3); Select的时候,001,002,003; 不够位数,补0;c. 超过宽度,一样显示;a. 不管存几位的数,都是4字节; b. |
定义 |
字段的值只能在列举的范围内选择 |
分类 |
单选:字段名 enum(值1, 值2,…) |
多选:字段名 set(值1,值2,…) 插入记录时,用一个引号:“girl,Python,Study” |
Date |
日期"YYYY-MM-DD" |
|
time |
时间"HH:MM:SS" |
|
datetime |
日期时间"YYYY-MM-DD HH:MM:SS" |
默认返回:NULL |
timestamp |
日期时间"YYYY-MM-DD HH:MM:SS" |
默认返回:系统当前时间 |
now() |
返回服务器当前时间,年月日时分秒 |
curdate() |
返回当前日期 |
curtime() |
返回当前时间 |
sql命令行中 |
select now() | curdate() | curtime(); |
sql语句中 |
inesrt into t1 values(2,"吕老师",25,curdate(),curtime(),now()); |
语法 |
select ... from 表名 where 字段名 运算符(时间 - interval 时间间隔单位); |
时间间隔单位 |
1 day | 2 hour | 1 minute | 1 year | 3 month (都是单数) |
示例 |
where meeting > (now() - interval 1 day); 现在 - 1天的时间 = 1天前的时间点 |
alter table 表名 执行动作
添加字段add |
alter table 表名 add 字段名 数据类型;(添加到末尾) |
alter table 表名 add 字段名 数据类型 first;(添加到表首) |
|
alter table 表名 add 字段名 数据类型 after 字段名;(添加到表中) |
|
删除字段drop |
alter table 表名 drop 字段名; |
修改字段数据类型modify |
alter table 表名 modify 字段名 新数据类型; |
修改字段名 change |
alter table 表名 change 原字段名 新字段名 数据类型; |
1.数值比较 & 字符比较 & 逻辑比较 |
数值:= != > >= < <= 字符:= != 逻辑:and or |
2.范围内比较 |
between 值1 and 值2 (值为数字) in (值1,值2,...) not in (值1,值2,...) |
3.匹配空、非空 |
1.空: where 字段名 is null 2.非空: where 字段名 is not null |
注意: 1.null:空值,必须用 is 或 is not 去匹配 2."" :空字符串,只能用 = 或 != 去匹配 |
|
4.模糊比较 |
where 字段名 like 表达式 |
表达式 1._:匹配单个字符 2.%:匹配0到多个字符 |
3.select ... 聚合函数 from 表名 1.where ... 2.group by ... 4.having ... 5.order by ... 6.limit ...; |
avg,count,sum,… |
|
|
查询结果分组 |
|
查询结果筛选 |
|
查询结果排序,asc | desc |
|
限制记录个数 |
作用 |
给查询的结果进行排序 |
语法 |
order by 字段名 排序方式 |
排序方式 |
1.升序:ASC,默认 2.降序:DESC |
作用 |
限制显示查询记录的个数 |
用法 |
1.limit n -->显示前n条记录 2.limit m,n -->从m+1条记录开始显示,显示n条(从0开始计数) |
分页 |
每页显示5(n)条记录,显示第4(m)页 limit (m-1)*n,n; |
分类 |
avg(字段名):平均值 max(字段名) min(字段名) sum(字段名) count(字段名):统计该字段记录的个数 |
ps |
1:可以加上'as 别名',下次可以继续用 |
2: null不会被count统计到 |
|
3:可以用count(*)统计所有记录,不会漏掉null |
作用 |
给查询的结果进行分组 |
Tips |
先分组-----再聚合---去重 |
显示谁,就先select谁 |
|
注意 |
select的字段名 必须 要么group by一下,要么聚合一下!!! |
group by的字段名 必须 select一下; |
作用 |
对查询结果进一步筛选 |
注意 |
1.having语句通常和group by联合使用,过滤由group by语句返回的记录集 |
2.where只能操作表中实际存在的字段名, having操作由聚合函数生成的显示列 |
作用 |
不显示字段的重复值(去重) |
注意 |
1.多个字段名时,不加括号,加逗号 |
2.处理distinct和from之间的所有字段,所有字段值必须全部相同才可以去重 |
作用 |
保证数据完整性、一致性、有效性的规则 |
分类(desc 查看时) |
1.默认约束(default) |
2.非空约束(not null) |
|
ex. |
sex enum('M','F','S') not null default 'S' 性别不能为空,默认为'S' |