本结目录

数据库操作

数据表操作

外键约束

多表查询

索引

事务

python连接Mysql

数据库操作

此操作针对windows环境下

该操作再Mysql服务器启动以及客户端连接之后

对数据库操作之前,引申一些较为听的懂的白话

1、显示数据库

show databases; --后面记得跟英文字符的分号

show create database 数据库名称; --查看数据库创建信息

默认数据库:  mysql - 用户权限相关数据  test - 用于用户测试数据  information_schema - MySQL本身架构相关数据

2、创建数据库

show databases; --查看当前Mysql都有那些数据,根目录都有那些文件夹

create database 数据库名; --创建文件夹

use 数据库名; --使用选中数据库,进入目录

show tables;--查看当前数据库下都有那些表

create table 表名(nidint, namevarchar(20), pwdvarchar(64)); --创建数据库表/*阐释

相当于创建一个tb1的表 有nid,name,pwd三列

nid int 为int类型 varchar(20) 为字符类型最多20*/

select * from 表名; --查看表中的所有数据

insert into 表名(nid, name, pwd) values(1, 'alex', '123'); --插入数据

3、修改数据库

alter databases 数据库名称 character set utf8; --修改数据库编码格式

4、删除数据库

drop database [if exists] db_name;

5、用户管理

显示当前使用的数据库中所有表:show tables;

PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

show databases;usemysql;

show tables;

可以看到mysql下有多少张表

user表是用户表desc user; 查看user表有多少列select host,user from user; 可以看到用户

创建用户create user '用户名'@'IP地址' identified by '密码';

删除用户drop user '用户名'@'IP地址';

修改用户

renameuser '用户名'@'IP地址'; to '新用户名'@'IP地址';;

修改密码set password for '用户名'@'IP地址' = Password('新密码')

数据表操作

1、创建数据表

create table表名(

列名 类型 是否可以为空,

列名 类型 是否可以为空

)ENGINE=InnoDB DEFAULT CHARSET=utf8--ENGINE=InnoDB 表示引擎 后为默认编码格式为utf

--是否可空,null表示空,非字符串

not null --不可空

null --可空

--默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create tabletb1(

nidint not null defalut 2,

numint not null)

--主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

create tabletb1(

nidint not null auto_increment primary key,

numint null)

或create tabletb1(

nidint not null,

numint not null,primary key(nid,num)

)

--自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

create tabletb1(

nidint not null auto_increment primary key,

numint null)

或create tabletb1(

nidint not nullauto_increment,

numint null,index(nid)

)--对于自增列,必须是索引(含主键)。

--对于自增可以设置步长和起始值

show session variables like 'auto_inc%';set session auto_increment_increment=2;set session auto_increment_offset=10;

shwo global variableslike 'auto_inc%';set global auto_increment_increment=2;set global auto_increment_offset=10;

2、查看数据表

show tables; --显示当前数据库所有表

desc 表名; --查看表结构

showcreate table 表名 --查看完整表创建信息

3、修改表结构

--增加列(字段)--添加多字段用逗号隔开进行

alter table 表名 add 列名 类型 [约束条件];--删除列(字段)--多字段删除也用逗号隔开,无需加数据类型

alter table 表明 drop列名1,列名2...;--修改列(字段)

--列类型修改

alter table 表名 modify 列名 类型 [约束条件][first|after 列名];--列名称修改

alter table 表名 change 原列名 新列名 类型 [约束条件][first|after 列名];

4、修改表名

rename table 原表名 to 新表名;

5、删除表

drop table 表名;

表记录操作

1、增

insert into 表 (列名,列名...) values(值,值,值...)insert into 表 (列名,列名...) values(值,值,值...),(值,值,值...)insert into 表 set 列名=值,列名=值...;--insert into 表 (列名,列名...) select (列名,列名...) from 表

2、删

delete from 表名 where 字段键值对; --可多条多虑

delete from表名;truncate table表名;--如不进行筛选,则删除表的所有记录(表依旧存在)--delete 逐条删除,留下空表--truncate 先删除表,而后copy一个与之前相同的空表

3、改

update 表 set name = 'Tony' where id>1

