1、MySQL概述

  1、什么是数据库
    存储数据的仓库
  2、哪些公司在用数据库
    金融机构、游戏网站、购物网站、论坛网站 ... ...
  3、数据库服务软件
    1、软件分类
      MySQL、Oracle、SQL_Server、MongoDB、DB2、Maraidb 
    2、生产环境中如何选择使用哪个数据库软件
      1、是否开源
        1、开源软件 :MySQL、Mariadb、MongoDB
 2、商业软件 :Oracle、DB2、SQL_Server
      2、是否跨平台
        1、不跨平台 :SQL_Server
 2、跨平台 :...
      3、公司的类型
        1、商业软件 :政府部门、金融机构
 2、开源软件 :游戏网站、购物网站、论坛网站 ...
  4、MySQL特点
    1、关系型数据库
      1、数据以 行和列(表) 的形式去存储的
      2、表中行:一条记录  列:一个字段
      3、表和表之间的逻辑关联叫关系
      2、示例
        1、关系型数据库存储
        表1、学生信息表
   姓名    年龄   班级
   星矢     25    三班
   水冰月   23    六班
 
 表2、班级信息表
   班级    班主任
   三班    大空翼
   六班    松人
        2、非关系型数据库存储
          {"姓名":"星矢","年龄":25,"班级":"三班","班主任":"大空翼"}
          {"姓名":"水冰月","年龄":23,"班级":"六班","班主任":"松人"} 
    2、跨平台
      在Windows、Linux、Unix运行数据库服务
    3、支持多种编程语言
      python、java、php ... ...
  5、数据库软件、数据库、数据仓库 (面试要点)
    1、数据库软件
      看的见、可操作,实现数据库的逻辑功能
    2、数据库
      逻辑概念,存储数据,侧重于存储
    3、数据仓库
      数据量特别庞大,主要用于数据分析、数据挖掘

      数据库 :user表
      数据仓库 :哪个时间段用户登录最多,哪个用户购物最多
2、MySQL安装
  1、Ubuntu安装MySQL服务
    1、安装服务端
      sudo apt-get install mysql-server
    2、安装客户端
      sudo apt-get install mysql-client
    3、Ubuntu安装软件
      1、sudo apt-get install update
      2、sudo apt-get -f install
        作用 :修复依赖关系
  2、Windows安装MySQL服务
    1、下载安装包(windows)
      mysql-installer***5.7***.msi
    2、双击安装
  3、Mac安装MySQL
    1、下载安装包
    2、设置环境变量
      1、vi .bash_profile
      2、添加如下内容保存退出
        export PATH=${PATH}:/usr/local/mysql/bin
      3、终端 :source .bash_profile
      4、验证 :mysql -uroot -p密码
3、启动和连接MySQL服务
  1、服务端启动
    1、查看服务状态
      sudo /etc/init.d/mysql status
      sudo /etc/init.d/mysql start
      sudo /etc/init.d/mysql stop
      sudo /etc/init.d/mysql restart
      sudo /etc/init.d/mysql reload
  2、客户端连接
    1、命令格式
      mysql -h主机地址 -u用户名 -p密码
      mysql -hlocalhost -uroot -p123456
      # 本地登录可省略 -h 选项
        mysql -uroot -p
