1. MySQL概述

  1. 什么是数据库
    存储数据的仓库
  2. 都有哪些公司在用数据库
    金融机构、游戏网站、购物网站、论坛网站 ... ...
  3. 提供数据库服务的软件
    1. 软件分类
      MySQL、Oracle、SQL_Server、DB2、MongoDB、MariaDB
    2. 生产环境中, 如何选择使用哪个数据库软件
      1. 是否开源
        1. 开源软件:MySQL、MariaDB、MongoDB
        2. 商业软件:Oracle、DB2、SQL_Server
      2. 是否跨平台
        1. 不跨平台:SQL_Server
        2. 跨平台:...
      3. 公司的类型
        1. 商业软件:政府部门、金融机构
        2. 开源软件: 游戏网站、购物网站、论坛网站 ...
  4. MySQL的特点
    1. 关系型数据库
      1. 关系型数据库特点
        1. 数据是以行和列(表格)的形式去存储的
        2. 表中的每一行叫一条记录,每一列叫一个字段
        3. 表和表之间的逻辑关联叫关系
      2. 示例
        1. 关系型数据库存储
          表1、学生信息表
            姓名 年龄 班级
            星矢 25 三班
            水冰月 25 六班
          表2、班级信息表
            班级 班主任
            三班 大空翼
            六班 松人
        2. 非关系型数据库存储
          {"姓名":"水冰月","年龄":25,"班级":'六班'}
          {"姓名":"星矢","年龄":25,"班级":'六班',"班主任":'大空翼'}
    2. 跨平台
      可以在Unix、Linux 、Windows 上运行数据库服务
    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 update
        访问源列表中的每个网址,读取软件列表,保存到本地/var/lib/apt/lists/
      2. sudo apt-get upgrade
        把本地已安装软件与刚下载的软件列表进行对比,如果发现已安装软件版本低,则更新
      3. sudo apt-get -f install
        修复依赖关系
  2. Windows安装MySQL
      1. 下载MySQL安装包(windows)
        mysql-installer **5.7.***.msi
      2. 安装教程去安装

3. 启动和连接MySQL服务

  1. 服务端启动
    1. 查看MySQL状态
      sudo /etc/init.d/mysql status 查看MySQL状态
      sudo /etc/init.d/mysql start 启动
      sudo /etc/init.d/mysql stop 停止
      sudo /etc/init.d/mysql restart 重新启动
  2. 客户端连接
    1. 命令格式
      mysql -h主机地址 -u用户名 -p密码
      mysql -hlocalhost -uroot -p123456
    2. 本地连接可省略 -h 选项
      mysql -uroot -p123456

4. SQL命令的使用规则

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

5. 库的管理

  1. 库的基本操作
    1. 查看已有库
      show databases;
    2. 创建库
      create database 库名;
      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关键字

6. 表的管理

  行为记录 列为字段
  1. 表的基本操作
    1. 创建表(指定字符集)
      create table 表名(
      字段名 数据类型,
      字段名 数据类型,
      ...
      字段名 数据类型
      );
    2. 查看已有表的字符集
      show create table 表名;
    3. 查看表结构
      desc 表名
    4. 删除表
      drop table 表名;

  2. 注意

    1. 所有的数据都是以文件的形式存放在数据库目录下
    2. 数据库目录:/var/lib/mysql
    MySQL 是基于硬盘读写的

  3. Mac安装MySQL
    1. cd
    2. vi .bash_profile
      添加:PATH="$PATH":/usr/local/mysql/bin
    3. source .bash_profile

7. 表记录管理

  1. 插入
    1. insert into 表名 values(值1),(值2),...; #一个()表示一条记录
    2. insert into 表名(字段1, ...) values(值1),...;
  2. 查询
    1. select * from 表名;
      select * from 表名 where 条件;
        例如: select * from t1 where score >= 60;
    2. select 字段名1,字段名2 from 表名 [where 条件]

  3. 练习
    1. 查看所有的库
      show databases;
    2. 创建新库 studb
      create database studb;
    3. 在 studb 中创建表tab1, 指定字符集utf8, 字段有 id 、name 、age
      create table tab1(
      id int,
      name char(15),
      age int
      )character set utf8;
    4. 查看tab1的表结构
      desc tab1;
    5. 在tab1中随便插入两条记录
      insert into tab1 values
      (1, '张三丰', 100),(2, '张无忌', 30);
    6. 在tab1中的name 、age两个字段插入2条记录
      insert into tab1(name, age) values
      ('金毛狮王', 88),('紫衫龙王', 87);
    7. 查看tab1中的所有记录
      select * from tab1;
    8. 查看tab1表中所有人的姓名和年龄
      select name,age from tab1;
    9. 查看tab1表中年龄大于20的信息
      select * from tab1 where age > 20;

  4. 如何更改默认字符集
    1. 方法(通过更改MySQL配置文件实现)
    2. 步骤
      1. 获取root权限
        sudo -i
      2. cd /etc/mysql/mysql.conf.d/
      3. 备份 :cp mysqld.cnf mysqld.conf.bak
      4. subl mysqld.cnf
        [mysqld]
        character_set_server = utf8
      5. 重启MySQL服务
        /etc/init.d/mysql restart

        MAC: /etc/my.cnf
        [mysqld]
        character_set_server = utf8

      6. 客户端把数据存储到数据库服务器上的过程
        1. 连接到数据服务器 mysql -uroot -p123456
        2. 选择一个库 use 库名
        3. 创建表/修改表 update 表名...
        4. 断开与数据库连接 exit; | quit; | \q;