--多条可以用逗号隔开进行修改--进行筛选则单独对筛选的那部分进行修改--不进行筛选,则修改所有符合的部分

4、查(*****)

select * from 表 --查看表中的所有数据

select * from 表 where id > 1 --筛选id大于1的所有数据

select nid,name,gender as gg from 表 where id > 1 --查看id大于1的nid,name,gender的三个字段 as ... 表示进行别名设置

A、条件select * from 表 where id > 1 and name != 'alex' and num = 12; --筛选id>1且name不为alex且num为12的数据

select * from 表 where id between 5 and 16; --筛选id值在5到16范围内的数据

select * from 表 where id in (11,22,33) --筛选id值为11或22或33的数据

select * from 表 where id not in (11,22,33) --反之

select * from 表 where id in (select nid from表)

B、SQL通配符select * from 表 where name like '%le%' --选取name包含有le的所有数据

select * from 表 where name like 'ale_' --ale开头的所有(一个字符)

select * from 表 where name regexp "^[awv]"; --选取name以'a'、'w'或'v'开始的所有数据

select * from tb where name regexp "^[a-c]"; --选取name以a到c开头范围内的所有的数据

select * from tb where name regexp "^[^a-c]";--选取name非以a到c开头的所有数据

C、限制select * from tb limit 2; --前2行

select * from tb limit 2,2; --从第2行开始的后2行

select * from tb limit 2 offset 2; --从第2行开始的后2行

D、排序select * from tb order by name asc; --按照name升序排列

select * from tb order by name desc; --按照name降序排列

E、分组select * from tb group by name; --根据名字分组

select * from tb group by 2; --根据第2个字段分组

select * from employee_tbl group by name having id>4; --根据名字分组且id大于4的数据

--where作用于分组前,having作用于分组后且可以用聚合函数,在where中就不行

F、聚合函数(经常作用于分组查询配合使用)SUM(字段) --求和

COUNT(字段) --次数统计

AVG(字段) --平均值

MAX(字段) --最大

MIN(字段) --最小

= --等于

<> --不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=

> --大于

< --小于

>= --大于等于

<= --小于等于

BETWEEN--在某个范围内

LIKE --搜索某种模式

IN --指定针对某个列的多个可能值

以上都只是单表性的查询,例如模拟在实际生活中,会有一张员工表,而员工会有其归属的部门,那么相应的也会有一张部门表.在其中相应的俩者之间会有一种相应的关联,那么这里引申了外键及多表查询

外键约束

外键可以理解为一种约束,它有以下限制(FOREIGN KEY为创建外键的关键词)

注意:作为外键一定要和关联主键的数据类型保持一致

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

创建外键

--1、建立从表的时候就和主表建立外键

CREATE TABLETABLE_NAME('字段'类型,'字段'类型,

... ...FOREIGN KEY (从表字段) REFERENCES主表(字段)

);--2、建表完成之后,也可以通过sql语句和主表建立联系

ALTER TABLE 从表 ADD CONSTRAINT 外键名称(形如:FK_从表_主表) FOREIGN KEY (从表字段) REFERENCES 主表(字段);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称

--创建表 班级表和学生表

CREATE TABLEclass(

idINT PRIMARY KEYAUTO_INCREMENT,

nameVARCHAR(20),

prieceINT);DESCclass;INSERT INTO class(name,priece) VALUES("python",15800),

("linux",14800),

("go",16800),

("java",18800);SELECT * FROMclass;CREATE TABLE student (sid INT PRIMARY KEYAUTO_INCREMENT,

nameVARCHAR(20),

ageINT,

sexTINYINT(1),

class_idINT,FOREIGN KEY (class_id) REFERENCESclass(id));

SHOWCREATE TABLEstudent;DESCstudent;INSERT INTO student(name,age,sex,class_id) VALUES("tony1",18,0,1),

("tony2",19,1,1),

("tony3",17,1,2),

("tony4",19,1,3),

("tony5",19,0,2),

("tony6",20,1,4);SELECT * FROMstudent2;CREATE TABLE student2(sid INT PRIMARY KEYAUTO_INCREMENT,

nameVARCHAR(20),

ageINT,

sexTINYINT(1),

class_idINT);--建表之后添加外键

