zoukankan      html  css  js  c++  java
  • mysql阶段总结

    Day01回顾
    1、MySQL的特点
      1、关系型数据库
      2、跨平台
      3、支持多种编程语言
    2、启动连接
      sudo /etc/init.d/mysql start | stop | restart | reload
      mysql -hIP地址 -u用户名 -p
      MySQL中数据是以文件的形式存储在数据库目录/var/lib/mysql
    3、基本SQL命令
      1、库管理
        1、show databases;
        2、create database [if not exists] 库名 character set utf8;
        3、select database();
        4、use 库名;
        5、show tables;
        6、drop database 库名;
      2、表管理
        1、create table [if not exists] 表名(
          字段名 数据类型,
          ... );
        2、show create table 表名;
        3、desc 表名;
        4、drop table 表1,表2;
      3、表记录的管理
        1、insert into 表名(字段1,...) values(值1),(值2);
        2、select 字段1,字段2... from 表名 [where 条件];
    4、更改默认字符集
      1、sudo -i
      2、cd /etc/mysql/mysql.conf.d/
      3、cp mysqld.cnf mysqld.cnf.bak
      4、vi mysqld.cnf
         [mysqld]
         character_set_server = utf8
      5、/etc/init.d/mysql restart
      6、exit
    5、数据类型
      1、数值类型
        1、整型
          1、int(4字节)
          2、tinyint(1字节)
            默认有符号:signed
     无符号 :tinyint unsigned
        2、浮点型
          1、float(m,n) # 最多7个有效位
          2、decimal(m,n) # 整数部分和小数部分分开存储
          3、注意
            1、浮点型插入整数时,自动补全小数位位数
     2、小数位如果多于指定位数,对指定位下一位四舍五入
      2、字符类型
        1、char :浪费存储空间,性能高
        2、varchar :节省存储空间,性能低
        3、text / longtext / blob / longblob
        4、字符类型宽度和数值类型宽度区别
          1、数值类型宽度为显示宽度,仅用于select查询显示,和存储无关,zerofill
          2、字符类型宽度超过则无法存储
      3、枚举类型
        1、enum(值1,值2)
        2、set(值1,值2)
          # 插入记录:"mysql,python,study"
      4、日期时间类型

      Day02回顾
    1、数据类型
      1、数值类型
      2、字符类型
      3、枚举类型
        1、enum()
        2、set() ##插入记录"girl,study"
      4、日期时间类型
        1、date
        2、time
        3、datetime #不给值默认NULL
        4、timestamp#不给值默认返回系统当前时间
    2、日期时间函数
      1、NOW()
      2、CURDATE()
      3、CURTIME()
      4、CURYEAR()
      5、YEAR(字段名)
      6、DATE(字段名)
      7、TIME(字段名)
    3、日期时间运算
      select ... from 表名
      where 字段名 运算符(now()-interval 2 day)
    4、表字段操作
      1、添加(add)
        alter table 表名 add 字段名 数据类型 first | after 字段名;
      2、修改(modify)
        alter table 表名 modify 字段名 新数据类型;
      3、删除(drop)
        alter table 表名 drop 字段名;
      4、表重命名(rename)
        alter table 原表名 rename 新表名;
      5、表字段重命名(change)
        alter table 表名 change 原名 新名 数据类型;
    5、表记录管理
      1、删除(delete)
        delete from 表名 where 条件;
      2、修改(update)
        update 表名 set 字段1=值1,字段2=值2 where 条件;

            表字段(alter table 表名)    表记录
       增加       add                   insert
       删除       drop                  delete
       修改       modify                update
       查询       desc                  select
    6、运算符
      1、数值比较、字符比较、逻辑比较
      2、范围内比较
        1、between 值1 and 值2
        2、in(值1,值2,...)
        3、not in(值1,值2,...)
      3、空、非空
        1、is NULL
        2、is not NULL
      4、模糊查询 like
        字段名 like 表达式
        % :0-n个字符
        _ :1个字符
        show tables like "%he%";
        show variables like "%character%";
    6、SQL查询
      1、order by ASC/DESC
      2、limit
        1、limit n
        2、limit m,n
        3、分页
          每页显示m条,显示第n页
          limit (n-1)*m,m
      3、聚合函数
        max(...) min(...) avg(...) sum(...)
        count(*)
      4、group by(先分组,再聚合)
        1、select后的字段名如果没有在group by之后出现,必须对该字段进行聚合处理
          select avg(gongji) from sanguo group by country;
      5、having :操作聚合函数生成的显示列
    **********************
    Day03回顾
    1、嵌套查询(子查询)
      1、把内层的查询结果作为外层的查询条件
    2、多表查询
      1、笛卡尔积 :不加where条件
      2、加where条件 :只显示匹配到的
    3、连接查询
      1、内连接 :只显示匹配到的
      2、外连接
        1、左连接 :以左表为主显示查询结果
        2、右连接 :以右表为主显示查询结果
      3、select ... from 表1 inner/left/right join 表2 on 条件;
    4、约束
      1、默认约束(default)
      2、非空约束(not null)
        sex enum("M","F") not null default "M"
    5、索引(Btree)
      1、优点 :加快数据检索速度
      2、缺点 :占用物理存储空间,需要动态维护,消耗系统资源
      3、SQL命令运行时间监测
        1、开启 :mysql>set profiling=1;
        2、查看 :mysql>show profiles;
        3、关闭 :mysql>set profiling=0;
    6、索引分类
      1、普通(MUL)、唯一索引(UNI,字段值不能重复,可为NULL)
        1、创建
          index(...),index(...),unique(...)
          create unique index 索引名 on 表名(字段名);
        2、查看
          desc 表名;
          show index from 表名G;
        3、删除
          drop index 索引名 on 表名;
      2、主键&&自增长(PRI,不能重复,且不能为NULL)
        1、创建
          id int primary key auto_increment,
          alter table 表名 add primary key(字段名);
        2、删除
          1、alter table 表名 modify id int;
          2、alter table 表名 drop primary key;
        3、指定自增长起始值
          1、create table 表名(...)auto_increment=1000;
          2、alter table 表名 auto_increment=1000;
      3、外键
        1、使用规则
          1、主表、从表数据类型要一致
          2、主表被参考字段一定要为主键
        2、语法格式
          foreign key(...) references 主表(...)
          on delete cascade
          on update cascade
        3、级联动作
          1、casacde :删除、更新同步
          2、restrict:不让主表删除、更新
          3、set null:删除、更新,从表该字段设置为NULL
        4、删除
          1、show create table 从表;
          2、alter table 表名 drop foreign key 外键名;
        5、已有表
          alter table 表名 add constraint 外键名
          foreign key(...) ........
        6、注意
          1、在已有表中条件外键关联时,会受到表中原有数据的限制
    ***********************
    Day04回顾
    1、锁 :解决客户端并发访问的冲突问题
      1、锁分类
        1、锁类型 :读锁、写锁
        2、锁粒度 :行级锁、表级锁
    2、存储引擎
      1、基本操作
        mysql> show engines;
        mysql> show create table 表名;
        mysql> create table ....)engine=MyISAM;
        mysql> alter table 表名 engine=InnoDB;
      2、常用存储引擎
        1、InnoDB
          1、支持外键、事务、行级锁、共享表空间
        2、MyISAM
          1、支持表级锁、独享表空间
        3、Memory
      3、如何选择
        查询操作多 :MySAM
        更新操作多 :InnoDB
    3、数据备份与恢复
      1、备份 :mysqldump -uroot -p 源库名 > XXX.sql
         --all-databases
         库名
         -B 库1 库2
         库1 表1 表2 表3
      2、恢复 :mysql -uroot -p 目标库名 < XXX.sql
         --one-database
         1、先创建空库再恢复
         2、库中新增表不会删除,新增记录会被覆盖
    4、ER模型
      1、关系
        1:1   1:n  m:n
      2、矩形框是实体,菱形框是关系,椭圆形是属性
      3、数据库三范式
        1、第一范式(1NF) :列不可拆分
        2、第二范式(2NF) :唯一标识
        3、第三范式(3NF) :引用主键
        说明 :后1个范式,都是在前1个范式的基础上建立的
    5、用户授权
      1、开启远程连接
        sudo -i
        cd /etc/mysql/mysql.conf.d/
        subl mysqld.cnf
          bind-address=127.0.0.1
        /etc/init.d/mysql restart
      2、执行授权语句
        mysql>grant all privileges on *.* to "lion"@"%" identified by "123" with grant option;
    6、数据导入
      1、创建对应表
      2、拷贝到搜索路径
        mysql> show variables like "secure_file_priv";
      3、执行导入语句
        load data infile "文件绝对路径"
        into table 表名
        fields terminated by "分隔符"
        lines teminated by " ";
      4、chmod 644 文件名
         rw-r--r--   r:4 w:2 x:1
    7、数据导出
      select .... from 表名 where 条件
      into outfile "文件名绝对路径"
      fields terminated by "分隔符"
      lines terminated by " "
    *******************
    day05
    1.事务
    定义:一个事件的begin -到执行mysql语句,最后commit提交/错误返回rollback
    开启事务,终止事务
    2.python 和mysql交互
    通过pymysql
    使用流程为:
    1.数据库的连接对象 db=pymysql.connect()
    方法:commit /close/rollback/cursor

    2.游标对象  cur =db.cursor
    方法: execute/close/fetchone/fetchall/fetchmany

    3.执行命令 cur.execute('sql命令‘)
    4.提交  db.commit()
    5.关闭  cur /db.close()

    ORM(object relation mapping)
    对象关系映射
    1:1 /1;n 主键外键
    m:n 多对多关联实现
    用于后端框架方面工作需求

    最后以上,为基本的曾删改查操作,
    对库只有创建和删除 create database db; drop  database db
    对表就有对字段操作和记录分别进行操作
    字段 alter  table t1   add/modify/drop/  id =1   ;
    desc  t1;

    记录操作: insert into t1 values (1,'小米').(2,’小明');
        update  t1 set  name ='小明'  where ..
        delete from  t1 where ...
        select *from t1;
    然后就是给标的字段进行一些约束条件(not null /default)
    主要是对表的查询  select ... where
         group by
         having
         order by
         limit ;
    还要csv表的导入和导出
    1.先创表
    2.先将表cp  到(show variables like ‘secure_file_priv’)模块内的路径
    3.接下来就是导入

    还要innode 和myisam区别
    行级锁和表级锁  index
    inner join .. on /left join ..on/right join... on
    最后差不多就是通过python和数据库进行交互

  • 相关阅读:
    git cherrypick 小结
    git 忽略机制
    git revert 小结
    git 忽略机制
    学习 原理图2 电源电路
    git merge 和 git rebase 小结
    git cherrypick 小结
    学习 原理图2 电源电路
    git revert 小结
    使用SMTP发送邮件
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9774492.html
Copyright © 2011-2022 走看看