Mysql-教程01

数据库软件:一个软件,看的见,可操作,实现数据库的逻辑功能
数据库:是一种逻辑概念,用来存放数据的仓库,侧重存储
数据仓库:从数据量上来说,比数据库庞大的多,主要用于数据分析和

概述

什么是数据库

1
存储数据的仓库

都有哪些公司在用数据库

1
金融机构、游戏网站、购物网站、论坛网站 ... ...

提供数据库服务的软件

  1. 软件分类
1
MySQL、Oracle、SQL_Server、DB2、MongoDB、MariaDB 
  1. 生产环境中,如何选择使用哪个数据库软件
    1. 是否开源
      1
      2
        1. 开源软件:MySQL、Mariadb、MongoDB
      2. 商业软件:Oracle、DB2、SQL_Server
    2. 是否跨平台
      1
      2
      1. 不跨平台 :SQL_Server
      2. 跨平台 :...
    3. 公司的类型
      1
      2
      1. 商业软件 :政府部门、金融机构
      2. 开源软件 :游戏网站、购物网站、论坛网站 ..

MySQL的特点

关系型数据库

1
2
3
1. 数据是以行和列(表格)的形式去存储的
2. 表中的每一行叫一条记录,每一列叫一个字段
3. 表和表之间的逻辑关联叫关系
**示例**
1
2
3
4
5
6
7
8
9
10
11
关系型数据库存储

表1、学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 25 六班

表2、班级信息表
班级 班主任
三班 大空翼
六班 松人
1
2
3
4
 非关系型数据库中存储

{"姓名":"水冰月","年龄":25,"班级":"六班"}
{"姓名":"星矢","年龄":25,"班级":"三班","班主任":"大空翼"}
跨平台
1
可以在Unix、Linux、Windows上运行数据库服务
支持多种编程语言
1
python、java、php ... ...

数据库软件、数据库、数据仓库的概念

1
2
3
4
5
6
1. 数据库软件
一个软件,看的见,可操作,实现数据库的逻辑功能
2. 数据库
是一种逻辑概念,用来存放数据的仓库,侧重存储
3. 数据仓库
从数据量上来说,比数据库庞大的多,主要用于数据分析和数据挖掘

MySQL安装

Ubuntu安装软件

  1. 更新apt-get

    1
    sudo apt-get update
  2. 把本地已安装软件与刚下载的软件列表进行对比,如果发现已安装软件版本低,则更新

    1
    sudo apt-get upgrade
  3. 修复依赖关系

    1
    sudo apt-get -f install

    访问源列表中的每个网址,读取软件列表,保存到本地
    /var/lib/apt/lists/

Windows安装

  1. 下载MySQL安装包(windows)
    mysql-installer5.7..msi
  2. 安装教程去安装

Mac安装

  1. cd
  2. vi .bash_profile
    添加 :PATH=”$PATH”:/usr/local/mysql/bin
  3. source .bash_profile

启动和连接MySQL服务

  1. 服务端启动

    1
    2
    3
    4
    查看MySQL状态
    sudo /etc/init.d/mysql status
    启动,停止,重启
    sudo /etc/init.d/mysql start | stop | restart
  2. 客户端连接

    1. 命令格式
    1
    2
    mysql -h主机地址 -u用户名 -p密码
    mysql -hlocalhost -uroot -p123456

    2、本地连接可省略 -h 选项

    1
    mysql -uroot -p123456

基本SQL命令

SQL命令的使用规则

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

库的管理

库的基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、查看已有库
show databases;
2、创建库(指定字符集)
create database 库名 [character set utf8];
3、查看创建库的语句(字符集)
show create database 库名;
4、查看当前所在库
select database();
5、切换库
use 库名;
6、查看库中已有表
show tables;
7、删除库
drop database 库名;

库名的命名规则

1
2
3
1、数字、字母、下划线,但不能使用纯数字
2、库名区分字母大小写
3、不能使用特殊字符和mysql关键字

表的管理

表的基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
1、创建表(指定字符集)
create table 表名(
字段名 数据类型,
字段名 数据类型,
...
字段名 数据类型
);
2、查看已有表的字符集
show create table 表名;
3、查看表结构
desc 表名;
4、删除表
drop table 表名;

