官网下载安装mysql
点击打开链接
安装方式:点击打开链接
python3下不能使用Mysqldb,需要用到pymysql
>>>pip install pymysql
安装navicat数据库管理软件
CMDmysql数据库常用命令:
1 / 登陆数据库
> mysql -uroot -p
2 / 启动数据库(管理员权限下)
> net start mysql57
3 / 关闭数据库(管理员权限下)
> net stop mysql57
4 / 创建数据库
mysql > create database XXXX;
5 / 选择数据库
mysql > use XXXX;
6 / 导入数据库
mysql > source D:\XXXX.sql
7 / 删除数据库
mysql > drop database XXXX;
8 / 终止当前语句
\c
9 / 退出数据库
ctrl +c
—————查—————:
————对数据库的查看————:
1 / 查看数据库版本:
---1 :在外部查看:
> mysql -V
---2:在内部查看:
mysql > select version();
2 / 查看数据库
mysql > show databases;
3 / 查看当前数据库的表格
mysql > show tables;
4 / 查看表结构
mysql > desc YYY; / YYY是表名
5 / 查表
mysql > select * from YYYY; /YYYY表名
6 / 查看当前使用的数据库
mysql > select database();
7 / 查看其他库中的表
mysql > show tables from XXXX; /XXXX是别的数据库名
8 / 查看表的创建语句
mysql > show create table YYY; /YYY表名
————对表的查询————:
————简单查询:
1 / 查询一个字段:
mysql > select 字段名 from 表名;
2 / 查询多个字段:
mysql > select 字段名,字段名,字段名 from 表名;
3 / 查询全部字段:
mysql > select * from 表明;
4 / 查询字段重命名:
mysql > select 字段名 as 新显示名字 from 表名;
————条件查询:where
and 的优先级高于 or
1 /范例:= 等于
mysql> select
-> empno,ename,sal //查询的字段
-> from
-> emp //表名
-> where
-> sal=5000; //条件语句
2 / 范例:between...and...
mysql> select empno,ename,sal from emp where sal>=3000 and sal<=5000;
mysql> select empno,ename,sal from emp where sal between 3000 and 5000; //等效于上一个例子
mysql> select ename from emp where ename between 'A' and 'K';
3 / 范例:查空
mysql> select ename,comm from emp where comm is null;
4 / 范例:in 在某个范围中搜索
mysql> select
-> ename,job
-> from
-> emp
-> where
-> job in ('MANAGER','SALESMAN');
等效于:
mysql> select
-> ename,job
-> from
-> emp
-> where
-> job='MANAGER' or job='SALESMAN';
5 / like 模糊查询
_ 下划线代表一个任意字符,% 百分号代表任意个字符
————单一字段排序:order by (通过哪个或者哪些字段进行排序)
1 / 范例: (默认升序)asc
mysql> select
-> ename,sal
-> from
-> emp
-> order by
-> sal asc;
2 / 范例:降序排序 desc
mysql> select
-> ename,sal
-> from
-> emp
-> order by
-> sal desc;
3 / 范例:按多个字段进行排序
mysql> select ename,sal from emp order by saldesc,ename asc;
————数据处理函数 / 单行处理函数
1 / 范例:Lower 转小写 (只是查询结果显示,而不改变底层数据库)
mysql> select lower(ename) from emp;
2 / 范例:upper 转大写
mysql> select upper(ename) from emp;
3 / 范例:substr 取子串
mysql> select ename from emp where substr(ename,2,1)='A';
4 / 范例:length 获取字符串长度
mysql> select length(ename) from emp;
5 / 范例:trim 去前后空格
mysql> select ename from emp where ename = trim(' SMITH ');
6 / 范例:round 四舍五入 (默认保留整数,可在后面增加保留小数位参数)
mysql> select round(123.456);
7 / 范例:rand 生成随机数
mysql> select rand();
8 / 范例:生成1~100范围随机数
mysql> select round(rand()*100);
————日期处理
MYSQL的日期格式:
%Y 年 %m 月 %d 日 %H 时 %i 分 %s 秒
1 / 字符串转换成日期格式:
str_to_date('日期字符串','日期格式');
范例:mysql> select ename,hiredate from emp where hiredate = str_to_date('12-17-1980','%m-%d-%Y');
2 / 日期格式转换成字符串格式
date_format('日期格式’,‘日期字符串’);
————分组函数 / 聚合函数 / 多行处理函数
(会自动忽略null值)
(分组函数不能直接使用在where关键字后面 = where关键字后面不能直接使用分组函数!因为先分组才能用分组函数!)
1 / 范例:统计
mysql> select count(ename) from emp; //统计不为空的总和
mysql> select count(*) from emp where comm is null; // 统计满足后面条件的总和
2 / 范例:求和
mysql> select sum(sal) from emp;
3 / 范例 :求平均值
mysql> select avg(sal) from emp;
4 / 范例:求最大值
mysql> select max(sal) from emp;
5 / 范例:求最小值
mysql> select min(sal) from emp;
————去重 distinct (查询去重,不会改变底层数据库)
mysql> select distinct job from emp;
mysql> select distinct deptno,job from emp; //distinct只能出现在所有字段的前面
mysql> select count(distinct job) from emp; //查询统计有多少个岗位
————分组查询
group by 子句 (通过哪个或者哪些字段进行分组)
1 / 范例:找出每个工作岗位的最高薪水(先按照工作岗位分组,使用max函数求最大值)
mysql> select max(sal) from emp group by job; //先分组,然后求最大值
mysql> select job,max(sal) from emp group by job; //注意是先分组,后查询,所以job可以放在select后面
2 / 范例:找出每个部门的平均薪水
mysql> select deptno,avg(sal) as avgsal from emp group by deptno;
3 / 范例:计算不同部门中 不同工作岗位的最高薪水:(两个限定条件)
mysql> select deotno,job,max(sal) from emp group by deptno,job; //两个字段联合起来看成一个字段
4 / 范例:找出每个工作岗位的最高薪水,除了MANAGER之外 (排除某一个条件)
mysql> select job,max(sal) from emp where job<>'MANAGER' group by job; //先用where排除掉不要的条件
having 子句 (分组之后过滤数据)
having 和 where (分组之后过滤数据) where是分组之前过滤数据
1 / 范例:找出每个工作岗位的平均薪水,要求显示平均薪水大于1500的
mysql> select job,avg(sal) from emp group by job having avg(sal)>1500; //having在分组之后调用分组函数
——————DQL语句的总结:
1 / 语句关键字顺序!!不能变!!
select ....
from ....
where....
group by ....
having....
order by .....
2 / 执行顺序:
from .... //从某张表中检索数据
where.... //经过某条件进行过滤
group by .... //然后分组
having.... //分组之后不满意再过滤
select .... //查询出来
order by ..... //排序输出
——————表的连接查询(跨表查询):import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',passwd='password',db='ddtest') #链接数据库
cur = conn.cursor() #游标
reCount = cur.execute('insert into students(name,sex,age,tel) values(%s,%s,%s,%s)',('haha','man',26,1353456456))#插入数据操作。使用数据库操作命令
conn.commit()#执行写入操作
cur.close()
conn.close()
取数据
import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',passwd='password',db='ddtest') #链接数据库
cur = conn.cursor() #游标
reCount = cur.execute('select * from students')#查找数据操作。使用数据库操作命令
conn.commit()#执行写入操作
#去除数据
res = cur.fetchone()
res2 = cur.fetchmany(2)
res3 = cur.fetchall() ##前面语句取出后,表中数据会被减少
print(res)
print(res2)
print(res3)
cur.close()
conn.close()
结果:
(1, 'dralon', 'male', 38, '12345678922')
((2, 'zhuzhu', 'women', 28, '12345678922'), (3, 'long', 'men', 35, '12345678922'))
((4, 'haha', 'man', 26, '1353456456'), (5, 'haha', 'man', 26, '1353456456'))