作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL(本章节)
PostgreSQL
Redis
Etcd
“CRUD工程师”是一个在程序员圈子里非常流行,当然这是一个非常经典的“程序员梗”。我们今天就基于前面部署过的数据库来进行这些操作,从我们操作数据库的3个步骤来实现CRUD。
数据库本身也是一个对象,我们可以创建、查询、选择、删除它。注意,这里的SQL关键字是不区分大小写,结尾都需要以分号";"。
注意:新安装的数据库,需要首先修改密码,才能进行后续操作,注意有强密码要求,MYSQL也把root作为默认的超级管理员(这里的是mysql的账号,并非操作系统账号)。
#登录mysql
mysql -h 127.0.0.1 -uroot -p"前面日志里面的密码"
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';C (Create): 创建数据库
语法:CREATE DATABASE [数据库名];
-- 创建一个名为 test_db 的数据库
CREATE DATABASE test_db;
-- 创建数据库并指定字符集(更常用)
CREATE DATABASE test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci;R (Read): 查询数据库
语法:SHOW DATABASES;
-- 列出所有数据库
SHOW DATABASES;
如果你未创建库的情况就会看到MYSQL默认的4个库,这些库后面我们单独讲解。
D (Delete): 删除数据库
【警告】此操作非常危险,会直接删除数据库及其所有数据,务必谨慎,如果数据库很大,这个操作也需要很久的时间。
语法:DROP DATABASE [数据库名];
-- 删除 test_db 数据库
DROP DATABASE test_db;常用操作:选择数据库
在对表进行操作前,必须先切换到目标数据库。
语法:USE [数据库名];
USE test_db;表是存储数据的核心。我们将在 test_db 中创建一个示例表 users 来进行操作。
C (Create): 创建表
语法:CREATE TABLE [表名] ([列名] [数据类型] [约束], ...);
-- 创建一个 users 表,包含 id, name, email 和 age 字段
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自增长
name VARCHAR(100) NOT NULL, -- 可变长字符串,非空
email VARCHAR(100) UNIQUE, -- 唯一约束
age INT DEFAULT 0 -- 默认值 0
);R (Read): 查询表
-- 查看当前数据库中的所有表
SHOW TABLES;
-- 查看表的结构
DESC users;
-- 或(更详细)
SHOW CREATE TABLE users;U (Update): 修改表
这是DDL(数据定义语言)中非常重要的部分,用于调整表结构。
-- 添加一个新列 (ALTER TABLE ... ADD ...)
ALTER TABLE users ADD COLUMN gender VARCHAR(10) AFTER age;
-- 修改列的数据类型 (ALTER TABLE ... MODIFY ...)
ALTER TABLE users MODIFY COLUMN name VARCHAR(150);
-- 重命名列 (ALTER TABLE ... CHANGE ...)
ALTER TABLE users CHANGE COLUMN gender sex VARCHAR(10);
-- 删除列 (ALTER TABLE ... DROP ...) 【危险】
ALTER TABLE users DROP COLUMN sex;
-- 重命名表 (RENAME TABLE ... TO ...)
RENAME TABLE users TO my_users;
RENAME TABLE my_users TO users; -- 再改回来D (Delete): 删除表
【警告】此操作非常危险,会直接删除表及其所有数据,务必谨慎!
语法:DROP TABLE [表名];
DROP TABLE users;这是我们最常说的CRUD,针对表中的数据进行操作,因为前面的操作基本上修改很少,业务需要做的就是对数据进行增删改查。首先,我们确保 users 表存在。
C (Create): 插入数据
语法:INSERT INTO [表名] ([列1], [列2], ...) VALUES ([值1], [值2], ...);
-- 插入一条完整数据(为所有列赋值)
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);
-- 插入一条数据,只提供部分列的值(未指定的列将使用默认值或NULL)
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');
-- 一次性插入多条数据(高效)
INSERT INTO users (name, email, age) VALUES
('王五', 'wangwu@example.com', 30),
('赵六', 'zhaoliu@example.com', 28);R (Read): 查询数据
这是最复杂也是最常用的操作,使用 SELECT 语句。
-- 查询表中所有数据的所有列(* 是通配符,代表所有列)
SELECT * FROM users;
-- 查询指定列的数据
SELECT name, age FROM users;
-- 带条件的查询 (WHERE)
SELECT * FROM users WHERE age > 26;
-- 模糊查询 (LIKE)
SELECT * FROM users WHERE name LIKE '张%'; -- 查询姓张的人
-- 查询结果排序 (ORDER BY)
SELECT * FROM users ORDER BY age DESC; -- 按年龄降序排列
-- 限制返回结果数量 (LIMIT)
SELECT * FROM users LIMIT 2; -- 只返回前2条结果U (Update): 更新数据
语法:UPDATE [表名] SET [列1]=[新值1], [列2]=[新值2] WHERE [条件];
【警告】务必注意WHERE子句!如果不加WHERE条件,将更新表中的所有行!
-- 更新特定行的数据(将李四的年龄更新为26)
UPDATE users SET age = 26 WHERE name = '李四';
-- 更新多个列(将王五的邮箱和年龄都更新)
UPDATE users SET email = 'new_wangwu@example.com', age = 31 WHERE name = '王五';
-- 【危险示范】没有WHERE条件,更新所有行!
-- UPDATE users SET age = 10; -- 所有人的年龄都会变成10!D (Delete): 删除数据
语法:DELETE FROM [表名] WHERE [条件];
【警告】务必注意WHERE子句!如果不加WHERE条件,将删除表中的所有数据!
-- 删除特定行的数据(删除赵六这条记录)
DELETE FROM users WHERE name = '赵六';
-- 【危险示范】没有WHERE条件,删除所有数据!
-- DELETE FROM users; -- 表会被清空!
-- 清空表的另一种更快的方式(DDL操作,无法回滚)
-- TRUNCATE TABLE users;当然我们这里只介绍了最常用的命令,实际上还有很多细节命令,只是一般对运维而言这些基本操作是比较常用的。