第 8 卷
| 锁,并发性能优异(仅锁定修 | 一行都会锁定整个表),并发 |
|---|---|
| 改的行,不影响其他行) | 性能差 |
| 外键约束 支持外键约束(保证数据完整 | 不支持外键约束 |
性和一致性)
| 数据存储结构 | 数据和索引存储在同一个文件 | 数据文件(.MYD)和索引文 |
|---|---|---|
| (.ibd),采用聚簇索引(索 | 件(.MYI)分离,采用非聚簇 | |
| 引与数据绑定) | 索引 | |
| 崩溃恢复 | 支持崩溃恢复(通过事务日志 | 不支持崩溃恢复,数据可能丢 |
| (redo log、undo log)恢复 | 失(仅记录数据修改的位置, | |
| 数据,保证数据不丢失) | 无完整日志) | |
| 查询性能 | 读写混合场景、并发场景性能 | 单表查询速度快(索引与数据 |
| 优,但单表查询速度略低于 | 分离,查询无需关联数据文 | |
| MyISAM | 件),适合只读场景 | |
| 适用场景 | 电商订单、金融交易、用户管 | 静态网站数据、日志存储、报 |
| 理等需要事务、高并发的核心 | 表统计等只读或读写较少的场 | |
| 业务 | 景 |
十二、MySQL中有哪些常见的操作?
MySQL的常见操作围绕“数据库管理”“表管理”“数据操作”“查询操作”“权限管理”展开,核心使用SQL语句实现,以下是分类整理的常见操作及示例:
- 数据库管理操作
- 创建数据库: CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARACTER
SET utf8mb4;(指定字符集为utf8mb4,支持表情符号)
- 查看数据库: SHOW DATABASES;(查看所有数据库)、 USE 数据库名;(切换到目标数据
库)
- 删除数据库: DROP DATABASE IF EXISTS 数据库名;(删除前判断是否存在,避免报错)
- 查看数据库配置: SHOW CREATE DATABASE 数据库名;(查看数据库的创建语句及字符集配
置)
- 表管理操作
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID(主键,自增)', username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名(非空,唯一)',
password VARCHAR(100) NOT NULL COMMENT '密码(加密存储)', age INT DEFAULT 0 COMMENT '年龄(默认0)',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(默认当前时间)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 查看表: SHOW TABLES;(查看当前数据库所有表)、 DESC 表名;(查看表结构)、 SHOW
CREATE TABLE 表名;(查看表创建语句)
- 修改表:
- 添加字段: ALTER TABLE 表名 ADD 字段名数据类型约束;
- 修改字段: ALTER TABLE 表名 MODIFY 字段名新数据类型新约束;
- 删除字段: ALTER TABLE 表名 DROP 字段名;
- 修改表名: ALTER TABLE 旧表名 RENAME TO 新表名;
- 删除表: DROP TABLE IF EXISTS 表名;
- 数据操作(DML:数据操纵语言)
- 插入数据:
- 全字段插入: INSERT INTO 表名 VALUES (值1, 值2, ...);
- 指定字段插入: INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2,
...);
- 批量插入: INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2), (值3, 值4);
- 修改数据: UPDATE 表名 SET 字段1=值1, 字段2=值2 WHERE 条件;(必须加WHERE条
件,否则修改全表数据)
示例: UPDATE user SET age=25 WHERE id=1;
- 删除数据:
- 按条件删除: DELETE FROM 表名 WHERE 条件;
- 清空表数据(不删除表结构,自增ID重置): TRUNCATE TABLE 表名;(注意:TRUNCATE
无法回滚,DELETE可以通过事务回滚)
- 数据查询(DQL:数据查询语言)
核心语法: SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组条
- 去重查询: SELECT DISTINCT age FROM user;(去除重复的age值)
- 条件查询:使用WHERE子句,支持=、!=、>、<、BETWEEN...AND、IN、LIKE、IS NULL等条件
示例:
- 查询年龄大于20的用户: SELECT * FROM user WHERE age > 20;
- 查询年龄在18-30之间的用户: SELECT * FROM user WHERE age BETWEEN 18 AND
30;
- 查询用户名包含“张”的用户: SELECT * FROM user WHERE username LIKE '%
张%';(%表示任意字符)
- 排序查询: ORDER BY 字段排序方式(ASC升序,默认;DESC降序)
示例: SELECT * FROM user ORDER BY create_time DESC;(按创建时间降序)
- 分组查询: GROUP BY 字段,结合聚合函数(COUNT、SUM、AVG、MAX、MIN)使用
示例:查询各年龄的用户数量: SELECT age, COUNT(*) AS user_count FROM user GROUP BY age;
- 分页查询: LIMIT 偏移量, 每页条数(偏移量=(页码-1)*每页条数)
示例:查询第2页数据,每页10条: SELECT * FROM user LIMIT 10, 10;
- 多表关联查询:支持INNER JOIN(内连接,取交集)、LEFT JOIN(左连接,取左表所有数
据)、RIGHT JOIN(右连接,取右表所有数据)
示例(查询用户及对应的订单数据):
SELECT u.username, o.order_id FROM user u INNER JOIN order o ON u.id = o.user_id;
- 权限管理操作
- 创建用户: CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';(主机名用%表
示任意主机)
- 授权用户: GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
示例:授予用户查询和修改user表的权限: GRANT SELECT, UPDATE ON test.user TO 'test_user'@'%';
- 查看权限: SHOW GRANTS FOR '用户名'@'主机名';
- 撤销权限: REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
- 删除用户: DROP USER '用户名'@'主机名';
全站分卷索引 · 12 卷
- 1第 1 卷
- 2第 2 卷
- 四、Node.js中的非阻塞I/O(Non-blocking I/O)模型
- • 阻塞I/O:主线程发起I/O操作后,暂停执行所有代码,直到I/O操作完成(如传统的PHP文件读
- • 非阻塞I/O:主线程发起I/O操作后,立即返回一个状态(未完成),并继续执行后续代码;I/O操作
- • exports:是 module.exports 的一个引用(快捷方式),默认是一个空对象 {},只能通
- • module.exports:是模块的真正导出对象,Node.js最终导出的是 module.exports 的
- ◦ 若为相对路径( ./、 ../)或绝对路径,直接按路径查找对应
- ◦ 若为第三方模块(如 express),会在当前目录的 node_modules 文件夹中查找,若找不
- 3第 3 卷
- 4第 4 卷
- 5第 5 卷
- 6第 6 卷
- 7第 7 卷
- 8第 8 卷
- 9第 9 卷
- 10第 10 卷
- 11第 11 卷
- 12第 12 卷