数据库类型(按数据模型特点分)
    网状型数据库:采用记录类型为节点的网状数据模型
    层次型数据库:采用层次模型模拟现实世界中按层次组织起来的事物
    关系型数据库:采用二维表结构组织和管理数据,并规定了表内和表间数据的依赖关系
    关系数据库是指一些相关的表和其他数据库对象的集合。对于关系数据库来说,关系就是表的同义词。

    表由行和列组成(类似二维数组的结构)
    列包含一组命名的属性(也称字段)
    行包含一组记录,每行包含一条记录
    行和列的交集称为数据项,指出了某列对应的属性在某行上的值,也称为字段值
    列需定义数据类型,比如整数或者字符型的数据
    MySQL数据库系统使用最常用的数据库管理语言—结构化查询语言(SQL)进行数据库管理
    由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改
    SQL语言主要是用来操作关系型数据库的一本语言,称之为结构化查询语句
    SQL语句主要分为:
    DQL:数据查询语言,用于对数据进行查询,如select
    DML:数据操作语言,对数据进行增加、修改、删除,如insert、update、delete
    TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
    DCL:数据控制语言,进行授权与权限回收,如grant、revoke
    DDL:数据定义语言,进行数据库、表的管理等,如create、drop
    CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor

    MySQL的特点:
    使用C和C++编写
    为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
    支持多种存储引擎
    MySQL服务端(在Linux系统)
    下载安装 sudo apt-get install mysql-server
    启动服务 sudo server mysql start
    下载安装命令行客户端 sudo apt install mysql-client
    连接数据库
    mysql -u root -p123456
    -u后面跟数据库的账户名
    -p密码,之间不能有空格

    数据库管理
    查看数据库版本 select version();
    显示当前时间 select now();
    查看所有数据库 show databases;
    创建数据库 create database 数据库名 charset=utf8;
    切换数据库 use 数据库名
    查看当前正在使用哪个数据库 select database();
    删除数据库 drop database 数据库名

    数据表设计:ER图、表的主键、字段、数据类型、约束、表之间关系的设计
    E-R模型:实体-关系模型,主要用于定义数据的存储需求,该模型已经广泛用于关系数据库设计中。E-R模型由实体、属性和关系三个基本要素构成。
    主键
    实体间的关系与外键
    约束 约束类型:NOT NULL UNIQUE PRIMARYKEY FOREIGN KEY CHECK
    查看当前数据库中的表:show tables;
    创建表:create table 表名(
    id int unsigned auto_increment primary key not null,
    name varchar(10) not null,
    is_delete bit(1) not null default 0
    );
    删除表:drop table表名;
    comment 注释
    查看创建表的sql语句 show create table 表名;
    添加字段 alter table 表名 add 列名 类型
    删除字段 alter table 表名 drop 字段名字
    alter table 表名 modify 只修改类型及约束
    alter table 表名 change 修改字段名

    Navicat for MySQL 数据库管理和开发工具

    基本查询语句
    decs表名;查询表相关信息
    select * from 表名;查询表中所有内容
    select 字段1,字段2 from 表名;指定字段查询
    插入数据
    全列插入 insert into 表名 values(…) 空字段用0占位 主键自增也要用0占位
    部分插入 insert into 表名[字段1,字段2] values(值1,值2);
    修改数据
    update 表名 set 字段=xx where 字段=xx;
    删除数据
    delete from 表名 where 字段=xx;
    备份数据库
    备份数据库的所有表的数据
    mysqldump -uroot -p 数据库名 > 文件名
    恢复数据库
    恢复数据库之前要先手动创建库
    mysql -uroot -p 新数据库名 < python.sql
    条件查询
    where 条件限定
    模糊查询
    like 表示模糊查询
    % 表示任意多个字符
    _表示一个字符
    rlike 可以匹配正则
    in 包含在里面的
    如果需要匹配%本身,那么则需要使用%%
    between 查询 between and 表示一段区间
    null值判断:要查询为null值的使用is
    排序 order by 字段[desc/asc]
    desc表示降序(从大到小排序)
    asc表示升序,默认排序规则(从小到大排序)

    聚合函数
    常见函数
    count统计个数
    max计算最大值
    min计算最小值
    数学函数
    sum求和
    avg求平均数
    round函数
    时间函数
    substr函数
    数学函数
    mod(n,m) 即% 取模
    floor(x) 向下取整
    ceiling(x) 向上取整
    round(x,d)四舍五入到最近的整数 d保留位数
    时间函数
    select now() 显示当前日期及时间
    curdate()当前日期
    curtime()当前时间
    字符串函数
    mysql
    substr()函数 用法:substr(string字符串,start起始位置,length长度);截取字符串
    left(str,len)函数 返回字符串str的最左面len个字符
    right(str,len)函数 返回字符串str的最右面len个字符
    分组查询
    group by 字段 以xx字段作为分组依据分组
    as取别名
    分组后条件筛选:having函数
    limit分页 语法:select from 表名 limit start,count
    连接查询 mysql三种连接查询
    内连接查询:查询的结果为两个表匹配到的数据,两个表都能匹配上的数据将返回给结果集
    语法:select
    from 表1 inner join 表2 on 表1.列=表2.列
    右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
    语法:select * from 表1 right join 表2 on 表1.列=表2.列
    左连接查询:类似于右连接
    子查询:在一个select语句中嵌入了另外一个select语句,嵌入的这个select语句就是子查询语句。子查询是辅助主查询的,充当数据源或者充当条件。子查询是一条独立的语句。
    子查询四种类型:
    1.标量子查询 一行一列单个值
    2.列级子查询 一行多列
    3.行级子查询 多行一列
    4.表级子查询 做数据源
    可用于子查询的关键字有4个(in、all、any、some)
    in:符合列子查询里面1个
    any、some:功能相同,表示任意一个如:where 列=any(列子查询)
    all:等于里面所有,如where 列=all(列子查询)
    保存查询结果
    语句格式:insert into 表名(列1、列2) select …
    ↑将查询到的结果直接保存到表里
    合并查询
    union all 将两次查询的结果集合并到一起显示
    union 将两个查询的结果集先去重后合并到一起显示
    distinct 去重

    用户与权限管理
    创建用户:create user ‘用户名’@’ip地址’ identified by ‘密码’
    授权操作:grant 权限 on 数据库 to ‘用户名’@’ip地址’
    MySQL中权限有create\alter\drop\insert\update\delete\select等
    如果要分配所有权限,使用:all privileges
    flush privileges权限立即生效
    查看用户权限 show grants for 用户名
    回收权限 revoke select on . from ‘用户’@’%’
    修改密码 普通用户修改自己的密码无需进到数据库
    MySQL admin -u用户名 -p密码 新密码
    root账号修改普通用户密码,修改MySQL.user表
    update MySQK.user set authentication_string=password() (新密码) where user=’用户名’
    flush privileges
    删除用户 drop user ‘用户名’@’主机’或进入MySQL库 delete from user where user=’用户名’

    事务:
    工作单元,是由一个或多个SQL语句所组成的操作序列。数据库中通过事务来保证数据的一致性
    begin rollback commit
    MySQL默认是自动提交的,即提交一个sql,直接执行。可以通过set autocommit=0禁止自动提交

    视图:
    一张虚拟的表,这个表的数据结构和数据是由select语句来指定的,不会生成真实的文件,本质上就是对查询的封装。
    创建视图:create view 视图名称 as select 语句;
    查看视图:查看表会将所有的视图也列出来
    show tables;
    show TABLE status;
    删除视图:drop view 视图名称
    调用视图:select * from 视图名

    索引:
    类似目录,MySQL中常见索引:主键、唯一、普通、全文、组合索引。
    alter table 表名 add primary key(列名); 主键
    alter table 表名 add unique(列名); 唯一
    alter table 表名 add index 索引名称(列名); 普通
    alter table 表名 add full text(列名); 全文,尽量不适用
    查看索引 show index from 表名;
    删除索引 drop index 索引名 on 表名;

    存储过程:一条或多条SQL语句的集合
    语法:
    delimiter//
    creat procedure 存储过程的名称(参数列表)
    begin
    sql语句
    end
    //
    delimiter;
    查看创建的存储过程:所有存储过程和函数,都存储在mysql数据库下的proc表中
    show procedure status;
    调用存储过程 call 存储过程名()
    删除存储过程 drop procedure 存储过程名;
    存储过程中的变量:
    声明变量 declare 临时变量@变量名(直接使用)
    语法:declare variable_name datetype default default-value;
    设置变量值 set 变量名=值;
    select into
    条件语句
    if语句
    if then
    end if
    if
    else
    end if
    if
    elseif
    else
    endif
    while语句
    while do
    end while

    函数
    字符串函数
    select ascii();
    select char();
    select concat( , );
    select length();
    left(str,len)
    right(str,len)
    substring(str,pos,len)截取字符串
    去除空格 ltrim(str) rtrim(str) trim(方向 remstr from str) 其中方向有both leading trailing 两侧 左 右
    space(n)
    替换字符串 replace(str,fromstr,tostr)
    大小写转换函数 lower(str) upper(str)
    日期时间函数
    获取子值 year(date) month(date) day(date) hour(date) minute(time) second(time)

    创建自定义函数
    语法:
    delimiter
    create function 函数名(参数列表) returns 返回类型
    begin
    sql语句
    end

    delimiter;

    Python DB-API数据库应用编程接口
    PyMySQL:一个在Python3.x版本中用于连接MySQL服务器的一个实现库
    pip install pymysql
    连接数据库:
    创建connection对象,其拥有的方法:
    close关闭连接 commit提交 rollback回滚 cursor返回cursor对象
    from pymysql import *
    conn=connect(host=’数据库主机地址’,user=’数据库账号’,password=’数据库密码’,database=’连接的数据库名’,port=mysql端口号,charset=’utf8’)
    创建游标对象,可以利用这个对象进行数据库的操作
    cur=conn.cursor()#用于执行sql语句并获得结果
    cursor对象拥有的方法
    close()关闭cursor对象
    execute(opration[,parameters])执行语句,返回受影响的行数
    fetchone()获取查询结果集的第一个行数据,返回一个元组
    fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
    执行sql语句可以参数化,sql语句中使用%s占位,之后赋值。
    cur.execute(sql,[0,1])