4 SQL 语句下

4.1 自关联

自关联
可以简单的理解为自己与自己进行连接查询。

比如:
一张 areas 表里面有省市区,我们需要在通过这一张表查询某省对应的所有市。

select * from areas as p inner join areas as c on p.`id`=c.`pid` having p.name='湖南';

4.2 外键

外将介绍
MySQL 的外键的约束(FOREIGN KEY)是表的一个特殊字段,对于两个具有关联关系的表而言,相关联字段中的主键所在表就是主表(父表),外键所在的表就是从表(子表)。

注意:

  • 主键不能包含空值,但允许在外键中出空值。也就是说,只要外键的没个非空值出现在指定的主键中,这个外键的内容就是正确的。

创建表时设置外键约束

语法:

# 创建班级表
CREATE TABLE classes(id INT (4) NOT NULL PRIMARY KEY,NAME VARCHAR(36)
);# 创建学生表
CREATE TABLE student(sid INT(4) NOT NULL PRIMARY KEY,sname VARCHAR(30),cid INT(4) NOT NULL);

在创建 student 表时将其 cid 设置为外键。

注意:

  • 从表的外键关联必须是主表的主键,并且主键与外键的类型必须保持一致。

在修改表时添加外键约束

ALTER TABLE 子表 ADD CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES 父表(id);

删除外键约束

ALTER TABLE 子表 DROP FOREIGN KEY fk_cid;

4.2 MySQL 与 Python 交互

*数据准备

  • 创建数据表
-- 创建 一个商品 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 TINYINT NOT NULL DEFAULT 1,is_saleoff TINYINT NOT NULL DEFAULT 0
);

插入数据

-- 插入数据
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);

分表
分表是因为当一张表的数据量比较多时,但是我们只需要查询其中的某个字段数据,就会导致查询效率降低,所以此处我们需要使用到分表。

  • 商品分类表

    • 创建 商品分类 表
CREATE TABLE goods_cates(id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VARCHAR(40) NOT NULL
);
  • 将商品表 中的商品种类 查询并插入到 商品分类表里面
SELECT cate_name FROM goods GROUP BY cate_name;
insert into goods_cates (name) select cate_name from goods group by cate_name;
- 将商品 表中的商品种类 更改位 商品表分类表 对应的 id
UPDATE goods g INNER JOIN goods_cates c ON g.`cate_name`=c.`name` SET g.`cate_name`=c.id;

安装pymyssql

在Windows操作系统上安装
Python3:pip install pymysql
**Python2:**pip install MySQLdb

Ubuntu安装:http://www.jianshu.com/p/d84cdb5e6273

Python 操作MySQL步骤

Connection 对象
用于建立于数据库的链接
创建对象:调用connect () 方法