4、基本SQL命令
  1、SQL命令的使用规则
    1、每条命令必须以 ; 结尾
    2、SQL命令不区分字母大小写
    3、使用 \c 终止当前命令的执行
  2、库的管理 
    1、库基本操作
      1、查看所有库
        show databases;
      2、创建库(指定字符集)
        create database 库名 character set utf8;
      3、查看创建库的语句(查看字符集)
        show create database 库名;
      4、查看当前所在库
        select database();
      5、切换库
        use 库名;
      6、查看库中的表
        show tables;
      7、删除库
        drop database 库名;
    2、库的命名规则
      1、数字、字母、_,但是不能是纯数字
      2、库名区分字母大小写
      3、不能使用特殊字符 和 MySQL关键字
    3、练习
      1、创建库 testdb,指定字符集为 utf8
        create database testdb character set utf8;
      2、进入库 testdb
        use testdb;
      3、查看当前所在库
        select database();
      4、创建库 testdb2,字符集为 latin1
        create database testdb2 character set latin1;
      5、进入到库 testdb2
        use testdb2;
      6、查看库 testdb2 的字符集是什么
        show create database testdb2;
      7、查看库 testdb2 中的所有表
        show tables;
      8、删除库 testdb
        drop database testdb;
      9、删除库 testdb2
        drop database testdb2;
  3、表的管理
    1、表的基本操作
      1、创建表(别忘了选择库,指定字符集)
        create table 表名(
 字段名 数据类型,
        字段名 数据类型,
        字段名 数据类型
 )character set utf8;
      2、查看创建表的语句(字符集、存储引擎)
        show create table 表名;
      3、查看表结构
        desc 表名;
      4、删除表
        drop table 表名;
    2、练习
      1、创建库 python1
        create database python1;
      2、在python1库中创建表 pymysql,指定字符集为utf8,字段有3个:
        id int, name char(15) ,age int
        use python1;
 create table pymysql(
 id int,
 name char(15),
 age int
 )character set utf8;
      3、查看表 pymysql 的字符集和存储引擎
        show create table pymysql;
      4、查看表 pymysql 的表结构
        desc pymysql;
      5、删除表 pymysql
        drop table pymysql;
      6、创建库 python2
        create database python2;
      7、在库 python2 中创建表t1并指定字符集utf8,字段有 username char(20),password char(20)
        use python2;

 select database();
 create table t1(
 username char(20),
 password char(20)
 )character set utf8;

        show tables;
      8、查看t1的表结构
        desc t1;
      9、删除表 t1
        drop table t1;
      10、删除库 python2
        drop database python2;
  4、注意
    1、所有数据都是以文件形式存储在数据库目录下/var/lib/mysql
  5、表记录管理
    1、插入(insert)
      1、insert into 表名 values(值1),(值2);
      2、insert into 表名(字段1,字段2)
         values(值1),(值2);
    2、查询(select)
      1、select * from 表名 where 条件;
      2、select 字段1,字段2 from 表名 where 条件;
    3、练习
      1、查看所有库
        show databases;
      2、创建新库 studb
      3、在库studb中创建表 tab1,指定字符集utf8
        字段(4个): id、name、age、score
 use studb;
 create table tab1(
 id int,
 name char(20),
 age int,
 score int
 )character set utf8;
      4、查看tab1的表结构
        desc tab1;
      5、在tab1中任意插入2条记录
        insert into tab1 values
 (1,"唐伯虎",23,88),
 (2,"祝枝山",22,60);
      6、查询所有表记录
        select * from tab1;
      7、在tab1中name、score两个字段插入2条记录
        insert into tab1(name,score) values
 ("文征明",55),
 ("秋香",99);
      8、查看表tab1中所有人的姓名和年龄
        select name,age from tab1;
      9、查看表tab1中成绩及格的学生信息(高于60分)
        select * from tab1 where score>60;
5、如何更改库的默认字符集
  1、方法 :更改配置文件
  2、步骤
    1、获取root权限
      sudo -i
    2、cd /etc/mysql/mysql.conf.d
    3、cp mysqld.cnf    mysqld.cnf.bak
    4、subl  mysqld.cnf
    5、在[mysqld]下的tmpdir = /tmp添加
      character_set_server = utf8
    6、/etc/init.d/mysql restart
  3、Mac本
    vi /etc/my.cnf
    写入:
      [mysqld]
      character_set_server = utf8
