MySQL与Python交互

MySQL与Python交互

2018年11月29日

一、 准备数据

– 创建数据库
create database jing_dong charset=utf8;
– 使用京东数据库
– 创建一个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
);

– 插入数据
insert into goods values (0,‘15.6英寸 ThinkPad X1隐士’, ‘游戏本’, ‘联想’, ‘14999’, default, default);
insert into goods values (0,‘14.0英寸 荣耀MagicBook’, ‘超极本’, ‘华为’, ‘3999’, default, default);
insert into goods values (0,‘14.0英寸 小新潮7000’, ‘超极本’, ‘联想’, ‘3999’, default, default);
insert into goods values (0,‘14.0英寸 ThinkPad 翼480’, ‘轻薄本’, ‘联想’, ‘5499’, default, default);
insert into goods values (0,'13.3英寸 Apple MacBook Air ', ‘超极本’, ‘苹果’, ‘6588’, default, default);
insert into goods values (0,‘15.6英寸 拯救者Y7000’, ‘笔记本’, ‘游戏本’, ‘8499’, default, default);
insert into goods values (0,‘13.3英寸 Apple MacBook Air’, ‘超极本’, ‘苹果’, ‘7988’, default, default);
insert into goods values (0,‘15.6英寸 机械革命(MECHREVO)S1 Plus’, ‘游戏本’, ‘机械革命’, ‘6999’, default, default);
insert into goods values (0,‘15.6英寸 游匣G3烈焰版’, ‘游戏本’, ‘戴尔’, ‘7599’, default, default);
insert into goods values (0,‘14.0英寸 MagicBook’, ‘轻薄本’, ‘华为’, ‘5499’, default, default);
insert into goods values (0,‘15.6英寸 飞行堡垒5’, ‘游戏本’, ‘华硕’, ‘5999’, default, default);
insert into goods values (0,‘15.6英寸 暗影精灵4代’, ‘游戏本’, ‘惠普’, ‘6999’, default, default);
insert into goods values (0,‘15.6英寸 机械革命(MECHREVO)Z2 Air’, ‘游戏本’, ‘机械革命’, ‘6998’, default, default);
insert into goods values (0,‘15.6英寸 小米(MI)Pro’, ‘轻薄本’, ‘小米’, ‘5999’, default, default);
insert into goods values (0,‘NVV NP-2笔记本支架’, ‘笔记本配件’, ‘NVV’, ‘79’, default, default);
insert into goods values (0,‘15.6英寸 双肩电脑包’, ‘笔记本配件’, ‘联想’, ‘198’, default, default);
insert into goods values (0,‘键盘膜’, ‘笔记本配件’, ‘联想’, ‘15’, default, default);
insert into goods values (0,‘屏幕膜’, ‘笔记本配件’, ‘联想’, ‘19’, default, default);
insert into goods values (0,‘散热器’, ‘笔记本配件’, ‘联想’, ‘11’, default, default);
insert into goods values (0,‘内胆包’, ‘笔记本配件’, ‘联想’, ‘29’, default, default);
insert into goods values (0,‘无线鼠标’, ‘笔记本配件’, ‘联想’, ‘79’, default, default);
insert into goods values (0,‘rapoo3500p’, ‘笔记本配件’, ‘雷柏’, ‘89’, default, default);
insert into goods values (0,‘21.5英寸 成就3470’, ‘台式机’, ‘戴尔’, ‘3398’, default, default);
insert into goods values (0,‘23.6英寸 灵越3670’, ‘台式机’, ‘戴尔’, ‘5098’, default, default);
insert into goods values (0,‘暗影精灵3Plus’, ‘台式机’, ‘惠普’, ‘8999’, default, default);
insert into goods values (0,‘新i7 9700K/RTX2080/Z390’, ‘台式机’, ‘武极’, ‘11111’, default, default);
insert into goods values (0,‘23.0英寸 天逸510 Pro’, ‘台式机’, ‘联想’, ‘8499’, default, default);
insert into goods values (0,‘外星人Alienware Aurora’, ‘台式机’, ‘外星人’, ‘15999’, default, default);

  1. SQL语句强化
    a. 查询类型 cate_name 为“超极本”的商品名称、价格
    select name as 商品名字,price as 商品价格 from goods where cate_name=“超极本”;
    b. 显示商品种类
    select cate_name from goods group by cate_name;
    c. 求所有电脑产品的平均价格,并且保留两位小数
    select round(avg(price),2) as avg_price from goods;
    d. 显示每种商品的平均价格
    select cate_name ,avg(price) from goods group by cate_name;
    e. 查询每种类型的商品中 最贵、最便宜、平均价、数量
    select cate_name,max(price),min(price),avg(price),count(*) from goods group by cate_name;
    f. 查询所有价格大于平均价格的商品,并且按照价格降序排序
    select id,name,price from goods where price >(select avg(price) from goods ) order by price desc;
    g. 查询每种类型中最贵的电脑信息
    select * from (
    select cate_name,max(price) as max_price from goods group by cate_name) as g_new left join goods as g
    on g_new.cate_name=g.cate_name and g_new.max_price=g.price;
  2. 创建商品分类表
    a. 创建商品分类 if not exists
    create table if not exists goods_cates(
    id int unsigned primary key auto_increment,
    name varchar(40) not null);
    b. 查询goods表中的商品种类
    1. select cate_name from goods group by cate_name;
    2. select distinc cate_ name from goods;
    c. 将分组结果写入到goods_cates数据表
    insert into goods_cates(name) select cate_name from goods group by cate_name;
  3. 同步数据
    a. update goods as d inner join goods_cates as c on g.cate_name=c.name set g.cate_name = c.id;
  4. 创建商品品牌表
    a. 通过create创建 一段代码两个语句
    create table if not exists goods_brands(
    id int unsigned primary key auto_increment,
    name varchar(40) not null) select brand_name as name from goods group by brand_name; —>name 要相同,一 一对应
  5. 同步数据
    a. update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name = b.id;
  6. 修改表结构
    a. 查看goods的数据表结构,
    desc goods;
    b. 通过alter table语句修改表结构
    alter table goods change cate_name cate_id int unsigned not null ,change brand_name brand_id int unsigned not null; —> 可以修改一个或者多个语句
  7. 外键
    a. 分别在goods_cate 和 goods_brands 表中插入记录
    insert into goods_cates(name) values (“路由器”),(“交换机”),(“网卡”);
    insert into goods_brands(name) values (“海尔”),(“清华同方”),(“神舟”);
    b. 在goods 数据表中写入任意记录
    insert into goods (name, cate_id, brand_id)
    c. 查询所有商品的详细信息(通过内连接)
    d. 查询所有商品的详情信息(通过左连接)
    e. 对已存在的数据表 如何更新外键的约束
  8. 给brand_id 添加外键约束
    alter table goods add foreign key (brand_id) references goods_brands(id);
    f. 如何取消外键约束?
    为什么会取消? 因为在实际开发中,很少会使用到外键约束,会极大地降低表更新的效率
    取消办法
    –需要先获取外键约束名称,该名称会自动生成,可以通过查看表创建语句来获取名称
    show create table goods;
    – 获取名称之后就可以根据名称来删除外键约束
    alter table goods drop foreign key 外键名称;

你可能感兴趣的:(MySQL数据库)