1 conn=connect(参数列表)
安装pymysql
Python操作MySQL步骤
Connection 对象
34
2
3 """
4 参数host:连接的mysql主机,如果本机是'localhost'
5 参数port:连接的mysql主机的端⼝,默认是3306
6 参数database:数据库的名称
7 参数user:连接的⽤户名
8 参数password:连接的密码
9 参数charset:通信采⽤的编码⽅式,推荐使⽤utf8
10 """
11
12 import pymysql
13
14 con = pymysql.connect(host = 'localhost',port=3306,database='python-
01',user='root',password = 'root',charset = 'utf8')
15
16 from pymysql import *
17
18 conn = connect(host = 'localhost',port=3306,database='python-01',use
r='root',password = 'root',charset = 'utf8'

对象的方法

  • close() 关闭连接
  • commit() 提交
  • cursor() 返回 Cursor 对象,用于执行sql语句并获得结果

Cursor 对象

  • 用于执行sql语句,使用拼读最高的语句为select、insert、update、delete
  • 获取Cursor 对象:调用Connection 对象的Cursor() 方法
csl=conn.cursor()

对象的方法

  • close() 关闭 先关闭游标,在关闭链接
  • execute(operation [,parameters]) 执行语句,并返回影响的行数,主要用于执行insrt、uodate、delete语句。也可以执行cerate、alter、drop等语句。
  • fetchone()执行查询语句时,获取查询结果集的第一行数据,返回一个元组。
  • fetchall() 执行查询语句时,获取结果集的所有行,一行构成一个元组,在将这些元组装入一个元组返回。

使用Python 连接数据库

# 导入 pymysql 模块
import pymysql# 1.连接mysql 数据库
conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='yuanwei123',db='mb',charset='utf8')# 2.获取cursor 游标对象
cs=conn.cursor()# 3.通过游标对象 执行 sql语句 有返回值 且为受影响记录的行数c=cs.execute('select*from goods;')# print(c)# 4.获取数据
print(cs.fetchone())  # 第一条数据
print(cs.fetchone())  # 第二条数据# 获取多条  size=None 默认获取一条 返回((),)
print(cs.fetchmany())print(cs.fetchmany(2))  # 获取size 条# 获取全部
print(cs.fetchall())# print(cs.fetchall())  # 当获取完毕  再查询  返回 为空值# 5 关闭# 关闭游标
cs.close()# 关闭连接conn.close()

数据库优化—— sql 语句相关推荐

  1. 教你如何定位及优化SQL语句的性能问题

    转载自   教你如何定位及优化SQL语句的性能问题 在现如今的软件开发中,关系型数据库是做数据存储最重要的工具.无论是Oracale还是Mysql,都是需要通过SQL语句来和数据库进行交互的,这种交互 ...

  2. ORACLE EXPLAIN PLAN的总结 (优化SQL语句)

    ORACLE EXPLAIN PLAN的总结 文章分类:数据库 在ORACLE数据库中,需要对SQL语句进行优化的话需要知道其执行计划,从而针对性的进行调整.ORACLE的执行计划的获得有几种方法,下 ...

  3. [数据库]简单SQL语句总结

    1.在查询结果中显示列名: a.用as关键字:select name as '姓名'   from students order by age b.直接表示:select name '姓名'   fr ...

  4. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  5. 总结一些关于操作数据库是sql语句还是存储过程问题

    总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...

  6. 数据库基本----SQL语句大全

    数据库基本SQL语句大全 一.基础 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sq ...

  7. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例

    这篇文章主要为大家详细介绍了PHP 连接MySQL数据库的SQL语句的简单示例,具有一定的参考价值,可以用来参考一下. 首先用phpmyadmin进入建立数据库user 再建个三段的表admin 再别 ...

  8. 查看创建数据库的sql语句

    -- 查看创建数据库的sql语句 #SHOW CREATE DATABASE 数据库名; SHOW CREATE DATABASE db2; ​-- 修改数据库编码 #语法 ALTER DATABAS ...

  9. 1.MySQL数据库 2.SQL语句

    01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...

最新文章

  1. C# 读取保存App.config配置文件的完整源码参考
  2. android 网络图片查看器,Handler的用法
  3. 期末考试前的预习,科目:化工设备与反应器(1)
  4. matlab调制函数,matlab用于数字调制,几个函数的使用问题
  5. 算法设计与分析——动态规划——石子合并问题
  6. 线上流量越发昂贵,如何通过裂变营销实现业务增长?
  7. NP-Hard问题浅谈
  8. 高德公交路径等时线分析
  9. openkore 207cn 中文加强版 2010.01.12【彪彪修改】
  10. Git 常用回滚撤销命令总结
  11. python画满天星_跟我学解Python题-海龟制图满天星
  12. 个体和公司以及小微企业的区别
  13. linux+中的su命令,Linux中如何使用SU命令(示例)
  14. LVGL8的窗口切换方式
  15. hotmail邮箱设置【2018年10月14日】
  16. unity 图文混排方案
  17. GIC spec之ITS和LPI中断2
  18. 蓝牙解码格式哪个最好_让有源音箱飞起来,让汽车音响硬起来,飞傲BTR5蓝牙HiFi解码品评...
  19. 程序员把妹指南之电脑配置篇
  20. 等待事件之enq: HW - contention

热门文章

  1. MATLAB app designer 自动全屏显示
  2. 如何让电脑文件夹同步手机
  3. catia直线测距怎么调出来_基于CATIA和激光跟踪仪的部件设计检验一体化方法与流程...
  4. VueJS之v-bind:key爬坑
  5. Java 匹马行天下之一顿操作猛如虎,框架作用知多少?,HTTPS 面试常问全解析
  6. 博士申请 | 香港大学刘希慧老师课题组招收CV方向全奖博士/博后/RA/实习生
  7. CDMA模块与网络连接方式
  8. 创建maven web项目出错Project build error: Non-parseable POM D:\Ieven\workspace\ws1802\jt-web\pom.xm
  9. 驭势科技CEO吴甘沙:探索中国式的自动驾驶之路
  10. 谷歌浏览器皮肤怎么换 修改谷歌浏览器皮肤的方法