MySQL 简介与安装

mysql的简单介绍

关系型数据库

数据库是(Database)是按照数据结构来组织、存储和管理数据的仓库。
关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS的特点:

  1. 数据以表格的形式出现
  2. 每行为各种记录名称
  3. 每列为记录名称所对应的数据域
  4. 许多的行和列组成一张表单
  5. 若干的表单组成database

RDBMS的术语:

  1. 数据库:数据库是一些关联表的集合。
  2. 数据表:表是数据的矩阵。
  3. 主键:主键是唯一的。一个数据表中只能包含一个主键。
  4. 外键:外键用于关联两个表。
  5. 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  6. 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。
  7. 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL数据库

MySQL是一个关系型数据库管理系统(RDBMS, Relational Database Management System),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
MySQL是最流行的RDBMS, 关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

MySQL分支与变种

主流的三种变种:Percona Server,MariaDB和Drizzle

  1. Percona Server
    Percona Server是个与Mysql向后兼容的替代品,它尽可能的不改变SQL语法,客户端/服务器协议和磁盘上的文件格式。任何运行在Mysql上的都可以运行在Percona Server上而不需要修改。切换到Percona Server只需关掉Mysql和启动Percona Server,不需要导出和重新导入数据。Percona Server包括Percona XtraDB引擎,即改进版本的InnoDB。Percona Server的许多改进特性在随后的Mysql版本中才会有体现,也就是说Percona Server成了许多新特性的“抢鲜”版。
  2. MariaDB
    从 MySQL 转向 MariaDB的代表厂家:谷歌(2013年9月)、RedHat(2013年6月)、维基百科(2013年4月)
    MySQL 在 2008 年被Sun以10亿美金所收购,MySQL 创始人 Michael Widenius 则不满 Sun 开发团队脚步过慢,愤而离职成立开源数据库联盟,另外从现有 MySQL 程序代码中,开发出另一个延伸分支版本,也就是名为玛莉亚数据库的企业级开源数据。库玛莉亚数据库如同 MySQL 的影子版本,玛莉亚数据库是 MySQL 的一个分支版本(branch),而不是衍生版本(folk),提供的功能可和 MySQL 完全兼容。
  3. Drizzle
    Drizzle是真正的Mysql分支,而非只是个变种或增强版本。它并不与Mysql兼容,尽管区分上还并不是大相径庭。在许多场合并不能简单地将Mysql后端替换为Drizzle,因为它对Mysql的语法修改太大了。

MySQL的安装

最直接的方式,使用yum安装,这里使用MariaDB,操作系统是Fedora 26。

1
sudo yum install mariadb mariadb-server mariadb-devel mariadb-libs mariadb-common mariadb-config -y

MySQL的启动

将mariadb设置为开机自启动

1
2
3
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl status mariadb.service

检查服务器版本

1
2
[CaseZheng@localhost ~]$ mysql --version
mysql Ver 15.1 Distrib 10.1.26-MariaDB, for Linux (x86_64) using readline 5.1

MySQL的连接

MySQL刚刚安装密码为空,可直接连接。

1
2
3
4
5
6
7
[CaseZheng@localhost ~]$ mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.26-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

可以使用mysqladmin创建root用户的密码,记得需要在root用户下

1
mysqladmin -uroot password 123456

MySQL安装后的样例配置文件在/usr/share/mysql下

安装mariadb的则在/usr/share/mariadb该目录下
将/etc/my.cnf备份,再将选择的样例配置文件,复制到/etc/目录下,改名为my.cnf。

1
2
3
4
[CaseZheng@localhost mariadb]$ pwd
/usr/share/mariadb
[CaseZheng@localhost mariadb]$ ls *.cnf
my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf wsrep.cnf

MySQl基本操作

show databases;

查看所有的DB名称

1
2
3
4
5
6
7
8
9
10
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)

use 数据库名;

切换数据库

1
2
MariaDB [mysql]> use mysql
Database changed

show tables;

查看当前数据库的所有表

1
2
3
4
5
6
7
8
9
10
11
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| column_stats |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+

show columns from 数据表;

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

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
MariaDB [mysql]> show columns from host;
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
+-----------------------+---------------+------+-----+---------+-------+
20 rows in set (0.00 sec)

desc 数据表;

显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。与show columns from 数据表作用相同。

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
MariaDB [mysql]> desc host;
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
+-----------------------+---------------+------+-----+---------+-------+
20 rows in set (0.00 sec)

show index from 数据表;

显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

1
2
3
4
5
6
7
8
MariaDB [mysql]> show index from user;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| user | 0 | PRIMARY | 1 | Host | A | NULL | NULL | NULL | | BTREE | | |
| user | 0 | PRIMARY | 2 | User | A | 6 | NULL | NULL | | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

show table status from db_name [like ‘pattern’]\G

输出Mysql数据库管理系统的性能及统计信息 命令后加\G则不需要再加; 且查询结果会按列打印

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
输出数据库mysql所有表的信息
MariaDB [mysql]> show table status from mysql\G

数据数据库mysql以u开头的表信息
MariaDB [mysql]> show table status from mysql like 'u%'\G
*************************** 1. row ***************************
Name: user
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 6
Avg_row_length: 74
Data_length: 444
Max_data_length: 281474976710655
Index_length: 4096
Data_free: 0
Auto_increment: NULL
Create_time: 2017-08-27 18:47:47
Update_time: 2017-10-30 23:16:25
Check_time: NULL
Collation: utf8_bin
Checksum: NULL
Create_options:
Comment: Users and global privileges
1 row in set (0.00 sec)

show create table table_name\G

打印创建table_name表的SQL语句

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
MariaDB [mysql]> show create table host\G
*************************** 1. row ***************************
Table: host
Create Table: CREATE TABLE `host` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
PRIMARY KEY (`Host`,`Db`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Host privileges; Merged with database privileges'
1 row in set (0.00 sec)

参考文档

  1. MySQL教程
  2. MySQL简介