MySQL概述
1、什么是数据库 :存储数据的仓库
2、使用公司 :金融、游戏、购物、论坛 ...
3、提供数据库服务的软件
MySQL、Oracle、MongoDB、Mariadb、SQL_Server、Redis
4、生产环境中,如何选择
1、是否开源
开源 :MySQL、MariaDB、MongoDB、Redis
商业 :Oracle、SQL_Server、DB2
2、是否跨平台
不跨平台 :SQL_Server
跨平台 :... ...
3、公司类型
商业软件 :金融机构
开源软件 :民营企业
MySQL特点
1、关系型数据库
数据是以行和列(表格)形式存储
一行 :一条记录,一列 :一个字段
表和表之间逻辑关联叫关系
示例 :关系型数据库
表1、学生信息表
姓名 年龄 班级
星矢 23 1812
水冰月 25 1809
表2、班级信息表
班级 班主任
1812 大空翼
1809 松人
示例 :非关系型数据库
{'姓名':'星矢','年龄':23,'班级':'1812'}
{'姓名':'水冰月','年龄':25,'班级':'1809','班主任':'松人'}
2、跨平台
3、支持多种编程语言
python、java、php ... ...
数据库、数据库软件、数据仓库概念
1、数据库 :逻辑概念,存放数据仓库,侧重存储
2、数据库软件 :真实软件,实现数据库的逻辑功能
3、数据仓库
数据量比数据库庞大
侧重于数据分析和数据挖掘
MySQL安装
服务端 :yum install mysql-server
客户端 :yum install mysql-client
启动和连接MySQL服务
1、服务端启动
/etc/init.d/mysql status|start|stop|restart
service mysql status|start|stop|restart
2、客户端连接
mysql -hIP地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456
mysql -h127.0.0.1 -uroot -p123456
mysql -uroot -p123456 本地登录可省略-h选项
SQL命令使用规则
1、每条命令必须以 ; 结尾
2、SQL命令不区分字母大小写
3、使用 c 终止当前命令执行
库的管理(库名区分字母大小写)
1、查看已有库
show databases;
2、创建库[指定字符集]
create database 库名 character set utf8;
create database 库名 charset utf8;
3、切换库
use 库名;
4、查看当前所在库
select database();
5、删除库
drop database 库名;
6、查看创建库的语句
show create database 库名;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
创建库testdb,指定字符集为utf8
create database testdb charset utf8;
进入到库testdb
use testdb;
查看当前所在库
select database();
创建库testdb2
create database testdb2;
进入到库testdb2
use testb2;
查看库testdb2的字符集(查看创建库的语句)
show create database testdb2;
删除库testdb
drop database testdb;
删除库testdb2
drop database testdb2;
表的管理
1、创建表
create table 表名(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型)charset=utf8;
2、查看创建表的语句(字符集、存储引擎)
show create table 表名;
3、查看当前库中所有表
show tables;
4、查看表结构
desc 表名;
5、删除表
drop table 表名;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
创建库python1 create database python1; 在python1库中创建表 pymysql并指定字符集utf8,字段有3个:id int, name char(20),age int use python1; create table pymysql( id int, name char(20), age int )charset=utf8; 查看python1库中的所有表 show tables; 查看表pymysql的字符集及存储引擎(语句) show create table pymysql; 查看表pymysql的表结构 desc pymysql; 删除表pymysql drop table pymsql;
注意
MySQL基于磁盘存储,所有数据以文件形式存放在数据库目录/var/lib/mysql下
表记录的管理
1、增(insert)
insert into 表名 values(值1),(值2);
insert into 表名(字段1,字段2) values(xx);
2、查(select)
select * from 表名 where 条件;
select 字段1,字段2 from 表名 where 条件;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
查看所有库 show databases; 创建新库studb,并指定字符集utf8 create database studb charset utf8; 在studb库中建表stuinfo,字段有id、name、age三个,数据类型自己定义 use studb; create table stuinfo( id int, name char(15), age int); show tables; 查看表stuinfo的表结构 desc stuinfo; 在stuinfo中插入2条表记录 insert into stuinfo values (1,'金毛狮王',60),(2,'紫衫龙王',19); 在stuinfo表中name和age两个字段插入2条记录 insert into stuinfo(name,age) values ('青翼蝠王',60),('白眉鹰王',66); 查看stuinfo中的所有记录 select * from stuinfo; 查看表中所有学生的姓名和年龄 select name,age from stuinfo; 查看表中年龄大于20的学生信息 select * from stuinfo where age>20;
如何更改默认字符集(改配置文件)
1、方法 :通过更改配置文件实现
2、步骤
cd /etc/mysql/mysql.conf.d/
cp mysqld.cnf mysqld.cnf.bak
vim mysqld.cnf
[mysqld]下面添加:
character_set_server = utf8
/etc/init.d/mysql restart
数据类型
1、数值类型
整型
int 大整型(4个字节) 最大取值2**32 - 1
tinyint 微小整型(1个字节)
有符号(默认) :-128~127
无符号 :unsigned 0~255
smallint(2个)
bigint(8个)
浮点型
float(m,n) :最多显示7个有效位
m代表总位数,n代表小数位位数
float(5,2) 取值范围:-999.99~999.99
decimal(m,n) :最多显示28个有效位
2、字符类型
定长 :char(宽度)
取值范围 :1-255
变长 :varchar(宽度)
取值范围 :1-65535
text / longtext / blob / longblob(4G)
char和varchar的区别
char :浪费存储空间,性能高
varchar:节省存储空间,性能低
字符类型宽度和数值类型宽度区别
字符宽度,超过范围不能存储
数值宽度,显示宽度,只用于查询显示,和存储无关,可用zerofill查看效果
id int(3) zerofill
3、枚举类型
单选(enum) :字段名 enum('M','F')
多选(set) :字段名 set('','','','')
注意 :hobby set('Python','MySQL','study')
插入记录时 :'Python,study'
4、日期时间类型
date :'yyyy-mm-dd'
time :'hh:mm:ss'
datetime :'yyyy-mm-dd hh:mm:ss'
timestamp:'yyyy-mm-dd hh:mm:ss'
datetime不给值默认返回NULL
timestamp不给值默认返回系统当前时间
日期时间函数
now() :返回服务器当前时间
curdate() :返回当前日期
year(字段名)
date(字段名)
time(字段名)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
创建库studb2,并在库中创建表 student id 大整型, name 字符类型,宽度15, age 微小整型,不能为负数, class 字符类型(AID1812), height 浮点型,小数2位, money 浮点型,小数2位 create database studb2; use studb2; create table student( id int, name varchar(20), age tinyint unsigned, class char(7), height float(5,2), money decimal(20,2) )charset=utf8; 查看表结构 :desc student; 查看字符集 :show create table student; 在表中插入1条记录 insert into student values (1,'赵敏',23,'AID1812','170','20000'); 查询所有表记录 select * from student; 在表中id和name两个字段插入2条记录 insert into student(id,name) values (2,'周芷若'),(3,'张无忌'); 查询所有学生的id和姓名 select id,name from student;
表记录管理
1、删除(delete)
delete from 表名 where 条件;
delete from 表名;
如果不加where条件,所有记录全部清空
2、修改(update)
update 表名 set 字段=值1,字段=值2 where 条件;
表字段和表记录总结
表字段操作 表记录操作
增 add insert
删 drop delete
改 modify update
查 desc select
运算符操作
数值比较/字符比较/逻辑比较
数值比较 :> >= < <= = !=
字符串 := !=
逻辑比较 :and or between 值1 and 值2
匹配空、非空
空 :where name is null
非空:where name is not null
NULL:空值,只能用is、is not去匹配
'' :空字符串,用 = 、!= 去匹配
模糊查询(like)
where 字段名 like 表达式
表达式
* % :匹配0到多个字符
* _ :匹配1个字符
select name from sanguo where name like '_%_';#匹配至少有2个字符
select name from sanguo where name like '___';#匹配3个字符
select name from sanguo where name like '%';#匹配所有,但不包含NULL
select name from sanguo where name like '赵%';#匹配姓赵的英雄
4、范围内比较
where country in('蜀国','魏国')
where id in(1,2,3,5)
not in
SQL查询
总结
3、select ...聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...;
order by :给查询结果进行排序
order by 字段名 ASC/DESC
ASC(默认) :升序
DESC :降序
limit(永远放在SQL命令的最后)
1、作用 :限制显示查询记录的条数
2、用法
limit n :显示n条记录
limit m,n :从第m+1条记录开始,显示n条
limit 2,3 :显示第3、4、5条记录
limit分页
每页显示5条记录,显示第3页的记录
limit m,n
limit 10,5
每页显示n条记录,显示第m页:
limit (m-1)*n,n
聚合函数
分类
avg(字段名) :该字段的平均值
sum(字段名) :求和
max(字段名) :最大值
min(字段名) :最小值
count(字段名) :统计该字段记录的个数
having语句 :对分组聚合后的结果,进一步筛选
找出平均攻击力>105的国家的前2名,显示国家名称和平均攻击力
select aaa,avg(bbb) from xxx
group by aaa
having avg(bbb)>105
order by avg(bbb) DESC
limit 2;