1、MySQL

程序:

socket客户端

2. 根据IP和端口进行连接

3. 发送指令:

xxx

7. 接收结果

socket服务端

  1. 运行起来

  2. 获取指令(recv)

    xxx

  3. 解析命令

    文件夹操作:

    ...

    文件操作:

    ...

    文件内容操作:

    ...

  4. 返回结果

    数据库管理系统(软件)

    客户端

    - Java写的

    - Python写的

    - xxx

    - MySQL自带的(mysql -uxxx -p xxx)

    PS:发送指令规则,SQL语句

    服务端

    - mysqld

SQL语句:

文件夹操作(数据库):

创建:

create database db_name;

create database db_name default charset utf8;

删除:

drop database db_name;

进入文件夹:

use db_name

文件操作(数据表):

创建:

单表:

create table user_info(
id int not null auto_increment primary key,
name char(20),
age int,
gender char(1)
)engine = innodb default charset=utf8; insert into user_info(name,age,gender) values('alex',19,'男');
  1. 列名
  2. 数据类型
  3. 是否可以问空(null,not null)
  4. 默认值(default 1)
  5. 自增(auto_increment) 一个表只能有一个自增列
  6. 主键(primary key)

    约束:数据不能为空、数据不能重复。

    索引:加速查找(B树结构)
  7. 外键:

    对某列数据的内容进行约束。

    约束:只能是某个表中某列已经存在的数据。

    constraint 约束名称 foregin key(deparment_id) references dep_info(id)

    含外键的关系成为1对多。

多表:

一对多:

create table user_info(

id int not null auto_increment primary key,

name char(20),

age int,

gender char(1),

deparment_id int,

constraint 约束名称 foregin key(deparment_id) references dep_info(id)

)engine = innodb default charset=utf8;

	create table dep_info(
id int not null auto_increment primary key,
title char(32),
)engine=innode default charset=utf8;

多对多:(关系表)

	create table boy(
id int not null auto_increment primary key,
name char(32)
)engine = innodb default charset=utf8; create table girl(
id int not null auto_increment primary key,
name char(32)
)engine = innodb default charset=utf8; create table b2g(
id int not null auto_increment primary key,
b_id int,
g_id int,
constraint 约束名称1 foregin key(b_id) references boy(id),
constraint 约束名称2 foregin key(g_id) references girl(id)
)engine = innodb default charset = utf8;

应用场景:

1、根据具体业务

2、HTML的场景

创建的时候只需要输入数据的情况下:单表

创建的时候必须要我们选择一个其他数据的场景下:一对多

创建的时候针对某些字段可以进行多选的情况下:多对多

删除:

drop table table_name;

文件内容操作(数据行):

插入:

insert into  table_name(field) values(value),(value2)  --> 两个(value)表示插如多行数据
insert into table_name(cname) select field from table_name --> 把select查到的结果,当作数据来赋值给value

删除:

清空表:

	delete from table_name  --> 自增列会继续之前的ID
truncate table table_name --> 物理删除,速度快,重新计算ID

删除某一条:

	delete from table_name where filed = values and/or ...  --> 只删除符合条件的数据
delete from table_name where filed in (1,2,3,4)
delete from table_name where id between 5 and 10

修改:

update table_name set field = 'value'  --> 更新所有数据的field字段的值,加 where 只修改匹配到的行
update table_name set id = 8 , name = 'daxin' where age = 18;

查询:

select * from table_name where id > 2
select field as '别名' from table_name --> 加别名
select * from table_name where id in (1,2)
select * from table_name where cid in (select tid from teacher)

条件:

select * from table_name order by field asc/desc(正序/倒序)
select * from table_name order by field asc limit 1 取第一个值
select * from table_name limit 1,2(起始位置,找几个)
select * from table_name where field like '%key%' --> 查找field字段包含key的数据% 表示任意个任意字符, _表示任意一个字符

分组:

select * from table_name group by field  --> 分组显示,会去重,需要使用聚合函数来统计重复的次数
select field,count(id) from table_name group by field --> 对id字段进行聚合(其他的还有min(),max(),sum(),avg()等)

例子:

1、获取每个班级多少人

SELECT  class.caption,count(sid) from class
LEFT join student on student.class_id = class.cid
group by class.caption

2、获取每个班级有多少人并且选出认识大于2的班级,

注意:如果针对 group by 的结果进行筛选,那么需要使用 having 不能在使用 where 了.

SELECT  class.caption,count(sid) as number from class
LEFT join student on student.class_id = class.cid
group by class.caption
HAVING number >= 2

3、每个课程的不及格的人数。

select course.cname,count(sid) from score
left join course on score.corse_id = course.cid
where number < 60
group by course.cname

连表:

select student.sid,student.sname,class.caption from student LEFT JOIN class on student.class_id = class.cid ;

把class表中的字段放在student表的左边,并且进行 student.class_id = class.cid 匹配后显示,数据量以from指定的表为基准

left join:

以 from 指定的表为基准,对数据进行显示

right join: -->不常用

