前情回顾
1.数据表的创建
修改 update [tb] set col = val where 条件
修改字段 alter
alter table [tb] add 字段名 数据类型
alter table [tb] add 字段名 数据类型 first;
alter table [tb] add 字段名 数据类型 after 字段
类型
alter table [tb] modify 字段名 数据类型
名字
alter table [tb] change 旧字段名 新字段名 数据类型
alter table [tb] drop 字段名;
alter table [tb] rename 表名;
delete from [tb] where 条件
2.高级查询
模糊查询 like % _
as 重命名
排序 order by desc asc
限制 limit [num] offfset [num]
select update delete
联合查询 union all(显示重复的结果) 默认去重
子查询 from 的语句 select 返回多个结果的集合
where 子句= 返回一个精确的值
in
3. 聚合操作
聚合函数: avg() max() min() sum() count()
聚合分组: group by
聚合筛选: having
where 操作实际的字段
--索引 :查询次数的多的时候 对某个字段或者多个字段查询
--索引表 : Btree Hash() ...
--优点: 查询速度快, 提高查询效率
-- 缺点: 创建索引会占用物理空间
外键约束
[constraint symbol] foreign key(字段)
references 表名(字段);
级联动作
默认
从表如果用到了主表的数据,主表不能删也不能改
级联更新 on delete cascade
on update cascade
主表无论修改还是删除,从表都跟着更新
设置空 set null
主表无论删除还是更新,从表所对应的外键字段的值为null
表关联关系
1:m 主人 汽车
m:n 运动员 项目
练习 pyq
用户表
朋友圈表 : 1:m 一个用户可以发多条朋友圈
--关系表 点赞用户 朋友圈 的关系
--多对多: 一个朋友圈可以被多个用户点赞,
--一个用户可以点赞多条朋友圈
作业:自行设计 图书 作家 出版社 E—R
出表格excel 写代码
作家表
出版社表
图书表 1:m 一本书来自一个作者,一个作者可以写多本书
1:m 一本书可以让一家出版社出版,这家出版社可以出多本书
m:n 作者 出版社
文档中 E——R 学生- 课程 - 教师 画出excel表格
写代码 建表 插入值
--1. 统计每位作家出版图书的平均价格
select author,avg(price) from books group by author;
--2. 统计每个出版社出版图书数量
select press,count(*) from books group by press;
--3. 统计同一时间出版图书的最高价格和最低价格
select p_time,max(price),min(price) from books group by p_time;
--4. 筛选出那些出版过超过50元图书的出版社,
--并按照其出版图书的平均价格降序排序
select press,avg(price) from books
group by
press
having max(price)>50
order by avg(price) desc;
--索引 :查询次数的多的时候 对某个字段或者多个字段查询
--索引表 : Btree Hash() ...
--优点: 查询速度快, 提高查询效率
-- 缺点: 创建索引会占用物理空间
--创建带索引的数据表
create table index_test
(id int auto_increment,
name varchar(32),primary key(id),
unique nameIndex(name));
--索引分类 普通索引 唯一索引 主键索引
--建表的时候没有创建索引
create unique index Name on class(name);
-- insert_data 插入了2000000 查看速度
set profiling = 1; 打开功能 (项目上线一般不打开)
--查询语句
show profiles 查看语句执行信息
--外键关联
CREATE TABLE dept (id int PRIMARY KEY
auto_increment,dname VARCHAR(50) not null);
insert into dept values (1,"技术部"),
(2,"销售部"),
(3,"市场部"),
(4,"行政部"),
(5,'财务部'),
(6,'总裁办公室');
-- 创建人员表
CREATE TABLE person ( id int PRIMARY KEY
AUTO_INCREMENT, name varchar(32) NOT NULL,
age tinyint unsigned, salary decimal(8,2),
dept_id int ) ;
--外键关联
alter table person add constraint dept_fk
foreign key(dept_id) references dept(id);
insert into person values
(1,"Lily",29,20000,2),
(2,"Tom",27,16000,1),
(3,"Joy",30,28000,1),
(4,"Emma",24,8000,4),
(5,"Abby",28,17000,3),
(6,"Jame",32,22000,3);
--从表插入数据时,注意外键字段的值要存在主表中
alter table person drop foreign key dept_fk;
--级联动作
alter table person add constraint dept_fk
foreign key(dept_id) references dept(id)
on delete cascade on update cascade;
alter table person drop foreign key dept_fk;
drop index dept_fk on person;
alter table person add
foreign key(dept_id) references dept(id)
on delete set null on update set null;
--一对多
create table people (id varchar(32)
primary key,name varchar(30),
age int unsigned);
create table car(id int primary key
auto_increment,brand varchar(32),
price decimal(10,2),
pid varchar(32),
foreign key(pid) references people(id));
--多对多
create table athlete(id int primary key
auto_increment,name varchar(32) not null,
age tinyint not null,
country varchar(32) not null);
create table item(id int primary key
auto_increment,rname varchar(35));
--关系表
create table athlete_item(id int primary key
auto_increment,aid int not null,
tid int not null,foreign key(aid) references
athlete(id),foreign key(tid)
references item(id));
"""
use stu;
create table index_test (id int primary key auto_increment,name varchar(30));
"""
import pymysql
db = pymysql.connect(user='root',password="123456",database='stu',charset='utf8')
cur = db.cursor()
sql = "insert into index_test (name) values (%s);"
exe = []
s = "Tom"
for i in range(2000000):
name = s + str(i)
exe.append(name)
try:
cur.executemany(sql,exe)
db.commit()
except:
db.rollback()
db.close()