MySQL数据库

 

MySQL概述
  1、什么是数据库 :存储数据的仓库
  2、使用公司 :金融、游戏、购物、论坛 ...
  3、提供数据库服务的软件
    MySQL、Oracle、MongoDB、Mariadb、SQL_Server、Redis
  4、生产环境中,如何选择
    1、是否开源
      开源 :MySQL、MariaDB、MongoDB、Redis
      商业 :Oracle、SQL_Server、DB2
    2、是否跨平台
      不跨平台 :SQL_Server
      跨平台 :... ...
    3、公司类型
      商业软件 :金融机构
      开源软件 :民营企业
MySQL特点
  1、关系型数据库
    数据是以行和列(表格)形式存储
    一行 :一条记录,一列 :一个字段
    表和表之间逻辑关联叫关系

    示例 :关系型数据库
  表1、学生信息表
    姓名   年龄  班级
    星矢   23   1812
    水冰月  25   1809
  表2、班级信息表
    班级    班主任
    1812    大空翼
    1809    松人
    示例 :非关系型数据库
    {'姓名':'星矢','年龄':23,'班级':'1812'}
    {'姓名':'水冰月','年龄':25,'班级':'1809','班主任':'松人'}
  2、跨平台
  3、支持多种编程语言
    python、java、php ... ...
数据库、数据库软件、数据仓库概念
  1、数据库 :逻辑概念,存放数据仓库,侧重存储
  2、数据库软件 :真实软件,实现数据库的逻辑功能
  3、数据仓库
    数据量比数据库庞大
    侧重于数据分析和数据挖掘

 

MySQL安装
  服务端 :yum install mysql-server
  客户端 :yum install mysql-client

 

启动和连接MySQL服务
  1、服务端启动
    /etc/init.d/mysql status|start|stop|restart
    service mysql status|start|stop|restart
  2、客户端连接
    mysql -hIP地址 -u用户名 -p密码
    mysql -hlocalhost -uroot -p123456
    mysql -h127.0.0.1 -uroot -p123456
    mysql -uroot -p123456 本地登录可省略-h选项

SQL命令使用规则
  1、每条命令必须以 ; 结尾
  2、SQL命令不区分字母大小写
  3、使用 \c 终止当前命令执行

库的管理(库名区分字母大小写)
  1、查看已有库
    show databases;
  2、创建库[指定字符集]
    create database 库名 character set utf8;
    create database 库名 charset utf8;
  3、切换库
    use 库名;
  4、查看当前所在库
    select database();
  5、删除库
    drop database 库名;
  6、查看创建库的语句
    show create database 库名;

  创建库testdb,指定字符集为utf8
    create database testdb charset utf8;
  进入到库testdb
    use testdb;
  查看当前所在库
    select database();
  创建库testdb2
    create database testdb2;
  进入到库testdb2
    use testb2;
  查看库testdb2的字符集(查看创建库的语句)
    show create database testdb2;
  删除库testdb
    drop database testdb;
  删除库testdb2
    drop database testdb2;
View Code

表的管理
  1、创建表
    create table 表名(
    字段名 数据类型,
    字段名 数据类型,
    字段名 数据类型)charset=utf8;
  2、查看创建表的语句(字符集、存储引擎)
    show create table 表名;
  3、查看当前库中所有表
    show tables;
  4、查看表结构
    desc 表名;
  5、删除表
    drop table 表名;

  创建库python1
    create database python1;
  在python1库中创建表 pymysql并指定字符集utf8,字段有3个:id int, name char(20),age int
    use python1;
    create table pymysql(
      id int,
      name char(20),
      age int
      )charset=utf8;
  查看python1库中的所有表
    show tables;
  查看表pymysql的字符集及存储引擎(语句)
    show create table pymysql;
  查看表pymysql的表结构
    desc pymysql;
  删除表pymysql
    drop table pymsql;
View Code

注意
  MySQL基于磁盘存储,所有数据以文件形式存放在数据库目录/var/lib/mysql下
表记录的管理
  1、增(insert)
    insert into 表名 values(值1),(值2);
    insert into 表名(字段1,字段2) values(xx);
  2、查(select)
    select * from 表名 where 条件;
    select 字段1,字段2 from 表名 where 条件;

  查看所有库
    show databases;
  创建新库studb,并指定字符集utf8
    create database studb charset utf8;
  在studb库中建表stuinfo,字段有id、name、age三个,数据类型自己定义
    use studb;
    create table stuinfo(
      id int,
      name char(15),
      age int);
    show tables;
  查看表stuinfo的表结构
    desc stuinfo;
  在stuinfo中插入2条表记录
    insert into stuinfo values (1,'金毛狮王',60),(2,'紫衫龙王',19);
  在stuinfo表中name和age两个字段插入2条记录
    insert into stuinfo(name,age) values ('青翼蝠王',60),('白眉鹰王',66);
  查看stuinfo中的所有记录
    select * from stuinfo;
  查看表中所有学生的姓名和年龄
    select name,age from stuinfo;
  查看表中年龄大于20的学生信息
    select * from stuinfo where age>20;
View Code

