昨日内容:

一. 外键的变种 (*************)

唯一索引

unique('name') : 此列是不能重复的

联合唯一索引:

unique('name', 'age') : 这两列的值不能重复

一对多

department:

id depart_name

1 公关部

2 xxx 部

user:

id username depart_id (外键的约束)

1 root 1

2 root2 2

3 root3 1

一对一

看业务的需求

user:

id username depart_id (外键的约束)

1 root 1

2 root2 2

3 root3 1

blog:

id url user_id (唯一 + 外键约束)

1 /root/ 1

2 /root3/ 3

多对多

user:

id username

1 root

2 root2

3 root3

host:

id hostname

1 c1.com

2 c2.com

3 c3.com

user2host:

id uid hid (联合唯一 + 外键)

1 1 1

2 1 2

3 3 1

4 3 3

二. 数据行的详细操作

增:

insert into t1 (name, age) values ('lxxx', 12);

insert into t1 (name, age) values ('lxxx', 12), ('xxxxx', 13), ('xxxxxx', 13);

insert into t1 (name, age) select name, age from t2;

删:

delete from t1;

delete from t1 where name='xxx' and age!=12;

更新:

update t1 set name='xxx', age=123 where name='xxxx' and age=13;

查询:

通配符:

like name '李'

% : 匹配所有

_ : 匹配一个字符

限制取数据:

limit 从第几(索引)条开始取, 去多少条数据

分页: (***********)

page = 1,2,3,4,5...n

offset = 10

limit (page-1)*offset, offset;

排序:

order by 列名 asc(升序), desc(降序)

分组:

将数据按照某一列进行分组

group by + 聚合函数 (count/sum()/avg()/max()/min())

having

连表:

left join :

左边的全部显示

right join:

右边的全部显示

left join

今日内容:

一. 作业

navcate formysql

1、查询所有大于60分的学生的姓名和学号

思路:

那几张表:

关联 2张表: student score

select * from score left join student on score.student_id = student.sid;

查询没学过“李平”老师课的同学的学号、姓名

查询学过“李平”老师课的同学的学号、姓名

"李萍老师"教的课程ID

查询

至少有一门课与 学号为“1”的同学所学课程相同 的同学的学号和姓名

1 2,4

select course_id from score where student_id=1; ## 1,2,4

select student_id from score where course_id in (select course_id from score where student_id=1)

select sid ,sname from student where sid in (select student_id from score where course_id in (select course_id from score where student_id=1) having sid!=1)

select student.sid, student.sname from student left join score on student.sid = score.student_id where sid!=1 and course_id in (select course_id from score where student_id=1)

tee : 重定向导入某一个文件

二. pymysql (Python操作MySQL)

pip3 install pymysql

注意:

a. conn, cursor 用完了需要关闭资源连接

b. 查询的时候, fetchone, fetchmany, fetchall, 默认返回的是元组, 需要返回字典的话: cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

c. 删除和更新的时候, 需要在execute之后, 添加 conn.commit()

PyMySQL: (*******************************)

a. 登录验证

写sql语句的时候, %传值的时候, 需要加引号:

sql = "select * from t4 where name = '%s' and pwd = '%s'" % (username, pwd)

上面的sql语句带来的风险是:

例一:

username = zekai' #

select * from t4 where name = 'zekai' #' and pwd = ''

例二:

username = dbsahvbdsha' or 1=1 #

select * from t4 where name = 'dbsahvbdsha' or 1=1

上面出现的问题,我们称之为 SQL注入 (**********************************)

出现问题的根源是:

因为太过于相信用户的输入, 导致我们在接受用户输入的参数的时候, 并没有对他进行转义

解决SQL注入:

1. 自己手工对用户输入的值进行转义

2. 使用execute()自动进行过滤

sql = "select * from t4 where name = %s and pwd = %s"

cursor.execute(sql,(username, pwd))

#$## 插入一条

cursor.execute(sql, ('lxxx', '1234'))

### 插入多条

data = [

('aaaaa', 'aaa'),

('bbbb', 'bbb'),

('ffff', '666'),

('rrrr', '888'),

]

cursor.executemany(sql, data)

try:

cursor.execute(sql, ('lxxx', '1234'))

### 删除和更新的时候, 需要事物提交

conn.commit()

except Exception as e:

conn.rollback()

cursor.lastrowid : 最后一行的行数

事务: (重点)

一组操作, 要么都成功, 要么都失败

特性:

原子性: 一组操作, 要么都成功, 要么都失败

一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配

隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的

持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消,只能通过“另开起一个事物”来抵消之前的错误

场景:

思考:

我去银行给朋友汇款,

我卡上有1000元,

朋友卡上500元,

我给朋友转账100元(无手续费),

如果,网线断了, 我的钱刚扣,而朋友的钱又没加时, 怎么办?

create table t11 (

id int auto_increment primary key,

name varchar(32) not null default '',

money int not null default 0

)engine=Innodb charset=utf8;

insert into t11 (name,money) values ('zekai', 1000), ('eagon', 500);

解决方法:

开启事务 (start transaction)

(执行sql操作)

commit : 提交上面的SQL, 让其生效

rollback: 回滚

show full tables; 显示全部类型

--------------------------------------------------------------------------

下面这些了解:

视图:

产生的原因:

如果有一个SQL语句频繁的会被使用到,比如说:

select * from t4 where id>12 and id <24;

搞一个映射,或者取一个别名

select * from t4 where id>12 and id <24 === > v1

视图:

select * from v1;

创建视图:

