4.9 MySQL 基础
4.9.1 MySQL
- MySQL: 关系型数据库管理系统
- MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言
4.9.2 常用客户端
- phpMyAdmin: web 版https://www.phpmyadmin.net/
- navicat: https://www.navicat.com/en/products
- adminer: 迷你 web 版https://www.adminer.org/
- dbeaver: 强大开源https://dbeaver.io/
- workbench: 官方客户端https://www.mysql.com/
- HeidiSQL: 轻量级通用https://www.heidisql.com/
4.9.3 常用术语
- 数据库(database): 数据表的集合
- 数据表(table): 二维表格
- 字段(field): 列,一组相同类型的数据集合
- 记录(Record): 行,一组相关字段构成的数据集合
- 值域(Domain): 某个字段的取值范围
- 主键(primary key): 唯一标记某一行
- 外键(foreign key): 某字段必须与另一表字段关联
- 索引(index): 为常用字段创建索引可提升效率
4.9.4 操作类型
DDL: 数据定义语言(Data Definition Language)
登录:mysql -h localhost -u root -p
查询数据库:show databases;
选择(使用)数据库: use 数据库名;
创建数据库:create database [if not exists] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除数据库:drop database [if exists] 数据库名;
创建数据表:
creat table 表名(
字段1 类型 [comment 注释],
字段2 类型 [comment 注释],
...
字段n 类型 [comment 注释]
)
注意:方括号是可选参数,在最后一个字段中没有逗号。
查询当前数据库中所有数据表:show tables;
- 查询数据表结构:desc 表名;
- 修改数据表:
- 添加字段:alter table 表名 add 字段名 类型 [comment 注释];
- 修改字段类型:alter table 表名 modify 字段名 新类型;
- 同时修改字段名、字段类型:alter table 表名 change 旧字段名 新字段名 新类型 [comment 注释];
- 修改表名:alter table 表名 rename to 新表名;
- 删除字段:alter table 表名 drop 字段名;
- 删除数据表:
- 删除指定表,并重写创建该表:truncate table 表名;
- 删除数据表:drop table [if exists] 表名;
DQL: 数据查询语言(Data Query Language)
- 查询(select):SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>
DML: 数据操作语言(Data Manipulation Language)
- 插入(insert)
- 更新(update)
- 删除(delete)
DCL: 数据控制语言(Data Control Language)
-- 1.创建用户:
CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
CREATE USER ‘user1’@localhost IDENTIFIED BY ‘123’;
CREATE USER ‘user2’@’%’ IDENTIFIED BY ‘123’;
-- 2. 给用户授权:
GRANT 权限1, … , 权限n ON 数据库.* TO ‘用户名’@地址;
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON guer.* TO user1@localhost;
GRANT ALL ON phpcn22.* TO user2@localhost;
-- 3. 撤销授权:
REVOKE 权限1, … , 权限n ON 数据库.* FROM ‘用户名’@地址;
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
-- 4.查看用户权限
SHOW GRANTS FOR ‘用户名’@地址;
SHOW GRANTS FOR user1@localhost
-- 5. 删除用户
DROP USER ‘用户名’@地址;
DROP USER ‘user1’@localhost;
-- 6. 修改用户密码(以root身份)
use mysql;
alter user '用户名'@localhost identified by '新密码';
重点: DML,即常说的增删改查(CURD)
4.9.5 常用操作(CURD)
- 创建(Create):
INSERT
- 更新(Update):
UPDATE
- 读取(Read) :
SELECT
- 删除(Delete):
DELETE
4.9.6 CURD 语法
(1) INSERT
-- 语法1
INSERT INTO 数据表 (字段列表) VALUES (字段值列表);
-- 语法2
INSERT 数据表 VALUES (字段值列表)
-- 语法3
INSERT 数据表 SET 字段键值对
-- 案例(id是pk,系统维护要以不给值,要么null)
INSERT INTO `user` (`id`,`name`) VALUES (null,'admin')
INSERT `user` VALUES (null,'admin')
INSERT `user` SET `name`='admin',`pwd`=`5445saswuq`; // 推荐用法
(2) UPDATE
-- 语法
UPDATE 数据表 SET 字段=值,... WHERE 条件
-- 案例
UPDATE `user` SET `name`='zhu' WHERE `id`=5;
(3) DELETE
-- 语法
DELETE FROM 数据表 WHERE 条件
-- 案例
DELETE FROM `user` WHERE `id`=5
(4) SELECT
-- 语法
SELECT 字段列表 FROM 数据表 WHERE 条件
ORDER BY 排序字段 LIMIT 偏移量, 数量
-- 案例
SELECT `id`,`name` FROM `user`
WHERE `id` > 3 ORDER BY `id` DESC LIMIT 10,5
4.9.7 数据类型
- 整数: int
- 小数: float
- 字符串: char/varchar/text/blob
- 日期时间: date/datetime/timestamp
区别一:timestamp 以UTC格式存储,存储时对当前的时区进行转换,检索时再转换回当前的时区。datetime则不会。
区别二: timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。
datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
4.9.8 WHERE 条件
- 操作符:
=,!=/<>,<,>,>=,<=
- AND/OR : 与/或,
WHERE id>10 AND id<30
- BETWEEN-AND: 区间,
WHERE id BETWEEN 10 AND 30
- IN: 集合,
WHERE id IN (3,5,7)
- LIKE: 模糊,
WHERE name LIKE '%f'
(%
多个_
单个) - IS NULL/IS NOT NULL: 查询值为 NULL/不为 NULL 的记录
4.10 PDO:PHP 数据对象
- PDO: PHP 为常用数据库操作定义了一个通用的轻量级访问接口
- PDO 为数据访问提供了抽象层,意味着可以用相同的方式访问不同的数据库
- PDO 默认随 PHP 安装并自动开启
- 目前主流是: PDO 预处理操作数据库
- 预处理:编译的是 SQL 语句模板,执行时,才绑定真实的数据,更加安全,高效
创建一个 PDO 连接:格式 $db = new PDO(dsn,username,password,[options]);
// 封装 dsn => 数据库类型:host;dbname
$dsn = 'mysql:host=localhost;dbname=guer';
// 创建连接
try {
$db = new PDO($dsn, 'root', 'root');
} catch (PDOException $e) {
die('连接失败' . $e->getMessage());
}