6、客户端把数据存储到数据库服务器上的过程
  1、连接到数据服务器 :mysql -u用户名 -p
  2、选择库 :use 库名
  3、创建/修改表 :update 表名
  4、断开与数据库连接 :exit; | quit; | \q;
7、数据类型
  1、数值类型
    1、整型
      1、int 大整型(4个字节)
 取值范围 :0 ~ (2**32 - 1) 42亿多
      2、tinyint 微小整型(1个字节)
        1、有符号(signed默认) : -128~127
 2、无符号(unsigned) : 0~255
   age tinyint unsigned,
      3、smallint 小整型(2个字节)
      4、bigint 极大整型(8个字节)
    2、浮点型
      1、float(4个字节,最多显示7个有效位)
        字段名 float(m,n) m->总位数 n->小数位位数
 float(5,2) 取值范围:-999.99 ~ 999.99
 ## m的值最大为7
      2、double
        字段名 double(m,n)
      3、decimal(m,n)
        1、存储空间(整数部分、小数部分分开存储)
   规则:将9的倍数包装成4个字节

   余数     字节
     0        0
    1-2       1
    3-4       2
    5-6       3
    7-8       4
   例:decimal(19,9)
     整数部分:10/9=1余1  4字节+1字节=5
     小数部分:9/9=1余0   4字节+0字节=4
     总共 :9个字节
    3、练习
      1、新建库studb2,并在库中创建表stuinfo,要求:
        id : 大整型
        name : 字符类型,宽度为15
 age : 微小整型,不能为负数
 height : 浮点型,小数位为2位(float)
 money : 浮点型,小数位为4位(decimal)
        create database studb2;
 use studb2;
 create table stuinfo(
 id int,
 name char(15),
 age tinyint unsigned,
 height float(5,2),
 money decimal(20,4));
      2、查看表结构
        desc stuinfo;
      3、查看表字符集和存储引擎
        show create table stuinfo;
      4、在表中插入1条完整记录
        insert into stuinfo values
        (1,"小昭",26,165,8888.88);
      5、查询所有表记录
        select * from stuinfo;
      6、在表中id、name和money三个字段插入2条记录
        insert into stuinfo(id,name,money) values
        (2,"赵敏",200000),(3,"周芷若",18000.23);
      7、查询所有学生的 编号、姓名和money
        select id,name,money from stuinfo;
  2、字符类型
    1、char :定长
      char(宽度) 宽度取值范围:1 - 255
    2、varchar :变长
      varchar(宽度) 宽度取值范围 :1 - 65535
    3、text / longtext(4G) /blob / longblob
    4、char 和 varchar的特点
      1、char :浪费存储空间,性能高
      2、varchar :节省存储空间,性能低
    5、字符类型的宽度和数值类型宽度的区别
      1、数值类型宽度为显示宽度,只用于select查询时显示,和占用存储无关,可用zerofill查看效果
      2、字符类型的宽度超过后无法存储
  3、枚举类型
    1、单选enum
      sex enum(值1,值2,...)
    2、多选set
      likes set(值1,值2,...)
      ## 插入记录时 "study,python,mysql"
作业:
1、MySQL中数据类型有:___、___、___、___
2、关系型数据库的核心内容是 关系 即 二维表
3、简述客户端把数据存储到数据库服务器上的过程
4、char和varchar的区别,各自的特点
5、操作
  1、创建一个学校的库 school
  2、在库school中创建表students,字符集utf8
    字段如下:
    id int 显示宽度为3,位数不够用0填充
    姓名、年龄(不能为负数)、性别(单选)、成绩(浮点)、爱好(多选)
  3、查看表结构
  4、在表中任意插入3条完整记录,并查询显示
  5、在表中id、姓名、成绩三个字段插入3条记录,并查询显示
  6、查看所有学生的姓名和成绩
  7、查看成绩及格的学生的姓名和成绩
  8、更改配置文件,把默认字符集改为 utf8
  9、重启MySQL服务,并建库验证