ALTER TABLE student2 ADD CONSTRAINT a1 FOREIGN KEY (class_id) REFERENCESclass(id);

SHOWCREATE TABLEstudent2;--这样绑定的class_id超出class的id则不让插入

INSERT INTO student2(name, age, sex, class_id) VALUES("tony8",17,0,1);--删除外键

ALTER TABLE student2 DROP FOREIGN KEYa1;--删除外键之后,则可以插入超出class id范围的数据

INSERT INTO student2(name, age, sex, class_id) VALUES("tony9",17,0,5);

INOODB下支持的ON语句

--外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update

--外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对

--应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的

--on update/on delete子句

-----------------innodb支持的四种方式---------------------------------------

-----cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录-----外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除--------

FOREIGN KEY (charger_id) REFERENCESClassCharger(id)ON DELETE CASCADE

------set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null

--要注意子表的外键列不能为not null

FOREIGN KEY (charger_id) REFERENCESClassCharger(id)ON DELETE SET NULL

------Restrict方式 :拒绝对父表进行删除更新操作(了解)

------No action方式 在mysql中同Restrict,如果子表中有匹配的记录,则不允许对父表对应候选键

--进行update/delete操作(了解)

多表查询

join 用于把来自两个或多个表的行结合起来。

不同的 SQL JOIN 类型:

INNER JOIN:如果表中有至少一个匹配,则返回行

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

FULL JOIN:只要其中一个表中存在匹配,则返回行(mysql不支持全外连接,而是使用union与union all)

无对应关系则不显示selectA.num, A.name, B.namefromA,BWhere A.nid =B.nid

无对应关系则不显示selectA.num, A.name, B.namefrom A inner joinBon A.nid =B.nid

A表所有显示,如果B中无对应关系,则值为nullselectA.num, A.name, B.namefrom A left joinBon A.nid =B.nid

B表所有显示,如果B中无对应关系,则值为nullselectA.num, A.name, B.namefrom A right joinBon A.nid = B.nid

索引

1、概述

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。

2、分类

普通索引:仅加速查询

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null)

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,进行搜索

索引合并:使用多个单列索引组合查询搜索覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

a、普通索引

#创建表直接指定索引

CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

INDEX ix_name (username(length))

);

#表外创建索引

CREATE INDEX indexName ON mytable(username(length));#修改表结构

ALTER mytable ADD INDEX indexName ON (username(length));

#删除索引

DROP INDEX indexname ON tablename;

b、唯一索引

#创建表直接指定唯一索引

CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

UNIQUE [indexName] (username(length))

);

#创建唯一索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

#删除索引

DROP UNIQUE INDEX 索引名 ON 表名

c、主键索引

#创建主键索引

CREATE TABLE t1(

id INT PRIMARY KEY,

name VARCHAR(16)

);

OR

CREATE TABLE t1(

id INT NOT NULL,

name VARCHAR(16),

PRIMARY KEY(id)

);

#添加主键

ALTER TABLE 表名 DROP PRIMARY KEY;

#删除主键

ALTER TABLE 表名 DROP PRIMARY KEY;

ALTER TABLE 表名 MODIFY 列名 类型,DROP PRIMARY KEY;

d、组合索引

组合索引是多个列组合成一个索引来查询

应用场景:频繁的同时使用多列来进行查询,如:where name = 'Tony' and age = 18。

#创建表

CREATE TABLE demo(

nid INT NOT NULL auto_increment PRIMARY KEY ,

name VARCHAR(32) NOT NULL,

age INT NOT NULL

)#创建组合索引

CREATE INDEX ix_name_age ON demo(name,age);

如上创建组合索引之后,查询一定要注意:

name and email  -- >使用索引,name一定要放前面

name                 -- >使用索引

email                 -- >不使用索引

注意:同时搜索多个条件时,组合索引的性能效率好过于多个单一索引合并。

e、全文索引

#创建全文索引

CREATE TABLE emp3 (

id INT,

name VARCHAR(30) ,

resume VARCHAR(50),

FULLTEXT INDEX index_resume (resume)

);

