MySQL

来源:互联网 发布:淘宝手机详情添加链接 编辑:程序博客网 时间:2024/06/17 00:38

8.4总结

1.数据库基础知识


  • 创建和查看数据库

  • 创建数据库
    create database 数据库名
  • 查看数据库
    • 查看已经存在的数据库
      show databases
    • 查看创建好的数据库
      show create database 数据库名
  • 修改数据库

    • 修改数据库编码方式
      alter database 数据库名 default character set 编码方式
  • 删除数据库
    drop database 数据库名

  • 2.数据表的基本操作

    • 创建数据表
      Create table 表名
      ( 字段名1 数据类型 [完整性约束条件],
      字段名2 数据类型 [完整性约束条件],
      字段名n 数据类型 [完整性约束条件], )
    • 查看数据表
      • show tables
      • show create table 表名
      • desc 表名
    • 修改数据表
      • 修改表名
        • alter table 旧表名 rename to 新表名
      • 修改字段名
        • alter table 表名 change 旧字段名 新字段名 新数据类型
      • 修改字段的数据类型
        • alter table 表名 modify 字段名 数据类型
      • 添加字段
        • alter table 表名 add 新字段名 数据类型
      • 删除字段
        • alter table 表名 drop 字段名
      • 修改字段的排列位置
        • alter table 表名 modify 字段名 1 数据类型 first|after 字段名2
    • 删除数据表
      • drop table 表名

    3.表的约束

    • 主键约束、非空约束、唯一约束、默认约束、外键约束
      主要看下外键约束
    • 一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
    • 在INSERT时,如果被外键约束的值在参考列中没有对应,则INSERT失败。
    • 空、RESTRICT、NO ACTION(立即检查外键约束) 删除:从表记录不存在时,主表才可以删除。删除从表,主表不变 更新:从表记录不存在时,主表才可以更新。更新从表,主表不变。
    • CASCADE 删除:删除主表时自动删除从表。删除从表,主表不变 更新:更新主表时自动更新从表。更新从表,主表不变。
    • SET NULL 删除:删除主表时自动更新从表值为NULL。删除从表,主表不变 更新:更新主表时自动更新从表值为NULL。更新从表,主表不变。

    4.数据的基本操作

    • 添加数据

      • insert into 表名(字段名1,字段名2,….)
        values(值1,值2,……);

      • insert into 表名[(字段名1,字段名2,…)]
        values(值1,值2,…),(值1,值2,…),…

      • insert into 表名(字段1,字段2,…)values(值1,值2,…)
    • 更新数据
      • update更新部分数据
      • update 表名
        set 字段名1=值1[,字段名2=值2,…]
        [where 条件表达式]
      • 在update语句中如果没有使用where子句,则会将表中所有记录的指定字段都进行更新。
    • 删除数据
      • delete删除部分数据
        • delete from 表名 where 条件表达式
      • delete删除全部数据
        • delete from 表名
      • truncate删除全部数据
        • truncate table 表名
        • 二者区别
          • delete语句是dml语句,truncate语句通常被认为是ddl语句。
          • delete语句后面可以跟where子句,通过指定where子句中的条件表达式只删除满足条件的部分记录,而truncate语句只能用于删除表中的所有记录。
          • 使用truncate语句删除表中的数据后,再次向表中添加记录时,自动增加字段默认初始化值重新从1开始,而使用delete语句删除表中的所有记录后,再次向表中添加记录时,自动增加字段的值为删除时该字段的最大值加1.

    5.单表查询

    • 简单查询
      • Select [distinct] * | {字段名1,字段名2,字段名3,…}
        from 表名
        [where 条件表达式1]
        [group by 字段名 [having 条件表达式2]]
        [order by 字段名 [asc | desc]]
        [limit [offset] 记录数]
        distinct是可选参数,用于剔除查询结果中重复的数据。having也是可选参数,用于对分组后的结果进行过滤。order by也是可选参数,用于将查询结果按照指定字段进行排序,asc升序,desc降序,如果不指定,默认为升序排列。 Limit是可选参数,用于限制查询结果的数量,limit后面可以跟两个参数,第一个参数offset表示偏移量,如果为0,则查询结果从第一条记录开始,第二个参数“记录数”表示返回查询记录的条数。
    • 按条件查询

      • 带关系运算符的查询、带in关键字的查询、带between and 关键字的查询、空值查询(is null)、带distinct关键字的查询、带like关键字的查询(% _)、带and关键字的多条件查询、带or关键字的多条件查询
        • or和and一起使用的情况
          注意:and的优先级高于or,因此当两者在一起使用时,应该先运算and两边的条件,再运算or两边的条件
    • 分组查询

      • select 字段名1,字段名2,…from 表名
        group by字段名1,字段名2,..[having 条件表达式]
        • 注意:Having关键字和where关键字的作用相同,都用于设置条件表达式对查询结果进行过滤,两者的区别在于,having关键字后可以跟聚合函数,而where不能,通常情况下having关键字都和group by 一起使用,用于对分组后的结果进行过滤。

    6.多表查询

    • 外连接(左连接、右连接、完全外连接(MySQL不支持))、内连接(inner join )、交叉连接(cross join)、两表关系为一对多,多对一或多对多时的连接语句。
    • 多表查询案例
      这里写图片描述
    • 1.从student表中查询年龄27~30岁的学生信息
    • (1)select * from student
      where year(now())-birth>=27 and year(now())-birth<=30
    • (2) alter table student add age int(10)
      update student set age=year(now())-birth
      select * from student where age between 27 and 30
    • 2.计算每个学生的总成绩
    • (1) select name,sum(grade) from student left join score on student.id=score.stu_id group by student.id
    • (2) select name,sum(grade) from student,score where student.id=score.stu_id group by student.id
    原创粉丝点击