对数据库的操作 :
1 数据库的登录和登出:
登录 终端执行:mysql -uroot -p; 再输入密码;
登出 quit 或exit
2 显示当前的时间:
select now()
3 查看所有的数据库:
show databases;
4 创建数据库
create database 数据库名称 charset='utf-8';
5 使用数据库
use 数据库名称;
6 查看当前数据库
select database();
7 删除数据库
drop database 数据库名称;
8 查看所有的表, 查看表数据结构
show tables; desc 表名;
9 创建表
create table 表名(id int unsigned primary key auto_increment not null, name varchar(20) not null, age tinyint unsigned default 0, height decimal(5,2), gender enum('男','女','保密'))
10 添加字段
alter table 表名 add 列名 类型 约束;
11 修改表字段的类型
alter table 表名 modify 字段 类型 约束;
12 修改字段名以及类型和约束
alter table 表名 change 列原名 列新名 类型及约束;
13 删除表字段
alter table 表名 drop 字段;
14 查看创表语句
show create table 表名;
15 查看创建数据库
show create database 数据库名;
16 删除表
drop table 表名;
数据库语句的操作:
1 查询所有的列:
select * from 表名;
2 添加数据:
insert into 表名 values()
insert into 表名 (列名1,列名2) values(值1,值2)
insert into 表名 (列名1,列名2) values(值1,值2),(值1,值2)
3 修改数据
update 表名 set 列名=值 where 条件;
4 删除数据
delete form 表名 where 条件
5 通过as取别名 将username取名为name
select username as name from 表名;
6 给表取别名 通过as
select s.id,s.username,s.age from students as s;
students是表名 s是别名 s.id s.username s.age 是查询的条件
7 distinct关键字 去除重复的数据行:
查询的结果 比如有30多个人 性别只有男和女 那么查询的数据行就是两行男和女 如果性别还有未知那就是三行 再加未知。 不会是有多少人就多少行的。
8 where 条件语法查询的格式:
比较运算符 > < = != and of not
select age from students where not (age>20); 小于20的查询出来
9 模糊查询 % 多个任意字匹配
select * from 表名 where 列名 like '黄%';
select * from 表名 where 列名 like '黄_';
select * from 表名 where 列名 like '黄__';
select * from 表名 where 列名 like '%黄';
10 连续查询 between
select * from students where id between 1 and 3; 查询id为1到3的数据
11 指定查询 in
select * from students where id in (1,3,5); 查询id为1,3,5的数据
12 空判断查询 is null
select * from students where height is null; 表示身高数据为空的
13 排序查询的语句 order by asc|desc
select * from students where order by age desc;
select * from students where age>20 order by id desc;
14 分页查询 limit
select * from students limit 第几条,查询几条;
select * from students limit (n-1)*m , m; m代表每页查询的条数 n代表页数
15 聚合函数的介绍
count(col) 查询列的条数, sum(col)查询列的数据相加的和, max(col)该列的最大值
min(col)该列的最小值 avg(col)该列的平均值
select sum(age) from students;
16 聚合函数求平均值 包含值是null的
select sum(height) / count(*) from students where gender = '男';
select avg(ifnull(height,0)) from students where gender = 1; 如果遇到身高是null的默认值设置为0
17 分组字段 根据相同的字段分为一组 列入性别为男的是一组 性别为女的是一组
select gender from students group by gender;
select gender,username from students group by gender,username;
18 group by + group_concat(字段名) 统计每个分组指定字段的信息集合 每个信息之间使用逗号分隔,
select gender,group_concat(username) from students group by gender;
最后的结果相当于是 男;['zs','ls'] 女:['zs','xx']
19 根据gender字段进行分组 统计分组条数大于2的;
select gender,count(*) from students group by gender having count(*)>2;
20 根据gender字段进行分组 ,汇总所有人的年龄
select gender,sum(age) from studens group by gender;
21 group by + with rollup 在最后记录新增一行 显示select 查询时聚合函数的统计和计算的结果
select gender,group_concat(age) from students group by gender with rollup;
22 内连接查询
select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2;
23 左连接: 以左边为全部 去查对应的右边 如果右表的数据没有就为null
select * from 表1 left join 表2 on 表1.字段 = 表2.字段
24 右连接 以右表的数据去查左边的 如果左边的数据没有就为null
select * from 表1 right join 表2 on 表1.字段 = 表2.字段
25 子查询
select * from students where age > (select avg(age) from students);
26 对已经存在的字段添加外键约束:也就是某一表数据的字段是依赖于另一个表的字段的值,如果不存在就会报错。
alter table 表名 add foreign key(本表名的字段) references 依赖的表名(依赖表名的字段)
alter table students add foreign key(cls_id) references classes(id)
27 创建数据表时设置外键的约束:
create table tearch(
id int not null primary key auto_increment,
name varchar(30),
s_id int not null,
foreign key(s_id) references 外键表名(外键表名的字段)
)
28 删除外键约束:
alter table 自己的表名 drop foreign key 外键名;
29 根据商品的类型 查询所有的商品:
select name,price, from goods where cate_name = "超极本"
30 显示商品的分类:
select distinct cate_name from goods;
select cate_name from goods group by cate_name;
31 求所有产品的平均价 并保留两位小数
select round(avg(price),2) from goods;
32 显示每种商品的平均价格:
select cate_name,round(avg(price),2) from goods group by cate_name;
33 查询每种商品中 最贵 最便宜 平均价 数量
select cate_name, max(price), min(price), avg(price), count(*) from goods group by cate_name;
34 查询所有价格大于平均价格的商品 并且价格按降序排序
select * from goods where price > (select avg(price) from goods) order by price desc;
35 创建商品分类表:
create table good_cates(
id int not null primary key auto_increment,
name varchar(200) not null
)
36 将从一个表中查询的字段对应的所有的值 插入到另一个表中对应的字段
slect cate_name from goods group by cate_name; 相当于从goods表中获取到了cate_name的值
insert into good_cates(name) slect cate_name from goods group by cate_name;
上述代码的意思是 将goods表中cate_name字段的所有值添加到 good_cates表中的name字段中。
37 链接查询 将两个表的数据合并到一起
select g.cate_name, gs.id from goods as g inner join good_cates as gs on g.cate_name=gs.name
38 将链表中某个数据的值改变为另一个表的值
update goods g inner join good_cates gs on g.cate_name=gs.name set g.cate_name=gs.id;
39 创建品牌表,其中品牌表的某个字段的值来源于另外一个表的字段的值;
create table goods_brands(
id xxx,
name varchar(100) select cate_name from goods group by cate_name;
)
40 修改goods表结构
alter table goods change cate_name cate_id int not null, change brand_name brand_id int not null;
41 python 使用 mysql
第一步导入
import pymysql
第二步链接数据库
conn = pymysql(host="localhost",port="3306",user="root",password="123456",database="test",charset="utf8")
第三步 获取游标 目的执行sql语句
cursor = conn.cursor()
第四步 创建sql语句
sql = "select * from test"
第五步 执行sql语句
cursor.execute(sql)
第六步 查询结果
row = cursor.fetchone() 查询的是单条数据 类型是元组
row = cursor.fetchall() 查询的是所有的数据 类型是元组嵌套元组的数据
第七步 关闭游标 关闭 链接
cursor.close()
conn.close()
42 改造后的操作 防止报错:
import pymysql
conn = pymysql.connect(host="localhost",port=3306,user="root",password="123456",database="test",charset="utf8")
cursor = conn.cursor()
sql = "insert into user (id,name) values (3,'hs')"
try:
cursor.execute(sql)
conn.commit() # 提交到数据库
except Exception as e:
conn.rollback() #发生错误 表示数据回滚
else:
result = cursor.fetchall()
print(result)
finally:
cursor.close()
conn.close()
43 方式sql语句注入 添加字段的时候 需要使用占位符 %s
sql = "insert into user (id,name) values (%s,%s)"
try:
cursor.execute(sql,(4,'wq'))
conn.commit() # 提交到数据
except Exception as e:
conn.rollback() #发生错误 表示数据回滚
else:
result = cursor.fetchall()
print(result)
finally:
cursor.close()
conn.close()
44 索引加快mysql查询的速度:
查看表中已有的索引: show index from 表名;
创建索引: alter table 表名 add index 索引名(字段); alter table 表名 add index(字段) 默认的索引就为字段的名;
删除索引:alter table 表名 drop index 索引名;
创建联合索引: alter table 表名 add index (字段1,字段2)确点:如果查询的字段没有包含字段1相当于没有使用索引查询。