3、相关

#显示索引信息

SHOW INDEX FROM table_name;

事务

1、概述

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务,但是一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。!

在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务

事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行

事务用来管理insert,update,delete语句

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务的原子性:一组事务,要么成功;要么撤回。

2、稳定性 : 有非法数据(外键约束之类),事务撤回。

3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

2、事务操作

开启事务 start transaction

回滚事务 rollback

提交事务 commit

保留点    savepoint

 View Code

py连接MySQL

pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同

1、下载安装

2、操作使用

执行SQL

获取查询数据

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

cursor.scroll(1,mode='relative')  # 相对当前位置移动

cursor.scroll(2,mode='absolute') # 相对绝对位置移动

fetch数据类型

关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

python之路 mysql 博客园_Python之路(二十七):Mysql(下)相关推荐

  1. python之路 mysql 博客园_python之路--MySQL数据库初识

    一 . MySQL安装 #下载MySQL地址 https://dev.mysql.com/downloads#要选稳定的,不要选最新的,稳定的就是半年以上没有出现过bug 现在5.6.43为绝大多数使 ...

  2. python的selenium模块博客园_Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径 2. 通过 `$PATH`环境变量找寻浏览器驱动 控制浏览器访问URL find系列函数定位元素 - `find_ ...

  3. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  4. python实现计算器代码 博客园_python实现计算器

    python实现计算器 1.题目描述 实现一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算 1.1输入 ...

  5. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  6. python tkinter详解 博客园_python tkinter-布局

    包装布局pack() 目前对它的感觉是,当一个窗体的对象都设置完属性后,最后用它来绑定到窗体上.之后就不能再设置属性了 名称 描述 取值范围 expand 当值为"yes"时,si ...

  7. php是什么博客园,PHP 架构之路 - Richards - 博客园

    PHP 架构之路 - Richards - 博客园 PHP 架构之路 鉴于最近跟小伙伴聊了很多 PHP 架构发展方向的问题, 相关技术整理了一下, 也顺便规划了一下自己的 2019 年. 一. 常用的 ...

  8. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  9. python 装饰器写博客园

    需求 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 2),用户输入选项,3~6 ...

最新文章

  1. [网络安全提高篇] 一〇六.SQL注入之手工注入和SQLMAP入门案例详解
  2. 【struts2】struts2的零配置
  3. 七招制胜ASP.NET应用程序开发
  4. Qt关于Tcp通信步骤的总结
  5. qq传输文件的软件测试点,超强新功能 QQ传文件夹测试版抢先试用
  6. JavaScript开发中几个常用知识点总结
  7. 阶乘末尾蓝桥杯java_Java实现第九届蓝桥杯阶乘位数
  8. 解决windows7系统netmeeting无法(安装)使用问题
  9. js输出100以内的质数
  10. GET 和POST的用法
  11. 古剑奇谭网络版服务器位置,《古剑奇谭网络版》【网元平台】服务器数据互通调研公告...
  12. 【推荐】献给在这个世界上摇摆不定的朋友们
  13. 失落城堡手游获取服务器信息99,失落城堡手游更新情况介绍 游戏更新大全
  14. 如果你在犹豫要不要去外包公司,不妨看看这篇文章
  15. [经验分享] 覃超线上直播课-模拟面试
  16. 基于FPGA的交通信号灯设计
  17. [Albert 朗读行动记录贴]采纳Scalers方法:口语成长行动
  18. TCP 内核参数说明
  19. qt记事本(精简版)
  20. Python实现元素平方和和模长的计算方法

热门文章

  1. 学习java很痛苦_Java日期细微的痛苦提醒
  2. cloud foundry_Cloud Foundry Java客户端–流事件
  3. Java:Speedment 3.2的发布–现在启用轻量级数据库微服务
  4. jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
  5. Apache Spark Job的剖析
  6. 高可用性(HA),会话复制,多VM Payara群集
  7. Java EE调度程序
  8. Gradle入门:创建Web应用程序项目
  9. Java EE CDI限定词:快速浏览
  10. 在Window上使用Jenkins自动发布Java工件