zoukankan      html  css  js  c++  java
  • mysql day04

    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、锁(MySQL自动加锁和释放锁)
      1、目的 :解决客户端并发访问的冲突问题
      2、锁分类
        1、锁类型
          1、读锁(共享锁)
            select :加读锁之后别人可以查询,但是不能更改(update)
          2、写锁(互斥锁、排他锁)
            update :加写锁之后,别人不能查、不能改
        2、锁粒度
          1、行级锁 :可加读锁、写锁
          2、表级锁 :可加读锁、写锁
    2、存储引擎(处理表的处理器)
      1、基本操作
        1、查看所有存储引擎
          show engines;
        2、查看已有表存储引擎
          show create table 表名;
        3、创建表时指定
          create table 表名(...)engine=MyISAM;
        4、已有表
          alter table 表名 engine=InnoDB;
      2、常用存储引擎特点
        1、InnoDB特点
          1、支持外键、行级锁、事务
          2、共享表空间
            表名.frm :表结构和索引信息
     表名.ibd :表记录
        2、MyISAM特点
          1、支持表级锁
          2、独享表空间
            表名.frm :表结构
     表名.MYD :表记录
     表名.MYI :索引信息
        3、MEMORY特点
          1、表结构存储在硬盘,表记录存储在内存
          2、服务/主机重启后,表记录消失
      3、如何选择使用哪个存储引擎
        1、执行查询操作多的表用MyISAM(使用InnoDB浪费资源)
        2、执行写操作多的表用InnoDB
    3、数据备份(mysqldump,在Linux终端中操作)
      1、mysqldump -u用户名 -p 源库名 > XXX.sql
      2、源库名表示方式
        --all-databases     备份所有库
        库名                备份单个库
        -B 库1 库2 库3      备份多个库
        库名 表1 表2 表3    备份指定库的多个表
      3、示例
        1、备份所有库,放到mydata目录下:all.sql
          mysqldump -uroot -p --all-databases>all.sql
        2、备份db3库中sheng、city、xian三张表,scx.sql
          mysqldump -uroot -p db3 sheng city xian > scx.sql
        3、备份MOSHOU库和db4库,md.sql
          mysqldump -uroot -p -B MOSHOU db4 > md.sql
        4、备份db4库,db4.sql
          mysqldump -uroot -p db4 > db4.sql
    4、数据恢复(Linux终端中操作)
      1、mysql -u用户名 -p 目标库名 < XXX.sql
      2、示例
        1、删除db3库,创建空库,从all.sql中恢复此库
          mysql> drop database db3;
          mysql> create database db3 character set utf8;
          mysql> use db3;
          终端 :mysql -uroot -p --one-database db3 < all.sql
        2、做3件事
          1、在db3.sheng表中新增加1条记录
            insert into sheng values(11,200003,"日本省");
          2、在db3库创建表t888,插入1条记录
            create table t888(id int);
     insert into t888 values(1),(2),(3);
          3、从all.sql中恢复db3库
            mysql -uroot -p --one-database db3<all.sql
        3、注意
          1、恢复库时,会将表中数据覆盖,新增表不会删除
          2、恢复时,如果要恢复的库不存在,则先创建空库
    5、数据导入
      1、作用 :把文件系统的内容导入到数据库中
      2、语法格式
        load data infile "文件名"
        into table 表名
        fields terminated by "分隔符"
        lines terminated by " "
      3、导入步骤
        1、在数据库创建对应的表
          1,大空翼,98.5,13030303030,AID1709
     create table score(
     id int,
     name varchar(20),
     score float(5,2),
     phnumber char(11),
     class char(7)
     )charset=utf8;
        2、把文件拷贝到数据库的搜索路径中
          1、查看搜索路径
            show variables like "secure_file_priv";
          2、拷贝文件
            sudo cp scoreTable.csv /var/lib/mysql-files/
        3、执行数据导入语句

      4、文件权限
        -rwxr--r-- tarena tarena scoreTable.csv
        最左侧-:代表文件
        r :读
        w :编辑
        x :可执行
        
        rwx r-- r--
        第1组 :所有者权限  tarena
        第2组 :同组用户权限 tarena2
        第3组 :其他用户权限 mysql
      5、修改文件权限
        r : 4
        w : 2
        x : 1
        chmod 777 文件名
        chmod 666 文件名  rw-rw-rw-
        chmod 644 文件名  rw-r--r--
    6、数据导出
      1、把数据库中表笔记导出到系统文件里
      2、语法格式
        select ... from 表名 where 条件
        into outfile "文件名"
        fields terminated by "分隔符"
        lines terminated by " "
      3、示例
        1、把MOSHOU库下的sanguo表英雄的姓名、攻击值和国家导出到 sanguo.csv
          select name,gongji,country from MOSHOU.sanguo
          into outfile "/var/lib/mysql-files/sanguo.csv"
          fields terminated by ","
          lines terminated by " "
    7、E-R模型(Entry-Relationship)
      1、定义 :实体-关系模型,数据模型,用于设计数据库
      2、三个概念
        1、实体 :描述客观事物的概念
          1、表示方式 :矩形框
          2、示例 :一个人、一本书、一杯咖啡
        2、属性
          实体具有的特性
          表示方式 :椭圆形
        3、关系
          1、各个实体之间的联系
          2、分类
            一对一(1:1):老公对老婆
              A中1个实体,在B中只能有1个与其关联
       B中1个实体,在A中只能有1个与其关系
     一对多(1:n):父亲对孩子
              A中1个实体,在B中有n个与其关联
       B中1个实体,在A中只能有1个与其关联
     多对多(m:n):兄弟姐妹对兄弟姐妹
       A中1个实体,B中多个关联
       B中1个实体,A中多个关联
      3、ER图绘制
        1、矩形框代表实体,菱形框代表关系,椭圆形代表属性
        2、示例(老师与课题)
          老师 :员工号、姓名、职称
          课题 :课题号、课题名
          关系 :m:n
        3、练习
          1、设计1个学生选课系统的ER图
            实体 :学生、课程、老师
     学生 :学号、姓名 ...
     课程 :课程编号、课程名称
     老师 :员工号、姓名
           
     关系 :老师 - 教 - 学生  m:n
            学生 - 选 - 课程  m:n
    8、MySQL用户管理
      1、开启远程连接
        1、sudo -i
        2、cd /etc/mysql/mysql.conf.d/
        3、subl mysqld.cnf
          44行 :bind-address = 127.0.0.1
        4、/etc/init.d/mysql restart
      2、添加授权用户
        1、用root用户登录mysql
          mysql -uroot -p123456
        2、授权
          grant 权限列表 on 库.表 to "用户名"@"%"
          identified by "密码"
          with grant option;

          权限列表 :all privileges 、select 、drop
          库.表    :库.*  、 *.*(所有库所有表)
        2、示例
          1、添加授权用户 tiger,对db4库有所有权限,密码123

  • 相关阅读:
    技术出身的创业者管理销售团队的七条成功秘笈
    修改MVC的默认T5 template
    Balsamiq Mockups——界面原型设计软件
    在eclipse中安装pydev插件
    torch.nn.Embedding Learner
    七种交叉验证及其代码 Learner
    Noise Contrastive Estimation 前世今生——从 NCE 到 InfoNCE Learner
    论文解读(GraRep)《GraRep: Learning Graph Representations with Global Structural Information》 Learner
    邻接矩阵、度矩阵 Learner
    可逆矩阵与奇异矩阵 Learner
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9768505.html
Copyright © 2011-2022 走看看