mysql第二天:
知道使用一张表可以实现自连接查询
1.能够知道数据库设计三范式
三范式:
1NF: 强调字段是最小单元,不可再分
2NF: 强调在1NF基础上必须要有主键和非主键字段必须完全依赖于主键,也就是说 不能部分依赖
3NF: 强调在2NF基础上 非主键字段必须直接依赖于主键,也就是说不能传递依赖(间接依赖)。
2.知道dropforeignkey可以删除外键约束
alter table 表名 drop foreign key 外键名;
3.能够写出分组和聚合函数组合使用的SQL语句
1. 数据准备
– 创建 “京东” 数据库
create database jing_dong charset=utf8;
-- 使用 "京东" 数据库
use jing_dong;
-- 创建一个商品goods数据表
create table goods(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
cate_name varchar(40) not null,
brand_name varchar(40) not null,
price decimal(10,3) not null default 0,
is_show bit not null default 1,
is_saleoff bit not null default 0
);
-- 向goods表中插入数据
insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default);
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default);
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default);
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default);
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default);
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default);
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default);
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default);
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default);
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default);
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default);
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default);
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default);
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default);
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default);
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
表结构说明:
id 表示主键 自增
name 表示商品名称
cate_name 表示分类名称
brand_name 表示品牌名称
price 表示价格
is_show 表示是否显示
is_saleoff 表示是否售完
2. SQL语句演练
查询类型cate_name为 '超极本' 的商品名称、价格
select name,price from goods where cate_name = '超级本';
显示商品的分类
select cate_name from goods group by cate_name;
求所有电脑产品的平均价格,并且保留两位小数
select round(avg(price),2) as avg_price from goods;
显示每种商品的平均价格
select cate_name,avg(price) from goods group by cate_name;
查询每种类型的商品中 最贵、最便宜、平均价、数量
select cate_name,max(price),min(price),avg(price),count(*)
from goods group by cate_name;
查询所有价格大于平均价格的商品,并且按价格降序排序
select id,name,price from goods
where price > (select round(avg(price),2) as avg_price from goods)
order by price desc;
4.能够写出将查询结果插入到其它表中的SQL语句1.存在表的情况下复制。
复制表语法
insert into … select … SQL语句
创建跟goods表结构一样的goods_copy
1.获取创建goods的sql语句
show create table goods;
2.把表名改成goods_copy, 并生成表
完整拷贝:
insert into goods_copy select * from goods;
部分拷贝:
insert into goods_copy (name, cate_name, brand_name) select name, cate_name, brand_name from goods;
2.创建表立刻复制
CREATE TABLE goods_copy
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT,
name
varchar(150) NOT NULL,
cate_name
varchar(40) NOT NULL,
brand_name
varchar(40) NOT NULL,
price
decimal(10,3) NOT NULL DEFAULT ‘0.000’,
is_show
bit(1) NOT NULL DEFAULT b’1’,
is_saleoff
bit(1) NOT NULL DEFAULT b’0’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 select * from goods;
5.能够知道使用连接更新表中某个字段数据的SQL语句
6.能够写出创建表并给某个字段添加数据的SQL语句
创建表
create table students(
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('男','女','人妖','保密')
);
说明:
create table 表名(
字段名称 数据类型 可选的约束条件,
column1 datatype contrai,
...
);
7.能够写出修改表结构的SQL语句
修改表-添加字段
alter table 表名 add 列名 类型 约束;
例:
alter table students add birthday datetime;
修改表-修改字段类型
alter table 表名 modify 列名 类型 约束;
例:
alter table students modify birthday date not null;
8.能够使用PyMySQL完成数据库的增删改查
使用pymysql查询数据
d01_pymysql_select.py
sql = 'select * from students;'
count = cursor.execute(sql)
for i in cursor.fetchall():
print(i)
使用pymysql添加数据
d02_pymysql_insert.py
sql = 'insert into students(name, age) values("老王", 18);'
count = cursor.execute(sql)
# 提交,增删改操作都需要提交才会生效
conn.commit()
使用pymysql修改数据
d03_pymysql_update.py
sql = 'update students set age=19 where name="老王";'
count = cursor.execute(sql)
# 提交,增删改操作都需要提交才会生效
conn.commit()
使用pymysql删除数据
d04_pymysql_delete.py
sql = 'delete from students where name="老王";'
count = cursor.execute(sql)
# 提交,增删改操作都需要提交才会生效
conn.commit()
9.能够知道事务的四大特性
原子性,一致性,隔离性,持久性
10.能够写出创建索引的SQL语句
创建索引:
– 索引名不指定,默认使用字段名
alter table classes add index my_name (name);