create view v1 as select * from t4 where id>12 and id <24;

修改视图:

alter view v1 as sql语句;

删除视图:

drop view v1;

问题:

如果原生的表数据发生了变化, 那视图会不会发生变化? 也会变化

视图中的数据会不会发生修改? 不会发生修改

应用场景:

MySQL: (DBA)

生成视图View

程序:

调用 select * from v1;

函数:

不要轻易使用

在程序中, 用代码计算, 计算好了, 再传给SQL语句执行

存储过程:

将一大堆 SQL 语句进行封装, 类似于函数, 结果就是存储过程

MySQL服务端:

DBA (写)

a. 简单的存储过程:

delimiter //

create procedure p1()

BEGIN

select * from t11;

END //

delimiter ;

程序:

call p1();

b. 传参数: (in)

delimiter //

create procedure p2(

in n1 int,

in n2 int

)

BEGIN

select * from t11 where id > n1;

END //

delimiter ;

程序:

call p2(12, 2)

c. 传入参数: (out)

delimiter //

create procedure p3(

in n1 int,

out n2 int

)

BEGIN

select * from t11 where id > n1;

set n2 = 1;

END //

delimiter ;

set @v2=123212;

call p3(12, @v2);

select @v2;

触发器:

向用户表中添加一条数据的同时, 在日志表中也添加一条记录

delimiter //

CREATE TRIGGER t1 BEFORE INSERT ON t7 FOR EACH ROW

BEGIN

insert into t11 (name, money) values ('xxx', 1234);

END //

delimiter ;

python和mysql匹配吗_python使用mysql相关推荐

  1. python往mysql存入数据_Python操作mysql之插入数据

    之前有写过一篇python查询mysql数据的文章,今天写通过python插入数据到mysql数据库. 相关mysql视频教程推荐:<mysql教程> 先建库,建表,建用户mysql> ...

  2. python mysql日期输出格式_Python/Shell/MySQL时间获取与格式转换

    一.说明 时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下. 另外个人真不喜欢同样功能 ...

  3. mysql教程虫师_python使用mysql数据库 - 虫师

    一,安装 mysql 如果是 windows 用户, mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux  下的安装可能会更加简单,除了下载安装包进行安装外, ...

  4. mysql 导出数据字典_python 查询 MySQL 数据库并返回字典集

    1. 导入第三方库 import pymssqlimport numpy as npimport pandas as pd 2. 创建数据库连接 '''pymysql.Connect()参数说明hos ...

  5. python返回舱匹配个数_Python | 用作数据类型(解释:头等舱,闭幕)

    python返回舱匹配个数 In python, a function is a type. That's why python function is known as "First cl ...

  6. python实现括号匹配代码_python实现括号匹配的思路详解

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...

  7. Python结合mysql的实战_python连接mysql,实战。实现ATM类似功能。

    数据库,表建立. create database `mydata`; DROP TABLE IF EXISTS `mytab`; CREATE TABLE `mytab` ( `userid` int ...

  8. python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法

    MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库 ...

  9. python查询mysql 乱码问题_python查询mysql中文乱码问题

    问题: python2.7 查询或者插入中文数据在mysql中的时候出现中文乱码 --- 可能情况: 1.mysql数据库各项没有设置编码,默认为'latin' 2.使用MySQL.connect的时 ...

  10. python创建数据库表空间_Python 操作 mysql

    """python 操作mysql时,默认开启事务,必须在增删改之后 提交数据,才会真正对数据库发生变化,默认默认是回滚 提交数据: conn.commit() 回滚数据 ...

最新文章

  1. Blend4精选案例图解教程(三):一键拖拽
  2. 存储过程调试技巧搜集
  3. php 栏目循环,帝国CMS listshowclass循环栏目标签_PHP教程
  4. css如何实现背景透明,文字不透明?
  5. 如何从零开始,成为element-plus的contributor
  6. 字符串替换方法的优劣
  7. Android View生命周期
  8. c语言,递归翻转一个单链表,c实现单链表
  9. python安装gz文件_python tar.gz怎么安装-问答-阿里云开发者社区-阿里云
  10. 面试官:this和super有什么区别?this能调用到父类吗?
  11. cocos2d精灵教程(三篇)
  12. 手部骨骼特征 数据集_速写局部精讲之手部比例、肌肉、特征解析
  13. 在应用中集成科大讯飞的语音识别技术
  14. 常用Web漏洞扫描工具汇总
  15. WIN7系统下Mapgis6.7常见的两个问题及解决办法
  16. MongoDB 唯一索引
  17. mysql中如何复制数据表_MySQL中快速复制数据表方法汇总
  18. c++学习书籍推荐《深度探索C++对象模型》下载
  19. php——三篇夯实根基第三篇
  20. HDMI热插拔原理及信号解析

热门文章

  1. 【职场加油站】给职场新人的几条忠告
  2. STM32串口3 映射和完全重映射 PB10 PB11 PD8 PD9 PC10 PC11
  3. 杭州地铁2号线西北段顺利通车 三思LED照明彰显“暖心”服务
  4. 【防火墙_动态路由-OSPF】
  5. 爱恨情仇——Kobe悖论终结篇
  6. 计算机无法读取手机内存,手机内存卡不能读取如何解决
  7. 光衰高怎么办_灯太亮了怎么办 led灯该如何选择
  8. UEFI 模式下重新安装系统注意事项
  9. C/C++中的函数参数传递机制 作者:杨宁 发布时间:2000/11/30
  10. BurpSuite 安装配置(License Key)