8. 数据类型

  1. 数值类型
    1. 整型
      1. int 大整型(4个字节)
        取值范围: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个有效位)
        1. 用法
          字段名 float(m, n) m->总位数 n->小数位位数
          float(5,2)取值范围? -999.99 ~ 999.99
      2. decimal(最多显示28个有效位)
        1. decimal(m,n)
        2. 存储空间(整数、小数分开存储)
          规则:将9的倍数包装成4个字节
          余数         字节
           0               0
          1-2             1
          3-4             2
          5-6             3
          7-9             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: 浮点型,小数位为2位(decimal)
          create database studb2;

          use studb2;

          create table stuinfo(
          id int,
          name char(15),
          age tinyint unsigned,
          height float(3,2)
          money decimal(20,2));
        2. 查看stuinfo的表结构
          desc stuinfo;
        3. 查看stuinfo的默认字符集
          show create table stuinfo;
        4. 在表中插入1条完整记录
          desc stuinfo;
          insert into stuinfo values
          (1, '小张', 20, 1.78, 888888888888888888.88);
        5. 查询所有表记录
          select * from stuinfo;
        6. 在表中id、name两个字段插入两条记录
          insert into stuinfo(id, name) values
          (2, '小李');
        7. 查询所有学生的id和姓名
          select id, name from stuinfo;

  2. 字符类型
    1. char(定常)
      1. 取值范围:1~255
    2. varchar(变长)
      1. 取值范围: 1~65535
    3. text / longtext(4G) / blob / longblob(4G)
    4. char和varchar的特点
      1. char: 浪费存储空间,性能高
      2. varchar: 节省存储空间,性能低

    5. 字符类型宽度和数值类型宽度的区别

      1. 数值类型宽度位显示宽度,只用于select 查询显示,和占用存储无关,可用zerofill查看效果

      2. 字符类型的宽度超过之后则无法存储

  3. 枚举类型

    1. 单选(enum) :字段名 enum(值1,值2,...)
   
 2. 多选(set) : 字段名 set(值1, 值2,...)
      
# 插入记录时:“F,study,Python"
      create table t5(
      id int(3) zerofill,
      name varchar(15),
      sex enum("M", "F", 'Secret'),
      likes set("F","M",'Study',"Python")
      );
      insert into t5(likes) values("F,Study,Python")
  4. 日期时间类型
    1. date: "YYYY-MM-DD"
    2. time: "HH:MM:SS"
    3. datetime:"YYYY-MM-DD HH:MM:SS"
    4. timestamp:"YYYY-MM-DD HH"
    5. 注意
      1. datetime: 不给值默认返回NULL值
      2. timestamp: 不给值默认返回系统当前时间
    create table t7(
    id int,
    name varchar(15),
    birthday date,
    money int,
    shijian datetime
    );

    insert into t7 values(2,'王', date(now()),10000,now());
      3. 日期时间函数
        1. now() 返回服务器当前时间
        2. curdate() 返回当前日期
        3. curtime() 返回当前时间
        4. year(date) 返回指定时间的年份
        5. date(date) 返回指定时间的日期
        6. time(date) 返回指定时间的时间
          select now();

        7. 练习
          1. 在表中插入3条记录
            insert into t7 values
            (3,"小昭", 19000520, 3000, 20180630000000),
            (4,"赵敏", 19000521, 4000, 20180728000000),
            (5,"周芷若", 19010522, 3500, 20180515000000);
          2. 查找2018年7月2日有哪些用户充值了
            select * from t7 where date(shijian)="2018-07-02"
          3. 查找2018年7月份充值的信息
            select * from t7 where date(shijian)>='2018-07-01' and date(shijian)
            <= '2018-07-31';
          4. 查找7月份30日10:00-12:00充值的信息
            select * from t7 where date(shijian)="2018-07-31" and
            time(shijian) >= "10:00:00" and time(shijian) <= "12:00:00"