如何更改默认字符集(改配置文件)
  1、方法 :通过更改配置文件实现
  2、步骤
    cd /etc/mysql/mysql.conf.d/
    cp mysqld.cnf mysqld.cnf.bak
    vim mysqld.cnf
    [mysqld]下面添加:
      character_set_server = utf8
    /etc/init.d/mysql restart

数据类型
  1、数值类型
    整型
      int 大整型(4个字节) 最大取值2**32 - 1
      tinyint 微小整型(1个字节)
        有符号(默认) :-128~127
    无符号 :unsigned 0~255
      smallint(2个)
      bigint(8个)

    浮点型
      float(m,n) :最多显示7个有效位
        m代表总位数,n代表小数位位数
        float(5,2) 取值范围:-999.99~999.99
        decimal(m,n) :最多显示28个有效位

  2、字符类型
  定长 :char(宽度)
    取值范围 :1-255
  变长 :varchar(宽度)
    取值范围 :1-65535
  text / longtext / blob / longblob(4G)
  char和varchar的区别
    char :浪费存储空间,性能高
    varchar:节省存储空间,性能低

    字符类型宽度和数值类型宽度区别
      字符宽度,超过范围不能存储
      数值宽度,显示宽度,只用于查询显示,和存储无关,可用zerofill查看效果
      id int(3) zerofill

  3、枚举类型
  单选(enum) :字段名 enum('M','F')
  多选(set) :字段名 set('','','','')
    注意 :hobby set('Python','MySQL','study')
    插入记录时 :'Python,study'
  4、日期时间类型
  date :'yyyy-mm-dd'
  time :'hh:mm:ss'
  datetime :'yyyy-mm-dd hh:mm:ss'
  timestamp:'yyyy-mm-dd hh:mm:ss'
  datetime不给值默认返回NULL
  timestamp不给值默认返回系统当前时间

日期时间函数
  now() :返回服务器当前时间
  curdate() :返回当前日期

  year(字段名)
  date(字段名)
  time(字段名)

  创建库studb2,并在库中创建表 student
    id 大整型,
    name 字符类型,宽度15,
    age 微小整型,不能为负数,
    class 字符类型(AID1812),
    height 浮点型,小数2位,
    money 浮点型,小数2位

    create database studb2;
    use studb2;
    create table student(
      id int,
      name varchar(20),
      age tinyint unsigned,
      class char(7),
      height float(5,2),
      money decimal(20,2)
      )charset=utf8;
  查看表结构 :desc student;
  查看字符集 :show create table student;
  在表中插入1条记录
    insert into student values (1,'赵敏',23,'AID1812','170','20000');
  查询所有表记录
    select * from student;
  在表中id和name两个字段插入2条记录
    insert into student(id,name) values (2,'周芷若'),(3,'张无忌');
  查询所有学生的id和姓名
    select id,name from student;
View Code

表记录管理
  1、删除(delete)
    delete from 表名 where 条件;
    delete from 表名;
    如果不加where条件,所有记录全部清空
  2、修改(update)
    update 表名 set 字段=值1,字段=值2 where 条件;
表字段和表记录总结
    表字段操作   表记录操作
  增  add       insert
  删  drop      delete
  改  modify     update
  查  desc      select

 

运算符操作
  数值比较/字符比较/逻辑比较
    数值比较 :> >= < <= = !=
    字符串 := !=
    逻辑比较 :and or between 值1 and 值2

  匹配空、非空
    空 :where name is null
    非空:where name is not null
    NULL:空值,只能用is、is not去匹配
    '' :空字符串,用 = 、!= 去匹配
  模糊查询(like)
    where 字段名 like 表达式
    表达式
      * % :匹配0到多个字符
      * _ :匹配1个字符
    select name from sanguo where name like '_%_';#匹配至少有2个字符
    select name from sanguo where name like '___';#匹配3个字符
    select name from sanguo where name like '%';#匹配所有,但不包含NULL
    select name from sanguo where name like '赵%';#匹配姓赵的英雄
    4、范围内比较
    where country in('蜀国','魏国')
    where id in(1,2,3,5)
    not in

SQL查询
  总结
    3、select ...聚合函数 from 表名
    1、where ...
    2、group by ...
    4、having ...
    5、order by ...
    6、limit ...;
  order by :给查询结果进行排序
    order by 字段名 ASC/DESC
    ASC(默认) :升序
    DESC :降序
  limit(永远放在SQL命令的最后)
    1、作用 :限制显示查询记录的条数
    2、用法
      limit n :显示n条记录
      limit m,n :从第m+1条记录开始,显示n条
      limit 2,3 :显示第3、4、5条记录
    limit分页
    每页显示5条记录,显示第3页的记录
      limit m,n
    limit 10,5
    每页显示n条记录,显示第m页:
      limit (m-1)*n,n
  聚合函数
  分类
    avg(字段名) :该字段的平均值
    sum(字段名) :求和
    max(字段名) :最大值
    min(字段名) :最小值
    count(字段名) :统计该字段记录的个数

  having语句 :对分组聚合后的结果,进一步筛选
  找出平均攻击力>105的国家的前2名,显示国家名称和平均攻击力
  select aaa,avg(bbb) from xxx
    group by aaa
    having avg(bbb)>105
    order by avg(bbb) DESC
    limit 2;

 

posted @ 2019-05-14 21:09  你厉害。  阅读(227)  评论(0编辑  收藏  举报