<blockquote id="shwb3"><ruby id="shwb3"></ruby></blockquote>
  • <small id="shwb3"><strong id="shwb3"></strong></small>

      1. <big id="shwb3"></big>
        1. 首页 > 数据库技术 > 详细

          mysql总结笔记(一)

          时间:2019-03-10 12:54:18      阅读:66      评论:0      收藏:0      [点我收藏+]

          标签:建表语句   复杂   练习   单列   state   统计   索引   引用   mysql   

          mysql增删改查
              #### create 
              - alter 修改表结构 add/change/drop 列名/字段/属性 类型
                  change只能修改列的类型,不能修改列的名字
              - 添加约束
              >  alter table scores add constranint stu_score foreign key(stuid) references students(id) 
              update table set column1=value1,column2=value2,... where 
              condition
                  修改数据,修改属性值
          
              delete from table where condition
                  物理删除
              select 
                  原始数据集和结果集,结果集基于原有数据集合过滤提取。
                  - 查询所有
                      对列筛选
                  select * from table 
                  select column1,cloumn2 from table
                  - 去重
                      去重某个字段中相同的值
                  select distinct gender from table 
                  select distinct gender,id from table
                  - 条件
                      逐行筛选,逐?#20449;?#26029;
                      where 逐行筛选,并把满足要求的行放到结果集中。
                  - 比较运算符
                      < > = != 
                  - 逻辑运算符
                      and or not 
                  - 模糊查找
                      - like
                      - %表示多个?#25105;?#23383;符
                      - _表示?#25105;?#19968;个字符
                      select * from table where name like "%鹏%" 
                      select * from table where name like "_鹏"
                      select * from student where name like "黄%" or name like "%靖"
                  - ?#27573;?#26597;询
                      - in表示在非连续的?#27573;?            > select * from where id in(1,3,8)
                      - between ... and ... 表示一个连续的?#27573;?            > select * from where id between 3 and 8
                  - 空判断
                      - 注意 null与‘‘是不同的
                      > null不指向内存 ‘‘内存存储空值
                      - 判空 is null
                      > select * from student where birthday is null
                      - 判?#25103;?#31354; is not null 
                      > select * from student where birthday is not null
                  - 优先级
                      > 小括号,not,比较运算符,逻辑运算符
                      > and 优先于 or
                  ### 聚合函数
                      > 将现有的多行数据统计,将原始数据集统计成结果集
                      > mysql提供了常用的5个聚合函数
                      > count() max(column) min(column) sum(column) avg(column) 
                      > select count(*) from table where isDelete = 1
                      > 先拿到原始数据集过滤,然后聚合
                  ### 分组
                      - 分组的目的还是为了聚合,把此字段相同的数据组合在同一个组,更好的进行数据统计
                      -语法
                      > select column1,column2,column3 from table group by column1,column2,column3
                      select gender as 性别,count(*) from table group by gender;
                  ### 分组后的数据筛选
                      - **语法**:
                      > select column1,column2,column3 from table group by column1,column2,column3 having column1 = xxx
                      >having功能相当于where,不同点是having必须加上group by 上;where是对原始数据集筛选,having是对group by分组后的结果集筛选
                  ### ?#21028;?        - 为了方便查看数据,可以对数据进?#20449;判頡?        - 语法:
                      > select * from table order by column1 asc|desc, column2 asc|desc
          
                      > select * from students where isDelete = 0 and gender = 1 order by id desc;
          
                      > update subjects set isDelete=1 where title in(‘linux‘,‘redhat‘) 
          
                  ### 分页
                  - 当数据量过大时,在一页中查看数据是一件非常麻烦的事情
                  - 语法
                  > select * from table_name limit start,count 
                  - 从start开始,获取count条数据
                  - start索引从0开始
          
                  ### 示例:实现分页
                  - 已知?#22909;?#39029;显示m条数据,当前显示第n页
                  - 求总页数:此段逻辑后面?#19981;?#22312;python/golang中实现
                      - 查询总条数p1
                      - p1/m=p2
                      - 如果整除则p2为总页数
                      - 如果不整除则p2+1为总页数
          
                  - 求第n页的数据
                  > select * from students where isDelete = 0 limit (n-1)*m,m
          
                  ### 总结
                  - 完整select语句
                  ```
                  select distinct * 
                  from table_A inner|left|right join table_B on table_A.xxx = table_B.xxx 
                  where  ... 
                  group by ... having ...
                  order by ...
                  limit start,count
                  ```
                  - 执行顺序为
                  ```
                  from table_name
                  where
                  group by 
                  select distinct *
                  having 
                  order by 
                  limit start,count
                  ```

          mysql高阶操作

              ### 简介
                  - 实体与实体之间有三种?#26434;?#20851;系
                  - 视图用于完成查询语句的封装
                  - 事务可以保证复杂增删改查有效
                  - 当数据量巨大时,为了提高查询速度可以通过创建索引实现    
              ### 关系
                  > 示例 crate 三张表 students score subjects
                  >成绩表需要引用学生表和科目表
                  > 关系分为1 to 1 1 to n n to n 
                  > 学生表 1 to 成绩表 n;成绩表 1 to 学生表 1;
                  > 科目表 1 to 成绩 n;成绩表 1 to 科目表 1;
                  > so把关系建立在成绩表
          
              ### 建立表关系
                  > 关系也是一种字段,需要要表中创建  
                  > 先设计E-R模型中表结构关系,再创建约束  
          
              ### 外键约束
              >保证数据有效性
              >先?#33539;?#34920;与表之间是否有关系,再?#33539;?#26102;几?#32422;?#30340;关系,然后为了确认数据有效性,建立外键约束
              ```
              crate table scores (
              id int primary auto_increment,
              stuid int
              subid int
              score decimal(5,2),
              foreign key(stuid) references students(id),
              foreign key(subid) references subjects(id)
              );
              ```
          
              ### 外键的级联操作
              - 级联操作的类型
                  - restrict(限制):默认值,抛异常
                  - cascade(级联):如果主表的记录删除,则从表中相关联的记录会被删除
                  - set null:将外键设置为空
                  - no action:什么都不做
          
              ### 连?#30828;?#35810;
              >使用场景:需要用到的信息来源于多张表,找到表与表之间的关系再连?#30828;?#35810;
              - table_A inner join table_B: table_A 与table_B匹配的行会出现在结果中
              -  table_A left join table_B:table_A 与table_B匹配的行会出现在结果中,外加外表table_A独有的数据,未?#26434;?#30340;数据使用null填充
              -  table_A right join table_B:table_A 与table_B匹配的行会出现在结果中,外加外表table_B独有的数据,未?#26434;?#30340;数据使用null填充
          
              > 三种连接主要的区别是结果集的区别:
              ```
              select students.name,subjects.tile,scores.score 
              from scores
              inner join students on scores.stuid = students.id
              inner join subjects on scores.subid = students.id;
              ```
          
              rename oldname to newname
          
              engine不一样 底层的数据结构不一样
          
          备份和恢复
              备份
              mysqldump -uroot -p database_name > backup_db.sql
          
              恢复(注意要先创建数据库)
              mysqldump -uroot -p database_name < backup_db.sql   
          ### 产品设计
              确认有哪些实体,确认实体是几?#32422;?#30340;关系,确认在哪个实体中建立哪些字段
              #### 示例
              - ?#20309;?#36710;
                  - 消费者
                  - 商品
                  - 数量
                  - 价格
              - 商品信息
                  - 名称
                  - 价格
                  - 单位
                  - 日期
                  ...
              > 分析?#26434;?#20851;系 1个?#20309;?#36710;?#26434;?个商品信息
          
              #### 练习
              > 查询男生的姓名、总分
              > 使用sum,考虑使用分组,按人名分组
              ```
              select students.name,sum(scores.score) from students inner join scores on scores.stuid = students.id
              where students.gender = 1 
              group by students.id
              ```
          ### 自关联
              > 同一张表中不同字段关联,比如 pid refrences aid 把省,市,县放在同一个表中,减少表开销。那pid 关联 aid?#32479;?#20026;自关联
          ### 视图
              - 视图本质是对查询语句的封装
              - ?#26434;?#22797;杂的查询,在多次使用后,维护是一件非常麻烦的事情,解决:定义视图
              ```
              create view stuscore as 
              select students.*,scores.score 
              from studejts inner join scores on students.id = scores.stuid
              where 
              //查询视图
              select * from stuscore
              ```
              ```
              create view view_name as statements
              ```
          ### 事务
              - 一个业务逻辑需要执行多条sql语句,如果某个sql语句出错,则希望真个操作都回退,保证业务逻辑的完整性
              - 事务的四大特性(ACID)
                  - 原子性(Atomicity) 要么全部成功,要么全部失败
                  - 一致性(Consistency) 几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果一致。
                  - 隔离性(Isolation) 事务执行不受其他事务干扰,事务执行的中间结果必须对其他事务是透明的
                  - 持久性(Durability):对已经提交的事务,其数据必须被持久存储
                  - 要求:表的类型必须是 innodb或者bdb类型,才可以使用事务
                      - innodb 行级锁
                  >查看建表语句
                  ```
                  show crate table students;
                  ```
                  - 事务语句
                  >使用事务的前提条件:当存在insert/update/delete
                  ```
                  begin;
                  update students set name = "michael" where id = 1 //内存级的临时表,并且上行级锁
                  //持久化存储数据并解锁
                  commit
                  //抛出异常后回滚
                  rollback
                  ```
          
          ### 索引
              - 为了优化查询,提高数据库的访问速度需要建立索引
              - 主键和唯一索引都是索引,可以提高速度
          
              #### 选择列的数据类型
                  - 数据小,简单数据类型,避免null
          
              #### 操作
              - 索引分单列索引和组合索引
                  - 单列索引 一个索引只包含单个列
                  - 组合索引,一个索引包含多个列
                  - 查看索引
                  ```
                  show index from table_name;
                  ```
              - 创建索引及删除索引
              ```
              create index index_name on table(username(length))
              DROP index [index_name] on table
              ```
          
              - 缺点:更新表时速?#28982;?#21464;慢
          
              - 启用运行监测
              set profiling = 1
              - 查看运行时间
              show profiles 

          mysql总结笔记(一)

          标签:建表语句   复杂   练习   单列   state   统计   索引   引用   mysql   

          原文:https://blog.51cto.com/huwho/2360720

          (0)
          (0)
             
          举报
          评论 一句话评论(0
          0条  
          登录后才能评论!
          ? 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
          打开技术之扣,分享程序人生!
                       

          鲁公网安备 37021202000002号

          t6娱乐平台官方
          <blockquote id="shwb3"><ruby id="shwb3"></ruby></blockquote>
        2. <small id="shwb3"><strong id="shwb3"></strong></small>

            1. <big id="shwb3"></big>
              1. <blockquote id="shwb3"><ruby id="shwb3"></ruby></blockquote>
              2. <small id="shwb3"><strong id="shwb3"></strong></small>

                  1. <big id="shwb3"></big>