MySQL修炼之路一的更多相关文章

  1. MySQL修炼之路四

    1. 外键(foreign key) 1. 定义:让当前表字段的值在另一个表的范围内选择 2. 语法 foreign key(参考字段名) references 主表(被参考字段名) on delet ...

  2. MySQL修炼之路五

    1. 存储引擎和锁 1. 存储引擎(处理表的处理器) 1. 基本操作 1. 查看所有存储引擎 mysql>show engines; 2. 查看已有表的存储引擎 mysql>show cr ...

  3. MySQL修炼之路三

    1. SQL查询 1. 执行顺序 3. select ... 聚合函数 from 表名 1. where ... 2. group by ... 4. having ... 5. order by . ...

  4. MySQL修炼之路二

    1. 表字段的操作 1. 语法: alter table 表名 执行动作: 2. 添加字段(add) alter table 表名 add 字段名 数据类型: alter table 表名 add 字 ...

  5. 微博MySQL优化之路--dockone微信群分享

    微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问 ...

  6. 我JAVA修炼之路

    今天起,我会不定期更新我的java修炼之路, 2017.7.10,星期一 我参见了河南青云的培训班,这一天是我们的开班典礼. 我会不定期的总结我的学习笔记,大家喜欢的可以看看,不喜勿喷. 写代码: 1 ...

  7. Java工程师修炼之路(校招总结)

    Java工程师修炼之路(校招总结) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易, ...

  8. MySql 学习之路-高级1

    Mysql自学之路-高级1 目录: 1.CREATE DATABASE 创建数据库 2.CREATE TABLE 创建数据表 3.INSERT INTO SELECT 把一个表中的数据拷贝到另一个表中 ...

  9. MySql 学习之路-基础

    Mysql 自学之路 本文包含基础部分与高级部分 一.基础 数据库操作 Show databases:显示所有的数据库 Show tables: 显示所有的数据库表 Use databasename: ...

随机推荐

  1. luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...

  2. VMware虚拟机安装使用及系统安装教程

    虚拟机是利用软件来模拟出完整计算机系统的工具.具有完整硬件系统功能的.运行在一个完全隔离环境中.虚拟机的使用范围很广,如未知软件评测.运行可疑型工具等,即使这些程序中带有病毒,它能做到的只有破坏您的虚 ...

  3. 关于==和equals的区别和联系,面试这么回答就可以

    长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果面试官问你<关于==和equals的区别>,该怎么回答完美呢?可以这样说 总结的来说: 1) ...

  4. Educational Codeforces Round 59 (Rated for Div. 2) E 区间dp + 状态定义 + dp预处理(分步dp)

    https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a ...

  5. python的小数据池

    一.什么是小数据池? 小数据池是一种缓存机制,也被称为驻留机制.各种编程语言中都有类似的东西(常量池.小数据池都是指得同一个内容). python自动将-5~256的整数.有一定规则的字符串.都放在一 ...

  6. [BJOI2019]光线(DP)

    降智了…… 当你走头无路的时候就应该知道瞎搞一个DP: $p[i]$ 表示光射入第 $1$ 块玻璃时,从第 $i$ 块玻璃出去的光量. $q[i]$ 表示光射入第 $i$ 块玻璃时,从第 $i$ 块玻 ...

  7. 面试:Semaphore(信号量)的成长之路

    2019最寒冷,面试跳槽不能等 马上就3月份了,所谓的金三银四招聘季.2019年也许是互联网最冷清的一年,很多知名的大型互联网公司都裁员过冬.当然也有一些公司还在持续招人的,比如阿里就宣称不裁员,反而 ...

  8. swagger案例Swagger案例

    pom <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework ...

  9. 社招C++后台面试-拿到offer

    社招C++后台面试-拿到offer 之前在一家小公司上班,主要是做C语言的嵌入式软件开发,涉及过一点点C++.工作大概三年,然后去试试大公司,这个面试题是我拿到offer后4个月才拖拖拉拉的开始写,题 ...

  10. Go gRPC 调试工具

    概述 最近这段时间工作挺忙的,发现已经 3 周没更文了... 感谢你们还在,今天给大家分享一款 gRPC 的调试工具. 进入正题. 当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口 ...