Python_Example_MySQL&Navicat学习

Author: 楚格 

2018-11-07 10:34:48

IDE: Pycharm2018.02   Python 3.7   

KeyWord :  

Explain:  

 思路:

 

MySQL

 

  1. 主要操作

数据库操作,包括创建,删除

表的操作,包括创建,修改,删除

数据操作,包括增加修改,删除,查询,crud

 

  1. E-R模型

E表示entry,实体

R表示relationship,关系

 

一个实体转换为数据库中的一个表

关系描述二个实体之间关系规则,包括

一对一

一对多

多对多

关系转换为数据库表中的一个列,

早关系型数据库中一行就是一个对象

 

  1. 三范式

第一范式, 1NF,列 不可拆分,属性不能拆分了

第二范式, 2NF,唯一标识,属性唯一找到对象,即主键

第三范式, 3NF,引用主键,

         说明,后一个范式,都是在前一个范式基础上建立的

 

  1. 数据完整性

一个数据就是一个完整的业务单元,

 

字段类型:

数字,int,decimal(5,2) 5位数其中2位小数

字符串,char,varchar(var变量,存储字符可变), text(大文本)

日期,datatime

布尔:bit

 

约束

主键约束primary key

非 空约束 not NULL

唯一约束 unique

默认default

外延约束 foreign key

 

  1. 连接

CMD

1 >d:

2>cd D:\mysql\mysql-5.7.20-winx64\bin

3>mysql –u root –p

4 >123

5>show databases;

 

完成打开数据库

 

 Python_Example_MySQL&Navicat学习_第1张图片

 

6.远程连接

一般在公司开发中,可能会将数据库统一搭建在一台服务器上,所有开发人员共用一个数据库,而不是在自己的电脑中配置一个数据库

运行命令

mysql -hip地址 –u root -p

-h后面写要连接的主机ip地址

-u后面写连接的用户名

-p回车后写密码

 

 

数据库操作

>创建数据库

create database 数据库名 charset = utf8

 

>删除数据库

drop database 数据库名

 

>切换数据库

use 数据库名

 

>查看当前选择的数据库

select database();

 

>查看数据库

show databases;

 

表的操作

>查看当前数据库中所有表

show tables;

 

>创建表

Auto_increment表示自动增加

create table 表名(列以及类型)

e.g

Create table students(id int auto_increment primary key,

Sname varchar (10)  not null )

 

>修改表

alter table 表名 add|chang|drop 列名 类型

e.g

         alter table students add birthday datatime;

        

         >删除表

         drop table 表名;

 

         >更改表名称

         rename table 原表名 to 新表名

 

         >查看表的创建语句

         show create table ‘表名’

 

数据操作

 

>查询

Select  * from 表名

 

>增加

全列插入:insert into 表名  values(。。。)

e.g

insert into aa values(2,'cao2',1,22,23);

 

 

缺省插入:insert into 表名(列1,列2)  values(值1,值2);

e.g

insert into aa(name) values(’chu4’);

 

 

同时插入多条数据:insert into 表名 values(。。。),(。。。);

e.g

insert into aa values(5,’chu4’,0),(6,’chu5’,1);

或 insert into 表名 (列1,) values(值1 )

e.g

insert into aa(id,name,asd)  values(5,’chu4’,0),(6,’chu5’,1);

 

 

主键列是自动增加,但是全列插入时需要占位,通常使用0,

插入成功后以实际数据为准。

 

>修改

update 表名 set 列1= 值1   where 条件

update aa set name=’chu9’where id=6

 

>删除

delete from 表名 where 条件

 

>逻辑删除,本质就是修改操作update

Alter table students add isdelete bit default 0;

如果需要删除

update students isdelete =1 whre …

 

 

备份与恢复

 

数据备份

>进入超级管理员

sudo –s

 

>进入MySQL库目录

cd/var/lib/mysql

>运行MySQLdump 命令

Mysqldump –uroot –p 数据库名>~/desktop/备份文件.sql

 

数据恢复

连接MySQL,创建数据库

退出连接,执行如下命令

Mysql –uroot –p 数据库名 <~/desktop/备份文件.sql

 

7 命令

>具体表内容

desc 表名;

 

8 查询的基本语法

select  * from 表名;

 

from 关键字后面写表名,表示数据来源于是这张表名。

select 后面写表中的列名,如果是* 表示在结果中显示表中所有列

在select后面的列名部分,如果使用as 为列起别名,这个别名出现在结果集中

如果要查询多个列,之间使用逗号分隔。

 

>消除重复行

在select后面列前使用distinct 可以消除重复行

Select distinct a2 from aa;

 

9条件

 

使用where子句对表中的数据筛选,结果为true的行为会出现在结果集中

Select * from 表名 where 条件

 

比较运算符

等于=

大于>

大于等于>=

小于<

小于等于<=

不等于!= 或 <>

 

逻辑运算符

and

or

not

 

模糊查询

like

%表示任意多个任意字符

_表示一个任意字符

e.g

查询姓楚

select * from students where name like ‘楚%’;

 

查询姓楚并且名字是一个字的学生

