MySQL数据库

一,MySQL数据库

  1. 为什么要学习数据库

    1.了解数据库可以准确定位bug为止。
    2.准确指出数据库bug给开发。

  2. 什么是数据库

    1. 按照数据的组织、存储和管理数据的仓库

      数据库 = 多张表 + 各表之间的关系

    2. 常见数据库:Mysql、Oracle、SQLServer、MongoDB、SQLite

    3. 数据库SQL的关系:SQL是操作数据库中数据的语言

  3. MySQL数据库安装配置

    1. 安装:根据提示安装
    2. 卸载:干净(4步卸载)
      1. 停止启动
      2. 卸载程序
      3. 删除mysql文件下所有文件
      4. 点开隐藏文件
    3. 配置
  4. MySQL数据库操作命令

    1. 登录:mysql -h localhost -p -u root -p

    2. 退出:exit或者 ctrl+C

    3. 显示数据库:show databases;

    4. 数据库切换:use 数据库

    5. 查看当前库的所有表:show tables;

    6. 查看其它库所有表:show tables from 库名;

    7. 创建表:create table 表名(
      列名 类型
      列名 类型

    8. 查看表结构:desc 表名;

  5. MySQL增删改查:

    1. DDL-数据库定义语言

      1. 概念及作用

        database defination language 数据库定义语言,用于定义数据库,用于定义表结构

      2. 表中字段基本数据类型

        1. UTF-8 :一个汉字 = 3 字符
        2. GBK :一个汉字 = 2字符
        3. varchar(n),n表示n个字符
        4. 数据库语句操作

      1.创建一个数据库

      create databae 库名;
      

      2.删除创建的数据库

      drop database 库名;
      

      3.选择数据库

      user 库名;
      

      4.查看数据库创建细节

      show create database 库名;
      

      5.创建一个使用gbk字符集的数据库

      create database 库名 character set gbk
      
      

      3.表结构语句操作

      1.选择数据库

      use 库名
      

      2.创建MySQL数据表

      //创建表
      create table 表名(id int,name varchar(20),sex varchar(20),age int,salery float(6,2),birthday date);
      //删除表
      drop table 表名;
      //查看所有表
      show tables;
      //查看表的创建细节
      show create table 表名;
      //展示表结构
      desc 表名;
      //在原有的学生基础上添加address列
      alter table 表名 add address varchar(20);
      //在原来的学生基础上删除address列
      alter table 表名 drop address;
      

      5.定义表的约束

      create table 表名(id int primary key auto_increment,name varchar(20) unique not null,sex varchar(20),age int,salery float(6,2),birthday date)
      
      
      • 如果不想字段位NULL 可以设置字段属性为 NOT NULL,在操作数据库时如果输入该字段的数据为NULL,就会报错。
      • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1.
      • PRIMARY KEY关键字用于定义列为主键。为了识别数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。可以多列来定义主键,列间以逗号分隔
      • UNIQUE KEY用途:主要是用来防止数据插入的时候重复的
      • ENGINE:设置存储引擎
      • CHARSET:设置编码
    2. DML数据库操作语言

      1. 概念及作用

        DML:data manipulation language 数据库操作语言,用以操作数据库。

      2. 插入数据

        //插入数据
        insert into student values(1,'zhangsan','nan',19,387.13,'1990-10-10');
        //查询
        select * from 表名
        
        • 问题:插入中文会报错
        insert into 表名 values(2,'李四','男',19,564.23,'199-10-10');
        
        • 解决
        //通知服务器客户端使用的编码是gbk
        set character_set_client=gbk;
        //通知服务器客户端查看结果集使用的编码是gbk
        set character_set_results=gbk;
        insert into student(id,name,sex,age) values(3,'王五','男',19);
        
      3. 删除数据

        //删除单挑数据
        delete from 表名 where id=1;
        //删除所有数据,不删除结构,会放到日志中,事物提交后才生效
        delete from 表名
        //摧毁表,删除表中所有数据,不删除结构,立即生效
        truncate table 表名
        

        注意:delete from 表名; 与truncate table 表名; 都是删除该表中所有数据,区别:前者删除后自增主键还在,后者主键会从1开始

      4. 修改数据

        //设置所有人的年龄加10岁
        update 表名 set age=age+10
        //修改zhangsan 为张三
        update 表名 set name='张三' where name='zhangsan';
        //修改王五的salery和出生日期
        update 表名 set salery=100.01,birthday='1999-10-10' where id=3;
        
    3. DQL-数据库查询语言

      1. 概念及作用

        DQL:Date Query Language 数据库查询语言

      2. 数据查询

        //删除表
        drop table 表名
        //创建数据库表-学生成绩表
        create table 表名(id int primary key auto_increment,nam varchar(20) unique not null,chinese float,english float,)
        
        //添加几条数据
        insert into 表名 values(1,'张三',90,80,80);
        insert into 表名 values(2,'李四',90,87,60);
        insert into 表名 values(3,'王五',90,80,80);
        insert into 表名 values(4,'赵六',90,80,80);
        
        //查询所有学生信息
        select * from 表名;
        //查询id为1的学生信息
        select * from 表名 where id=1;
        //查询数学成绩大于80的学生
        select * from 表名 where math>80;
        //查询所有学生成绩,并输出效果为 姓名 语文 英语 数学 效果
        select name as 姓名,chinese as 语文,english as 英语,math as 数学 from 表名;
        //查询所有成绩及数学分+10分 
        select *,(math+10)from 表名
        //统计每个学生的总分 
        select name,(math+english+chinese) as 总分 from 表名 
        //查询总分大于230分的同学 
        select * from 表名 where(math+english+chinese)>230 
        //查询数学成绩在80-90之间的同学 
        select * from 表名 where math between 80 and 90 
        //查询数学语文英语都大于80的同学成绩 
        select * from 表名 where math>80 and english>80 and chinese >80; 
        //查询数学成绩在 80 60 90内的同学,即数学成绩有60、80、90的。 
        select * from 表名 where math in(80,60,90); 
        //模糊查询 //查询所有姓名中包含张的同学 
        select * from 表名 where name like ‘%张%’
        
      3. 排序查询

        Mysql升序为asc,降序为desc

         //升序
         select * from 表名 order by 字段 [asc];(不加默认)
         //降序
         select * from 表名 order by 字段 desc;
        
      4. 分页查询

        limit是mysql的分页查询语法

        select * from 表名 limit m,n;
        其中 m 是指记录从m+1条开始,n代表取n条记录
        //排序+分页
        select * from 表名 order by 字段 desc limit m,n;
        
      5. 分组查询

        分组查询得到结果是第一次查到的某个组别。

        //创建一个订单表 create table employee(id int,name varchar(20),sex varchar(20),age int); insert into employee values(1,'sunsan','男',18); insert into employee values(2,'lisi','男',18); insert into employee values(3,'wangwu','女',19); insert into employee values(4,'zhaoliu','男',15);
        //分组查询
        select * from 表名 group by 字段;
        //分组查询加条件
        select * from 表名 group by 字段 having 字段><=值;
        
        1. having 条件表达式:用来分组查询后指定一些条件来输出查询结果
        2. having作用和where一样,但having只能用于group by
      6. 报表查询

        count 个数

        sum 总数

        avg 平均值

        max 最大值

        min 最小值

        //统计班级里面有多少同学
        select count(*) from 表名;
        //统计总成绩大于250分的人数
        select count(*) from 表名 where (列名+列名)><=值;
        //统计班级里面各科总成绩
        select sum from 表名;
        //统计所有科目的总成绩
        select sum(列名+列名) from 表名;
        //统计一下语文平均成绩
        select avg(字段) from 表名;
        //统计一下最高分
        select max(字段) from 表名;
        //统计一下最低分
        select min(字段) from 表名;
        
    4. 数据库控制语言

      数据库控制语言,简称DCL

二、多表联查和子查询

创建表约束外键:

    constraint 约束

    foreign key 约定表与表之间的关系  references 关联表的主键
  1. 多表联查

    1. 一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。

    2. 一对多:一个实体的某个数据与另一个实体的多个数据有关联关系,一对多的关系在设计的时候,需要设计表的外键。

      注意:表的外键必须是另一张表的主键

    3. 多对多:(3个表= 2个实体表+1个关系表)

  2. 连表查询

    分类:内连接、外连接、交叉连接

    1. 交叉查询:交叉查询,又叫笛卡尔积查询,会将左表和右表的信息,做一个乘积将所有信息查询出来,会产生临时表,比较占用内存,生成的记录数=表1X表2

      两个表的条件相乘查出结果,占用内存大

      select * from 左表名,右表名;
      select * from 左表名 cross join 右表名;
      
  1. 内连接查询:inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来,不会产生笛卡尔积,不会产生临时表,性能高。

    两张表重叠部分

    select * from 左表名 左别名 inner join 右表名 右别名 on 左别名.id=右别名.外键名;
    select * from 左表名,右表名 where 左表名.id=右表名.外键名;
    select * from 左表名 左别名,右表名 右别名 where 左别名.id=右别名.外键名;
    
  1. 左外连接:left join on查询两张表的同时,将左表自己没有关联的数据也查询出来。

    注意:join前面是左,后面是右

    select * from 左表名 左别名 left join 右表名 右别名 on 左别名.id=右别名.外键名;
    
  2. 右外连接:right join on查询两张表的同时,将右表自己没有关联的所有数据查询出来。

    select * from 左表名 左别名 right join 右表名 右别名 on 左别名.id=右别名.外键名;
    
  3. MySQL图形化工具

    Navicat

  4. 性能优化

    1. 索引优化:给某字段添加一个索引。

    2. 优点:方便查询,运行速度快。

      缺点:占用内存大。

  5. 数据库检测:explain。

  6. 数据库视图

    查看表与表之间的关系

    解决太复杂表关系,方便查数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。