以 join 后面的表为基准进行显示。

inner join:(join 使用的就是)

只保留连个表中都有数据的条目

例子:

1、id=1的老师任教的课程名称

2、老师姓名瞎猫任教的课程命令

3、已选课程id=1,所有学生的姓名

4、已选体育课,所有学生的姓名

5、已选波多任教任意课程,所有学生姓名

union:

把两个SQL的结果进行组合(上下合并)

select * from student
union / union all
select * from teacher;

注意上下两个表中的列数要统一

注意:

1、如果所有数据都一致,那么union会对结果进行去重

2、union all ,会保存所有的

MySQL的扩展:wupeiqi 博客

基本数据类型:

MySQL的数据类型大致分为:数值、时间 和 字符串。

数字:

整数

tinyint 小整数,数据类型用于保存一些范围的整数数值范围。
smallint
int
bigint

小数

float 浮点型(长度越长越不精准)
double 浮点型(双精度,精度比float稍高) 范围比float更大
decimal 精准(内部使用字符串进行存储的) -> 适合对精度有要求的

字符串

char(19)[字符长度]     定长字符串 --> 占用空间大,但是效率高
varchar(19)[字符长度] 不定长字符串 --> 占用空间是可变的,但是效率低
注意:最大可以存放255个字符
text() 65535个字符
mediumtext() 16777215个字符
longtext() 4294967254个字符

二进制:

TinyBlob
Blob
MediumBlob
LongBlob
存文件:虽然可以用二进制进行存储,但是一般是存储文件在服务器上的路径(URL)

时间:

date  YYYY-MM-DD
time HH:MM:SS
year YYYY
DATETIME YYYY-MM-DD HH:MM:SS -->常用
TIMESTAMP 时间戳格式

Python操作MySQL

python 3.x 中使用 pymysql
python 2.x 中使用 mysqldb
方法和使用规则是一模一样的。

用户登录改造

sql拼接,引出SQL注入问题

提交 commit

cursor.lastrowid 获取上一个增加的数据的自增ID

指定查询的数据类型

	cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)

Python编程-数据库的更多相关文章

  1. Python编程-数据库-利用PyMysql访问windows下的MySql数据库

    1. 下载PyMysql并且安装 下载地址 下载zip包后解压到目录,进入该目录,执行以下命令安装 python setup.py install 2. 编写一个简单的数据库访问程序 simple_m ...

  2. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  3. 自学Python之路-Python并发编程+数据库+前端

    自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3

  4. python之数据库编程

    python之数据库编程 sqlite 1.前期准备工作 导入模块: import sqlite3 连接数据库 conn = sqlite3.connect("test.db") ...

  5. 精通 Oracle+Python,第 5 部分:存储过程、Python 编程

    调用数据库存储过程及其他感兴趣的高级 Python 编程功能. 2010 年 3 月发布 对于涉及数据库的软件开发来说,有两种主流开发方法:一种是在应用程序中(对于三层体系结构,也可以是在中间件中)实 ...

  6. 使用Python管理数据库

    使用Python管理数据库   这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...

  7. 书籍推荐Python编程:从入门到实践(高清完整pdf)

    这本书我看了电子版的,感觉还不错,全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 -- 游戏.数据可视化和 Web 应用程序,同时掌握让你终身受益 ...

  8. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  9. python sqlite3 数据库操作

    python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...

随机推荐

  1. ROS导航之地图costmap_2d与bresenham算法

    读者可以参读http://wiki.ros.org/costmap_2d   costmap_2d: 无论是激光雷达还是如kinect 或xtion pro深度相机作为传感器跑出的2D或3D SLAM ...

  2. 深入理解line

    什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...

  3. TP数据删除

    [数据删除及执行原生sql语句] delete()  返回受影响的记录条数 $goods -> delete(30);   删除主键值等于30的记录信息 $goods -> delete( ...

  4. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演

    [BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...

  5. 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数

    [BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...

  6. 从ELK到EFK

    https://my.oschina.net/itshare/blog/775466 http://blog.51cto.com/467754239/1700828 日志系统 日志就是程序产生的,遵循 ...

  7. 将方法定义在prototype上的好处

    通常js类定义和使用的是这样的: var Class=function(){}; Class.prototype.sharedFn=function(){}; var instanceA=new Cl ...

  8. Java死锁的理解

    我们有时候操作数据库的时候会遇到死锁,那么什么使死锁呢?它的一个比较官方的定义就是:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将 ...

  9. 巨蟒python全栈开发django13:中间件部分

    1.回顾昨日内容 2.session认证装饰器 3.django整个流程 4.中间件简单应用 5.简单统计访问次数 6.中间件其他方法 7.orm单表内容回顾

  10. 【转】虚拟 IO 服务器(VIOS)和 IBM i

    Power 主机上的虚拟化应用,简单阐述虚拟 IO 服务器的功能,用途,优点,以及虚拟 IO 服务器在高级虚拟化技术的作用.举例说明虚拟 IO 服务器与 IBM i 分区直接互联特性. 引言 随着信息 ...