MySQL

基础知识

数据库

  • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
  • 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
  • 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
  • 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
  • RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
    1. 数据以表格的形式出现
    2. 每行为各种记录名称
    3. 每列为记录名称所对应的数据域
    4. 许多的行和列组成一张表单
    5. 若干的表单组成database

RDBMS 术语

  • 数据库:数据库是一些关联表的集合。
  • 数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列:一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

    MySQL数据库

  • MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。
  • MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将- 所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

    入门

    配置

  • 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [client]
    # 设置mysql客户端默认字符集
    default-character-set=utf8

    [mysqld]
    # 设置3306端口
    port = 3306
    # 设置mysql的安装目录
    basedir=C:\\web\\mysql-8.0.11
    # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
    # datadir=C:\\web\\sqldata
    # 允许最大连接数
    max_connections=20
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB

启动

启动MySQL

1
net start mysql

登录 MySQ
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

1
mysql -h 主机名 -u 用户名 -p 密码

登录本机MySQL

1
mysql -u 用户名 -p 密码

关闭MySQL

1
net stop mysql

管理

  • USE $table
  • SHOW DATABASES
  • SHOW TABLES
  • SHOW COLUMNS FROM $table

USE $database
选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。

1
2
> Database changed
>

SHOW DATABASES
列出 MySQL 数据库管理系统的数据库列表。

1
2
3
4
5
6
7
8
9
> +--------------------+
> | Database |
> +--------------------+
> | information_schema |
> | mysql |
> | performance_schema |
> | test |
> +--------------------+
>

SHOW TABLES
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。

1
2
3
4
5
6
7
8
> +------------------+
> | Tables_in_runoob |
> +------------------+
> | employee_tbl |
> | runoob_tbl |
> | tcount_tbl |
> +------------------+
>

SHOW COLUMNS FROM $database
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

1
2
3
4
5
6
7
8
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| runoob_id | int(11) | NO | PRI | NULL | |
| runoob_title | varchar(255) | YES | | NULL | |
| runoob_author | varchar(255) | YES | | NULL | |
| submission_date | date | YES | | NULL | |
+-----------------+--------------+------+-----+---------+-------+

SQL

  • SQL (Structured Query Language ) 结构化查询语言
    • 特点
      • 以分号结尾;
      • 不区分大小写。
    • 分类
      • DDL(Data Definition Language ) :定义数据库、表。
      • DML(Data Manipulation Language) :对数据库中表的数据进行增删改。
      • DQL (Data Query Language):查询数据库中表的数据。
      • DCL(Data Control Language) :定义数据库的访问权限和安全级别,及创建用户。
    • 注释
      • 单行注释:“– ”(空格必须加)
      • 单行注释:“#”(空格可加可不加)
      • 多行注释:“/* */”

DDL

Data Definition Language 数据定义语言

操作数据库

使用

1
2
3
4
5
6

# 使用数据库
USE $database;

# 查询当前正在使用的数据库名称
SELECT DATABASE();

创建

1
2
3
4
5
6
7
8
9
10
11
12

# 创建数据库
CREATE DATABASE $database;

# 创建数据库,并判断是否存在
CREATE DATABASE IF NOT EXISTS $database;

# 创建数据库,并设置字符集
CREATE DATABASE $database CHARACTER SET utf-8;

# 创建数据库,判断是否存在,并设置字符集
CREATE DATABASE IF NOT EXISTS $database CHARACTER SET utf-8;

查询

1
2
3
4
5
6

# 查询所有数据库名称
SHOW DATABASES;

# 查询数据库的创建语句
SHOW CREATE DATABASE $database;

修改

1
2
3

# 修改数据库的字符集
ALTER DATABASE $database CHARACTER SET gbk;

删除

1
2
3
4
5
6

# 删除数据库
DROP DATABASE $database;

# 删除数据库,判断是否存在
DROP DATABASE IF EXISTS $database;

操作表、列

创建

1
2
3
4
5
6
7
8
9

# 创建表
CREATE TABLE $table(
$columnA $type,
$columnB $tyep
);

# 创建副本
CREATE TABLE $tableB LIKE $tableA

查询

