Python第二阶段学习 day07

前情回顾
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()


上一篇:day07


下一篇:C# Web Forms - Using jQuery FullCalendar