zoukankan      html  css  js  c++  java
  • 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:mysqlmysql-5.7.20-winx64in

    3>mysql –u root –p

    4 >123

    5>show databases;

    完成打开数据库

     

    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,需要结合()使用

     

    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;

     

    13分页

    获取部分分行

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

    语法

    Select * from 表名 limit start,count;

    从start开始,获取count 条数据

    Start从0开始

     

    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;

     

  • 相关阅读:
    当你开始学习编程时,你最希望知道什么?我想起来的只有27件事!
    神父说,要有光,要有码农,于是十大天神创造了宏大的编程界!
    我今天就要说HTML它就是一门编程语言!只有外行才说它是超文本标记语言!
    【源码分享】用C++实现通讯录管理系统!功能齐全,实属精品!
    虎牙员工自曝被公司HR带着五个人抬出公司扔到门外!虎牙回应:他简历造假!
    C与C++的互相调用!就像大学宿舍一样,我用你的,你用我的!
    为什么你的简历总会石沉大海!一定要真实,切勿造假!
    Python3列表
    Python3元组
    线程回收
  • 原文地址:https://www.cnblogs.com/caochucheng/p/9904166.html
Copyright © 2011-2022 走看看