笔记...学习mysql第二天

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);

你可能感兴趣的:(学习)