select * from students where name like ‘楚_’;

 

查询姓楚或格的学生

select * from students where name like ‘楚%’ or name like ‘%楚_’;

 

范围查询

in 表示在非连续的范围内

查询标号是1或3或8

Select * from students where id in(1,3,8);

 

Between … and … 表示在一个连续的范围内

查询学生是3至8的学生

Select * from students where id between 3 and 8;

 

空判断

注意:NULL 与 ‘’ 是不同的

判空 is null

查询没有填写地址的学生

Select * from  studends where hometown is null;

判断非空

查询写了填写地址的学生

select * from  studends  where hometown is  not null;

 

‘’空字符串

 

优先级

小括号,not,比较运算符,逻辑运算符

and比or先运算,如果同时出现并希望先算or,需要结合()使用

 

 

 Python_Example_MySQL&Navicat学习_第2张图片

 

 

10分组

 

分组

按照字段分组,表示此字段相同的数据 会被放到一个组中

分组后,只能查询出相同数据列,对于有差异的数据列,无法出现在结果集中

可以对分组后的数据进行统计,做聚合运算

语法

select 列1,列2, 聚合 from 表名 group by  列1,列2….

查询男女总数

select gender as 性别,count(*) from studens group by gender;

select hometown as 家乡,count(*) from studens group by hometown;

 

分组后的数据筛选

语法

select 列1,列2, 聚合… from 表名 group by 列1,列2,列3… having 列1,… 聚合…

having 后面的条件运算符与where的相同

查询男生总人数

方案一

         Select count(*)from students where gender=1

方案二

         Select gender as 性别,count(*)from students group by gender having gender=1

 

对比 where与having

Where是from后面指定的表进行数据筛选,属于对原始数据的筛选

Having 是对group by 的结果进行筛选。

 

 

11聚合

为了快速得到统计数据,提供了5个聚合函数

 

Count(*)表示计算总行数,括号中写*与列名相同,结果是相同的

 

Max(列)表示求此列的最大值

Min(列)表示求此列的最小值

Sum(列)表示此列的和

Avg(列)表示此列的平均值

 

 

12排序

为了方便查看数据,可以对数据进行排序

select * from 表名 order by 列1 asc|desc , 列2 asc|desc,

将行数据按照列1进行排序,如果某些行列1的值相同,则按照2排序

默认从小到大排序

asc 从小到大排序,

desc从大到小排序

select * from aa order by a3 desc;

 Python_Example_MySQL&Navicat学习_第3张图片

 

13分页

获取部分分行

当数据量过大时,在一页中查看数据是一件非常麻烦的事。

语法

Select * from 表名 limit start,count;

从start开始,获取count 条数据

Start从0开始

 

 Python_Example_MySQL&Navicat学习_第4张图片

 

14

执行顺序比较重要

 

15实体与实体之间有三种对应关系

视图用于完成查询语句的封装

事务可以保证复杂的增删改操作有效

当数据巨大时,为了提高查询速度可以通过索引实现

 

foreign key(stuid) references key;

 

 

 

 

13连接查询

 

 

关键:找到表间的关系,当前的关系是

students表的id---scores表的stuid

subjects表的id---scores表的subid

则上面问题的答案是:

select students.sname,subjects.stitle,scores.score

from scores

inner join students on scores.stuid=students.id

inner join subjects on scores.subid=subjects.id;

结论:当需要对有关系的多张表进行查询时,需要使用连接join

连接查询

连接查询分类如下:

表A inner join 表B:表A与表B匹配的行会出现在结果中

表A left join 表B:表A与表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使用null填充

表A right join 表B:表A与表B匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充

在查询或条件中推荐使用“表名.列名”的语法

如果多个表中列名不重复可以省略“表名.”部分

如果表的名称太长,可以在表名后面使用' as 简写名'或' 简写名',为表起个临时的简写名称

 

 

 

 

 

14事务

 

当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都退回

使用事务可以完成退回的功能,保证业务逻辑的正确性

事务四大特性(简称ACID)

原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行

一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致

隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的

持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

要求:表的类型必须是innodb或bdb类型,才可以对此表使用事务

查看表的创建语句

show create table students;

修改表的类型

alter table '表名' engine=innodb;

 

事务语句

开启begin;

提交commit;

回滚rollback;

示例1

步骤1:打开两个终端,连接mysql,使用同一个数据库,操作同一张表

终端1:

select * from students;

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

终端2:

begin;

insert into students(sname) values('张飞');

步骤2

终端1:

select * from students;

步骤3

终端2:

commit;

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

终端1:

select * from students;

示例2

步骤1:打开两个终端,连接mysql,使用同一个数据库,操作同一张表

终端1:

select * from students;

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

终端2:

begin;

insert into students(sname) values('张飞');

步骤2

终端1:

select * from students;

步骤3

终端2:

rollback;

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

终端1:

select * from students;

 

 

15

>性能分析

开启

set profiling=1;

查看时间

show profiles;

 

 

转载于:https://www.cnblogs.com/caochucheng/p/9904166.html

你可能感兴趣的:(Python_Example_MySQL&Navicat学习)