数据库
1. 基础
SQL, 全称为Structured Query Language(结构化查询语言)。 要讲SQL就绕不开database(数据库), 平时所说的数据库,一般就是指的Relational database(关系型数据库).- 数据库本质是个软件,是个服务器软件
- 写SQL是写在客户端里,实现从数据库里筛选处理数据
2. 语法
count是对分完组后的每个组的数据统计,没有group by相当于所有数据是一个组。
3. Linux使用MySql
3.1 充分必要性
- 如果一个项目是动态(内容会变化的,网页后缀.jsp、.php、.shtml等)内容的话,则数据库是必不可少的一个环节。

- MySQL是一个关系型数据库管理系统,开源、跨平台、所占内存较小。
3.2 MySQL安装
- mysql默认端口号是3306
- 数据库存储目录:/var/lib/mysql
- 配置文件:/etc/my.cnf
| 步骤 | 指令 | 说明 |
|---|---|---|
| 安装服务端 | yum install mysql-server | 注意是服务端。不是客户端 |
| 启动mysql | systemctl start mysqld | |
| 初始化 | mysql_secure_installation | 设置密码,是否允许远程登录等 |
| 启动/关闭/重启 | systemctl start/stop/restart mysqld | |
| 进入mysql | mysql -u 用户名 -p [密码] | 建议这里不要输入密码,是明文显示 |
| 退出mysql | exit |
3.3 MySQL操作
- 文件层级:数据库,数据表,记录(行),字段(列)。
- MySQL指令不区分大小写
- 显示指定连接字符集,避免中文乱码,每次连接MySQL后都需要设置。Mysql> set names utf-8
- 三码一致:服务器数据库的字符集+传输过程中字符集(set names)+客户端终端字符集
//库操作
SHOW DATABASES;//显示当前MySQL中全部的数据库
CREATE DATABASE 库名;//创建数据库
DROP DATABASE 库名;//删除数据库
USE 库名;//切换数据库
//表操作
CREATE TABLES 表名称 (
列名称1 数据类型 [NOT NULL AUTO_INCREMENT],
列名称2 数据类型,
列名称3 数据类型,
...,
PRIMARY KEY(主键字段名)
);
Create table oo(
Id int(11) not null auto_increment,
Username varchar(20),
Password char(32),
Primary key(Id)
);
//常见的数据类型:int(整型)、char(定长字符)、varchar(不定长字符)。
//主键一般就是序号所在的那一列,主键不能重复。
SHOW TABLES;
DESC 表名;//查看表的结构
DROP TABLE [IF EXISTS] 表名;//删除数据表
//记录操作
INSERT INTO 表名称 VALUES (值1, 值2,....);
INSERT INTO 表名称 (列1,列2,...) VALUES (值1,值2,....);
UPDATE 表名称 SET 列名称1 = 新值1,列名称2 = 新值2,… WHERE 列名称 = 某值;
SELECT 列名称1,列名称2,… FROM 表名称 WHERE 条件;
SELECT \* FROM 表名称 WHERE 条件;
DELETE FROM 表名称 WHERE 列名称 = 值;
- 以下关于MySQL整体的操作是在bash环境下执行,需要退出MySQL
//备份(导出)
//导出其实只有表操作,没有库级的操作
mysqldump -uroot -p123456 -A > 备份文件路径//全量备份(数据+结构)
mysqldump -uroot -p123456 库名 > 备份文件路径//指定库备份(数据+结构)
mysqldump -uroot -p123456 --databases db1 db2 > 备份文件路径//指定多个库备份(数据+结构)
//还原(导入)
//mysql命令行source还原方法
//系统命令行还原方法
mysql> source 备份文件路径//mysql还原全部数据库:
mysql -uroot -p123456 < 备份文件路径//linux还原全部数据库
//(需指定数据库名,因为单个库的备份是没有库名字的,即需要先搭好新库,在新库里source)
use 库名
source 备份文件路径//mysql还原指定单个数据库,mysql还原指定数据库的表
mysql -uroot -p123456 库名 < 备份文件路径//linux还原指定单个数据库,linux还原指定数据库的表
//(一个备份文件里有多个数据库的备份,此时不需要指定数据库)
source 备份文件路径//mysql还原指定多个数据库
mysql -uroot -p123456 < 备份文件路径//linux还原指定多个数据库
- 脚本执行定期备份demo
#!/bin/bash
## 在计划任务中执行该Shell脚本
filename="test_"`date +'%Y%m%d%H%M%S'`".sql"
mysqldump -uroot -p123456 test > /root/$filename
3.4 MySQL远程连接
- B/S:B是指浏览器,S是指服务器。例如:百度搜索应用就属于BS架构软件。
- C/S:C是指客户端,S是指服务器。例如:QQ、电脑端微信等应用程序都是CS架构。
- BS中mysql典型的管理工具:PMA(phpMyAdmin)
- CS中mysql典型的软件:navicat、mysql workbrach
//- 修改可以远程连接的主机与用户字段,其位于mysql数据库的user表中的host,user字段。
mysql> use mysql;
//修改链接地址,实现远程连接数据库,有利于数据库和服务分离。host字段为“%”表示任意主机ip。
mysql> select host,user from user;
mysql> update user set host='%' where user='root';
mysql> commit;
//修改后需要刷新权限表(`mysql> flush privileges`)或者重启mysql。
systemctl restart mysqld.service