一、连接 MySQL 数据库
连接数据库是所有操作的前提,分为本地连接和远程连接两种常用方式。
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 本地连接(默认端口3306,无需指定主机和端口) mysql -u 用户名 -p -- 输入命令后,按提示输入数据库密码即可登录 -- 2. 远程连接(需指定远程主机IP和端口) mysql -h 主机IP -P 端口号 -u 用户名 -p -- 示例:mysql -h 192.168.1.100 -P 3306 -u root -p |
二、数据库级操作(库管理)
针对数据库本身的创建、查看、使用、删除等操作,核心语法如下:
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 查看当前所有数据库 SHOW DATABASES; -- 2. 创建数据库(推荐指定字符集,避免中文乱码) CREATE DATABASE 数据库名; -- 基础创建 CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 推荐写法 -- 3. 切换使用指定数据库(后续操作均针对该数据库) USE 数据库名; -- 4. 删除数据库(谨慎操作,删除后无法恢复) DROP DATABASE 数据库名; |
三、数据表级操作(表管理)
在指定数据库下,对数据表进行创建、查看、修改、删除等操作,是数据存储的基础。
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 查看当前数据库下所有数据表 SHOW TABLES; -- 2. 创建数据表(以学生表student为例,含常用字段类型) CREATE TABLE 表名 ( 字段名1 字段类型 约束条件, 字段名2 字段类型 约束条件, ... ); -- 示例:创建学生表,id为主键自增,name非空 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增,唯一标识每条数据 name VARCHAR(50) NOT NULL, -- 字符串类型,不能为空 age INT, -- 整数类型,可空 sex CHAR(1), -- 字符类型,存储性别(如男/女) create_time DATETIME DEFAULT NOW() -- 时间类型,默认当前时间 ); -- 3. 查看数据表结构(查看字段、类型、约束等) DESC 表名; -- 简写,常用 -- 或 DESCRIBE 表名; -- 4. 修改表名 RENAME TABLE 旧表名 TO 新表名; -- 5. 修改表结构(添加、修改、删除字段) -- 5.1 添加字段 ALTER TABLE 表名 ADD 字段名 字段类型 约束条件; -- 示例:给student表添加address字段 ALTER TABLE student ADD address VARCHAR(100); -- 5.2 修改字段(修改类型或约束) ALTER TABLE 表名 MODIFY 字段名 新字段类型 新约束条件; -- 示例:将student表的age字段改为非空 ALTER TABLE student MODIFY age INT NOT NULL; -- 5.3 删除字段 ALTER TABLE 表名 DROP 字段名; -- 示例:删除student表的address字段 ALTER TABLE student DROP address; -- 6. 删除数据表(谨慎操作,删除后表中所有数据丢失) DROP TABLE 表名; |
四、数据操作(增删改查,核心重点)
对数据表中的数据进行新增、查询、修改、删除,是日常使用最频繁的操作,其中修改和删除需格外谨慎。
4.1 新增数据(INSERT)
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 指定字段新增(推荐,无需考虑字段顺序,灵活) INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); -- 示例:给student表新增一条数据 INSERT INTO student (name, age, sex) VALUES ('张三', 18, '男'); -- 2. 全字段新增(需严格按照表中字段顺序,主键自增可填NULL) INSERT INTO 表名 VALUES (值1, 值2, ...); -- 示例:student表id自增,全字段新增 INSERT INTO student VALUES (NULL, '李四', 20, '女', NOW()); -- 3. 批量新增(高效,一次插入多条数据) INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...; -- 示例:批量新增3条学生数据 INSERT INTO student (name, age, sex) VALUES ('王五', 19, '男'), ('赵六', 18, '女'), ('孙七', 21, '男'); |
4.2 查询数据(SELECT)
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 查询表中所有数据(简单查询,适合小表) SELECT * FROM 表名; -- 2. 查询指定字段(高效,只查需要的字段) SELECT 字段1, 字段2, ... FROM 表名; -- 示例:查询student表的name和age字段 SELECT name, age FROM student; -- 3. 条件查询(WHERE子句,筛选符合条件的数据) SELECT 字段 FROM 表名 WHERE 条件; -- 示例1:查询age大于18的学生 SELECT * FROM student WHERE age > 18; -- 示例2:查询name为"张三"的学生 SELECT * FROM student WHERE name = '张三'; -- 4. 模糊查询(LIKE,匹配包含指定内容的数据) -- % 表示任意长度的字符(包括0个),_ 表示单个字符 SELECT 字段 FROM 表名 WHERE 字段 LIKE '匹配规则'; -- 示例1:查询名字包含"张"的学生 SELECT * FROM student WHERE name LIKE '%张%'; -- 示例2:查询名字以"李"开头的学生 SELECT * FROM student WHERE name LIKE '李%'; -- 5. 排序查询(ORDER BY,默认升序ASC,降序DESC) SELECT 字段 FROM 表名 ORDER BY 字段 排序方式; -- 示例:查询所有学生,按age降序排列(从大到小) SELECT * FROM student ORDER BY age DESC; -- 6. 分页查询(LIMIT,适合大数据量,避免一次性查询过多) -- LIMIT 起始索引, 查询条数(起始索引从0开始) SELECT 字段 FROM 表名 LIMIT 起始索引, 条数; -- 示例1:查询前5条学生数据 SELECT * FROM student LIMIT 0, 5; -- 示例2:查询第6-10条学生数据 SELECT * FROM student LIMIT 5, 5; -- 7. 去重查询(DISTINCT,去除重复数据) SELECT DISTINCT 字段 FROM 表名; -- 示例:查询学生表中所有不重复的age SELECT DISTINCT age FROM student; |
4.3 修改数据(UPDATE)
重点提醒:修改数据必须加WHERE子句,否则会修改表中所有数据,造成不可逆损失!
|-------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 语法:UPDATE 表名 SET 字段1=值1, 字段2=值2, ... WHERE 条件; -- 示例:将id为1的学生age改为20,sex改为"男" UPDATE student SET age=20, sex='男' WHERE id=1; |
4.4 删除数据(DELETE)
重点提醒:删除数据必须加WHERE子句,否则会删除表中所有数据;删除后无法恢复,建议先查询确认后再删除。
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 语法:DELETE FROM 表名 WHERE 条件; -- 示例:删除id为3的学生数据 DELETE FROM student WHERE id=3; -- 清空表中所有数据(谨慎使用,无WHERE,不可恢复) -- 方式1:清空数据,保留表结构(自增主键会重置) TRUNCATE TABLE 表名; -- 方式2:清空数据,保留表结构(自增主键不重置) DELETE FROM 表名; |
五、常用高级查询
针对复杂场景,常用的高级查询操作,满足统计、关联等需求。
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 统计数量(COUNT,统计符合条件的记录数) -- 统计所有数据 SELECT COUNT(*) FROM 表名; -- 统计非空字段的数量 SELECT COUNT(字段名) FROM 表名; -- 示例:统计student表中age>18的学生数量 SELECT COUNT(*) FROM student WHERE age > 18; -- 2. 分组统计(GROUP BY,按指定字段分组,结合聚合函数) -- 语法:SELECT 分组字段, 聚合函数 FROM 表名 GROUP BY 分组字段; -- 示例:按sex分组,统计男女学生的数量 SELECT sex, COUNT(*) AS 人数 FROM student GROUP BY sex; -- 3. 连表查询(JOIN,关联多个表查询数据,最常用内连接) -- 内连接:只查询两个表中匹配条件的数据 -- 示例:学生表student(含class_id)和班级表class(含id、class_name),查询学生及所属班级 SELECT s.name, s.age, c.class_name FROM student s -- 给student起别名s JOIN class c -- 给class起别名c ON s.class_id = c.id; -- 关联条件:学生的class_id等于班级的id -- 4. 条件筛选(HAVING,用于分组后筛选,区别于WHERE) -- WHERE筛选行,HAVING筛选分组后的结果 -- 示例:按sex分组,统计人数大于2的性别 SELECT sex, COUNT(*) AS 人数 FROM student GROUP BY sex HAVING 人数 > 2; |
六、用户与权限操作(可选)
针对多用户场景,管理用户及权限,保障数据库安全。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 1. 创建用户 CREATE USER '用户名'@'登录地址' IDENTIFIED BY '密码'; -- 示例1:创建本地用户(只能本地登录) CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; -- 示例2:创建远程用户(可通过任意IP登录) CREATE USER 'test'@'%' IDENTIFIED BY '123456'; -- 2. 给用户授权(授予指定数据库/表的操作权限) -- 语法:GRANT 权限 ON 数据库.表名 TO '用户名'@'登录地址'; -- 示例:授予test用户testdb数据库所有表的查询、新增权限 GRANT SELECT, INSERT ON testdb.* TO 'test'@'localhost'; -- 授予所有权限(谨慎使用) GRANT ALL ON *.* TO 'test'@'localhost'; -- 刷新权限,使授权生效 FLUSH PRIVILEGES; -- 3. 撤销用户权限 REVOKE 权限 ON 数据库.表名 FROM '用户名'@'登录地址'; -- 示例:撤销test用户的新增权限 REVOKE INSERT ON testdb.* FROM 'test'@'localhost'; -- 4. 删除用户 DROP USER '用户名'@'登录地址'; |
七、注意事项
- 所有SQL语句以分号(;)结尾,否则无法执行。
- UPDATE、DELETE操作必须加WHERE子句,避免误操作全表数据。
- 创建表时,主键(PRIMARY KEY)必须唯一,自增(AUTO_INCREMENT)仅适用于整数类型主键。
- 中文数据需指定字符集为utf8mb4,避免乱码。
- 删除数据库、数据表、数据前,建议先备份,防止数据丢失。
八、常用操作口诀(快速记忆)
-
库操作:CREATE(建)、USE(用)、SHOW(查)、DROP(删)
-
表操作:CREATE(建)、DESC(查结构)、ALTER(改)、DROP(删)
-
数据操作:INSERT(增)、SELECT(查)、UPDATE(改)、DELETE(删)
|(注:文档部分内容可能由 AI 生成)