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. 数据库视图

    查看表与表之间的关系

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343