MySQL数据库操作
一、MySQL基础认知
1. 核心概念:MySQL是开源关系型数据库,基于客户端-服务器(C/S)架构,通过SQL(结构化查询语言)实现数据的增删改查、权限管理等操作。
2. 常用客户端:命令行客户端(MySQL自带)、图形化客户端(Navicat、DBeaver、SQLyog)。
3. 连接逻辑:客户端通过IP、端口、用户名、密码连接MySQL服务器,默认端口3306,默认管理员用户为root。
二、MySQL连接与退出操作
2.1 命令行连接MySQL
基本语法(cmd/终端输入):
mysql -u 用户名 -p 密码 -h 主机IP -P 端口号 # 示例1:本地连接(默认localhost,可省略-h) mysql -u root -p123456 # 示例2:远程连接(需服务器开放3306端口) mysql -u root -p123456 -h 192.168.1.100 -P 3306
注意:-p与密码之间可加空格(如-p 123456),更安全;若密码为空,直接写-p即可。
2.2 退出MySQL
exit; -- 或 quit;,分号不可省略(SQL语句结束标志)
三、数据库(Database)操作
核心原则:先选择数据库,再操作该数据库下的表;所有SQL语句不区分大小写,但关键字建议大写(规范)。
3.1 查看所有数据库
SHOW DATABASES;
说明:MySQL默认自带4个数据库(information_schema、mysql、performance_schema、sys),不建议修改或删除。
3.2 创建数据库
CREATE DATABASE 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则]; # 示例:创建名为student的数据库,字符集utf8mb4(支持所有中文、表情) CREATE DATABASE student CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
注意:字符集优先选utf8mb4(比utf8更全面),排序规则默认utf8mb4_general_ci即可。
3.3 选择数据库(切换数据库)
USE 数据库名; # 示例:切换到student数据库 USE student;
提示:切换成功后,后续操作均针对当前选择的数据库。
3.4 查看当前选择的数据库
SELECT DATABASE();
3.5 修改数据库(仅修改字符集/排序规则)
ALTER DATABASE 数据库名 CHARACTER SET 新字符集 COLLATE 新排序规则; # 示例:修改student数据库的字符集 ALTER DATABASE student CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.6 删除数据库(谨慎操作)
DROP DATABASE 数据库名; # 示例:删除名为test的数据库 DROP DATABASE test;
四、数据表(Table)操作
前提:已通过USE命令选择目标数据库。
4.1 查看当前数据库下所有表
SHOW TABLES;
4.2 创建数据表
CREATE TABLE 表名 ( 字段名1 数据类型 [约束条件], 字段名2 数据类型 [约束条件], ... 字段名n 数据类型 [约束条件] ) [CHARACTER SET 字符集] [COLLATE 排序规则]; # 示例:创建student表(学号、姓名、年龄、性别、入学时间) CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 学号:主键,自增 name VARCHAR(50) NOT NULL, -- 姓名:非空 age INT DEFAULT 0, -- 年龄:默认值0 gender VARCHAR(10), -- 性别:可选值(男/女) create_time DATETIME DEFAULT NOW() -- 入学时间:默认当前时间 ) CHARACTER SET utf8mb4;
关键补充:
1. 常用数据类型:
INT:整数(如年龄、学号),可加长度(如INT(10),仅显示长度,不影响存储);
VARCHAR(n):可变长度字符串(如姓名、性别),n为最大长度(建议按需设置,避免浪费);
DATETIME:日期时间(格式:YYYY-MM-DD HH:MM:SS);
DECIMAL(m,n):小数(如成绩、金额),m为总长度,n为小数位数(如DECIMAL(5,2)表示000.00~999.99);
TEXT:长文本(如备注、简介),适合存储大量文字。
2. 常用约束条件:
PRIMARY KEY:主键(唯一标识一条记录,不可重复、不可为空);
AUTO_INCREMENT:自增(仅用于INT类型,配合主键使用,自动生成唯一值);
NOT NULL:非空(该字段必须填写,不能留空);
DEFAULT:默认值(当字段未填写时,自动填充默认值);
UNIQUE:唯一(该字段的值不可重复,可为空)。
4.3 查看数据表结构
-- 方式1:查看字段详情(推荐) DESC 表名; -- 或 DESCRIBE 表名; -- 方式2:查看创建表的完整SQL语句 SHOW CREATE TABLE 表名;
4.4 修改数据表(ALTER TABLE)
核心:修改表名、添加字段、修改字段、删除字段。
-- 1. 修改表名 ALTER TABLE 旧表名 RENAME TO 新表名; -- 示例:将student表改名为stu ALTER TABLE student RENAME TO stu; -- 2. 添加字段(默认添加到表末尾) ALTER TABLE 表名 ADD 字段名 数据类型 [约束条件]; -- 示例:给stu表添加grade(成绩)字段 ALTER TABLE stu ADD grade DECIMAL(5,2) DEFAULT 0; -- 3. 修改字段(修改数据类型/约束) ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束条件]; -- 示例:修改stu表的age字段为INT(3),非空 ALTER TABLE stu MODIFY age INT(3) NOT NULL; -- 4. 删除字段 ALTER TABLE 表名 DROP 字段名; -- 示例:删除stu表的gender字段 ALTER TABLE stu DROP gender;
4.5 删除数据表(谨慎操作)
DROP TABLE 表名; -- 示例:删除stu表 DROP TABLE stu;
五、数据(Data)操作(CRUD)
CRUD:Create(新增)、Read(查询)、Update(修改)、Delete(删除),是数据库核心操作。
前提:已选择数据库、数据表已创建。以下以stu表(id、name、age、grade、create_time)为例。
5.1 新增数据(INSERT)
-- 方式1:指定所有字段,按字段顺序插入 INSERT INTO 表名 (字段1, 字段2, ..., 字段n) VALUES (值1, 值2, ..., 值n); -- 示例:插入一条学生数据 INSERT INTO stu (name, age, grade) VALUES ('张三', 18, 92.5); -- 方式2:不指定字段(需按表中字段顺序插入所有值,主键自增可填NULL) INSERT INTO 表名 VALUES (值1, 值2, ..., 值n); -- 示例:插入一条学生数据(id自增,填NULL) INSERT INTO stu VALUES (NULL, '李四', 19, 88.0, NOW()); -- 方式3:批量插入(高效,推荐) INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...; -- 示例:批量插入3条数据 INSERT INTO stu (name, age, grade) VALUES ('王五', 18, 95.0), ('赵六', 19, 78.5), ('孙七', 17, 89.0);
注意:字符串值需用单引号('')包裹,日期时间值也需用单引号;自增字段无需插入值,或填NULL。
5.2 查询数据(SELECT)
最常用操作,可通过条件、排序、分页等筛选数据。
-- 1. 查询所有字段、所有数据 SELECT * FROM 表名; -- 示例:查询stu表所有数据 SELECT * FROM stu; -- 2. 查询指定字段 SELECT 字段1, 字段2, ... FROM 表名; -- 示例:查询stu表的name和grade字段 SELECT name, grade FROM stu; -- 3. 条件查询(WHERE子句) SELECT 字段 FROM 表名 WHERE 条件; -- 示例1:查询age=18的学生 SELECT * FROM stu WHERE age = 18; -- 示例2:查询grade>90的学生姓名和成绩 SELECT name, grade FROM stu WHERE grade > 90; -- 示例3:多条件查询(AND/OR) SELECT * FROM stu WHERE age > 17 AND grade > 80; -- 4. 排序查询(ORDER BY,默认升序ASC,降序DESC) SELECT 字段 FROM 表名 ORDER BY 字段 [ASC/DESC]; -- 示例:按grade降序查询,成绩从高到低 SELECT * FROM stu ORDER BY grade DESC; -- 5. 分页查询(LIMIT,用于大数据量,避免一次性查询过多) SELECT 字段 FROM 表名 LIMIT 起始索引, 每页条数; -- 说明:起始索引从0开始(第1页:0,10;第2页:10,10) -- 示例:查询第1页,每页5条数据 SELECT * FROM stu LIMIT 0, 5; -- 6. 去重查询(DISTINCT,去除重复值) SELECT DISTINCT 字段 FROM 表名; -- 示例:查询所有不同的年龄 SELECT DISTINCT age FROM stu; -- 7. 聚合查询(COUNT/SUM/AVG/MAX/MIN) -- 示例1:统计学生总数 SELECT COUNT(*) FROM stu; -- 示例2:计算平均成绩 SELECT AVG(grade) FROM stu; -- 示例3:查询最高成绩 SELECT MAX(grade) FROM stu;
5.3 修改数据(UPDATE)
UPDATE 表名 SET 字段1=值1, 字段2=值2, ... WHERE 条件; -- 示例1:修改张三的年龄为19 UPDATE stu SET age=19 WHERE name='张三'; -- 示例2:修改grade<60的学生,grade设为60(及格) UPDATE stu SET grade=60 WHERE grade < 60;
5.4 删除数据(DELETE)
DELETE FROM 表名 WHERE 条件; -- 示例1:删除name为赵六的学生 DELETE FROM stu WHERE name='赵六'; -- 示例2:删除age>20的学生 DELETE FROM stu WHERE age > 20;
补充:清空表数据(保留表结构,自增主键重置)
TRUNCATE TABLE 表名; -- 示例:清空stu表数据 TRUNCATE TABLE stu;
区别:DELETE删除数据(可恢复,自增主键不重置);TRUNCATE删除数据+重置自增(不可恢复,效率更高)。
六、常用高级操作
6.1 索引(INDEX)
作用:提高查询效率(类似书籍目录),适合查询频繁、数据量大的字段。
-- 创建索引 CREATE INDEX 索引名 ON 表名(字段名); -- 示例:给stu表的name字段创建索引 CREATE INDEX idx_stu_name ON stu(name); -- 查看索引 SHOW INDEX FROM 表名; -- 删除索引 DROP INDEX 索引名 ON 表名; DROP INDEX idx_stu_name ON stu;
6.2 约束进阶(外键)
外键(FOREIGN KEY):关联两个表,保证数据一致性(如学生表和班级表,学生表的班级ID关联班级表的主键)。
-- 1. 先创建主表(班级表) CREATE TABLE class ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(50) NOT NULL ); -- 2. 创建从表(学生表),添加外键关联班级表的cid CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, cid INT, -- 外键约束:student.cid 关联 class.cid FOREIGN KEY (cid) REFERENCES class(cid) ON DELETE CASCADE -- 级联删除:删除班级时,删除该班级所有学生 ON UPDATE CASCADE -- 级联更新:班级cid修改时,学生表的cid同步修改 );
6.3 事务(TRANSACTION)
作用:保证一组SQL操作要么全部成功,要么全部失败(如转账:扣款和到账必须同时完成)。
-- 开启事务 START TRANSACTION; -- 或 BEGIN; -- 执行SQL操作(可多个) UPDATE account SET money=money-100 WHERE name='张三'; UPDATE account SET money=money+100 WHERE name='李四'; -- 提交事务(所有操作成功,生效) COMMIT; -- 回滚事务(操作失败,恢复到事务开启前状态) ROLLBACK;
注意:MySQL中,InnoDB引擎支持事务,MyISAM引擎不支持;事务需在同一个连接中执行。
七、常见问题与注意事项
SQL语句必须以分号(;)结束,否则无法执行;
字段名、表名若包含特殊字符(如空格、中文),需用反引号(`)包裹;
插入/修改字符串时,单引号不可省略,且不可嵌套双引号;
主键不可重复、不可为空,自增字段只能用于INT类型;
远程连接失败:检查服务器3306端口是否开放、MySQL用户是否允许远程访问(授权:GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '密码';);
数据备份:可使用mysqldump命令(cmd输入):mysqldump -u root -p 数据库名 > 备份文件名.sql。
八、常用快捷键
Ctrl + C:终止当前SQL语句执行;
上下箭头:查看历史执行过的SQL语句;
\G:将查询结果纵向显示(适合字段较多的情况);
clear(或Ctrl + L):清空命令行屏幕。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)