1
2
3
4
5
6
7
8
9

# 查询某个数据库中的所有表
SHOW TABLES;

# 查询表结构
DESC $table;

# 查询表的创建语句
SHOW CREATE TABLE $table;

修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 修改表名
ALTER TABLE $tableOld RENAME TO $tableNew

# 修改表的字符集
ALTER TABLE $table CHARACTER SET utf-8;

# 修改列
ALTER TABLE $table CHANGE $columnOld $columnNew $typeNew;

# 修改类型
ALTER TABLE $table MODIFY $column $tyepNew;

# 添加列
ALTER TABLE $table ADD $column $type;

# 删除列
ALTER TABLE $table DROP $column;

删除

1
2
3
4
5
6

# 删除表
DROP TABLE $table;

# 删除表,判断是否存在
DROP TABLE IF EXISTS $table;

DML

Data Manipulation Language 数据操作语言

操作记录、值

创建

1
2
3
4
5
6

# 给记录中的所有字段,添加值
INSERT INTO $table VALUES($valueA,$valueB....)

# 给记录中指定的字段,添加值
INSERT INTO $table($columnA) VALUES($valueA)

删除

1
2
3
4
5
6
7
8
9

# 删除所有记录
DELETE * FROM $table;

# 删除指定记录
DELETE FROM $table WHERE $column = $value;

# 删除所有记录,并创建一个空副本
TRUNCATE TABLE $table;

修改

1
2
3
4
5
6

# 给记录中所有的字段,修改值
UPDATE $table SET $columnA = $valueA;

# 给记录中指定的字段,修改值
UPDATE $table SET $columnA = $valueA WHERE $colmnB = $valueB;

DQL

Data Query Language 数据查询语言

基础查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 查询表中的所有列
SELECT * FROM $table;

# 查询表中指定的列
SELECT $column FROM $table;

# 查询表中指定的列,并去掉重复的字段
SELECT DISTINCT $column FROM $table;

# 查询表中指定的列,并计算
SELECT
$columnA,
$columnB,
$columnA + $columnB
FROM
$table;

# 查询表中指定的列,并计算,且排除为null的情况
SELECT
$columnA,
$columnB,
IFNULL($columnA,0) + IFNULL($columnB,0)
FROM
$table;

# 查询表中指定的列,计算,排除为null的情况,给计算结果起名
# AS可省略
SELECT
$columnA AS $nameA,
$columnB AS $nameB,
IFNULL($columnA,0)+IFNULL($columnB,0) AS $nameC
FROM
$table;

条件查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 大于、大于等于、等于、不等于、不等于
WHERE $column > $value;
WHERE $column >= $value;
WHERE $column = $value;
WHERE $column != $value;
WHERE $column <> $value;

# 范围
WHERE $column>=10 && $column<=100;
WHERE $column>=10 AND $column<=100;
WHERE $column BETWEEN 10 AND 1000;

# 个例
WHERE $column=10 OR $column=20;
WHERE $column IN (10,20,30,40);

#查询NULL
WHERE $column IS NULL;
WHERE $column IS NOT NULL;

模糊查询

1
2
3
4
5
6

# “_” 单个任意字符
WHERE $column = 'C_t';

# “%” 多个任意字符
WHERE $column = 'super%';

排序查询

1
2
3
4
5
6

# 按照指定列的顺序,升序排序
ORDER BY $column ASC;

# 按照指定列的顺序,降序排序
ORDER BY $column DESC;

聚合函数

  • 聚合函数排除了NULL值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    # 计算指定列的 字段个数
    SELECT COUNT($column) FROM $table;

    # 计算指定列的 字段个数,且不排除NULL值
    SELECT COUNT( IFNULL($column,0) ) FROM $table;

    # 计算指定列的 最大值
    SELECT MAX($column) FROM $table;

    # 计算指定列的 最小值
    SELECT MIN($column) FROM $table;

    # 计算指定列的和
    SELECT SUM($column) FROM $table;

    # 计算指定列的平均值
    SELECT AVG($column) FROM $table;

分组查询

1
2


分页查询

DCL

Data Control Language 数据控制语言

1
2


约束

-------------本文结束-------------
Donate comment here