1、所有的数据都是以文件的形式存放在数据库目录下
2、数据库目录 :/var/lib/mysql

表记录管理

  1. 插入(insert)
1
2
1、insert into 表名 values(值1),(值2),...;
2、insert into 表名(字段1,...) values(值1),...;
  1. 查询(select)
1
2
1、select * from 表名 [where 条件];
2、select 字段1,字段名2 from 表名 [where 条件];

如何更改默认字符集

方法(通过更改MySQL配置文件实现)
步骤

1
2
3
4
5
6
7
8
9
1、获取root权限
sudo -i
2、cd /etc/mysql/mysql.conf.d/
3、备份 :cp mysqld.cnf mysqld.cnf.bak
4、vim mysqld.cnf
[mysqld]
character_set_server = utf8
5、重启mysql服务
/etc/init.d/mysql restart

mac上

1
2
3
4
配置文件路径
/etc/my.cnf
[mysqld]
character_set_server = utf8

客户端把数据存储到数据库服务器上的过程

  1. 连接到数据服务器 mysql -uroot -p123456
  2. 选择一个库 use 库名
  3. 创建表/修改表 update 表名…
  4. 断开与数据库连接 exit; | quit; | \q;

数据类型

数值类型

整型

  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个字节)

浮点型

  1. float(4个字节,最多显示7个有效位)
    字段名 float(m,n) m->总位数 n->小数位位数
    float(5,2)取值范围? -999.99 ~ 999.99
  2. decimal(最多显示28个有效位)
    1、decimal(m,n)
    2、存储空间(整数、小数分开存储)
    规则:将9的倍数包装成4个字节
1
2
3
4
5
6
7
8
9
10
11
余数    字节
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字节

字符类型

  1. char(定长)
    取值范围:1~255;浪费存储空间,性能高
  2. varchar(变长)
    取值范围:1~65535;节省存储空间,性能低
  3. text / longtext(4G) / blob / longblob(4G)
区别:
  1. 字符类型宽度和数值类型宽度的区别
  2. 数值类型宽度为显示宽度,只用于select查询显示,和占用存储无关,可用zerofill查看效果
  3. 字符类型的宽度超过之后则无法存储

枚举类型

  1. 单选(enum) :字段名 enum(值1,值2,…)
  2. 多选(set) :字段名 set(值1,值2,…)
1
2
3
4
5
6
7
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");

日期时间类型

  1. date :”YYYY-MM-DD”
  2. time :”HH:MM:SS”
  3. datetime :”YYYY-MM-DD HH:MM:SS”
  4. timestamp :”YYYY-MM-DD HH:MM:SS”
  5. 注意
    1. datetime :不给值默认返回NULL值
    2. timestamp :不给值默认返回系统当前时间
1
2
3
4
5
6
7
8
create table t7(
id int,
name varchar(15),
birthday date,
money int,
shijian datetime
);
insert into t7 values(2,"王",date(now()),10000,now());
日期时间函数
  1. now() 返回服务器当前时间
  2. curdate() 返回当前日期
  3. curtime() 返回当前时间
  4. year(date) 返回指定时间的年份
  5. date(date) 返回指定时间的日期
  6. time(date) 返回指定时间的时间
  7. 示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    1、在表中插入3条记录
    insert into t7 values
    (3,"小昭",19000520,3000,20180630000000),
    (4,"赵敏",19000521,4000,20180702000000),
    (5,"周芷若",19010522,3500,20180702100000);
    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";
    日期时间运算
  8. 语法格式
1
2
3
4
5
select * from 表名
where 字段名 运算符 (时间-interval 时间间隔单位);

时间间隔单位:
1 day | 2 hour | 1 minute | 2 year | 3 month

示例

1
2
3
4
5
6
7
8
9
10
11
12
1、查询1天以内的记录
select * from t7
where shijian > (now()-interval 1 day);
age > 20
2、查询1年以前的记录
select * from t7
where shijian < (now()-interval 1 year);
3、查询1天以前,3天以内的记录
select * from t7
where
shijian < (now()-interval 1 day) and
shijian > (now()-interval 3 day);