Mysql数据库操作

基础连接与环境操作

1. 连接 MySQL 服务器

bash

运行

复制代码
# 本地连接(默认端口3306)
mysql -u 用户名 -p

# 指定主机和端口连接
mysql -h 主机IP -P 端口号 -u 用户名 -p
  • 示例:mysql -h 127.0.0.1 -P 3306 -u root -p,回车后输入密码即可登录。
  • 退出 MySQL:输入 exit;quit; 并回车。

2. 查看基础信息

sql

复制代码
-- 查看所有数据库
SHOW DATABASES;

-- 查看当前使用的数据库
SELECT DATABASE();

-- 查看数据库版本
SELECT VERSION();

-- 查看当前用户
SELECT USER();

二、数据库(Database)操作

1. 创建数据库

sql

复制代码
-- 基础创建(指定字符集和排序规则,避免中文乱码)
CREATE DATABASE IF NOT EXISTS 数据库名 
DEFAULT CHARACTER SET utf8mb4  -- 推荐utf8mb4(支持emoji和所有中文)
DEFAULT COLLATE utf8mb4_unicode_ci;
  • 示例:CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • IF NOT EXISTS:避免重复创建报错,是必加的最佳实践。

2. 选择 / 使用数据库

sql

复制代码
USE 数据库名;
  • 示例:USE test_db;(后续操作默认针对该数据库)

3. 修改数据库

sql

复制代码
-- 修改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 删除数据库

sql

复制代码
-- 谨慎操作!删除后数据不可恢复
DROP DATABASE IF EXISTS 数据库名;

三、数据表(Table)操作

1. 创建数据表

sql

复制代码
-- 示例:创建用户表
CREATE TABLE IF NOT EXISTS user (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 主键+自增
    username VARCHAR(50) NOT NULL UNIQUE,  -- 用户名:非空+唯一
    password VARCHAR(100) NOT NULL,  -- 密码(建议存储加密后的值)
    age TINYINT UNSIGNED DEFAULT 0,  -- 年龄:无符号整数,默认0
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP  -- 创建时间:默认当前时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 核心参数说明:
    • ENGINE=InnoDB:默认存储引擎,支持事务、外键,是生产环境首选;
    • AUTO_INCREMENT:字段自增(仅适用于数值型主键);
    • NOT NULL:强制字段不能为空,避免脏数据;
    • DEFAULT:设置字段默认值。

2. 查看数据表信息

sql

复制代码
-- 查看当前数据库所有表
SHOW TABLES;

-- 查看表结构(核心)
DESC 表名;  -- 简写
-- 或详细结构
SHOW CREATE TABLE 表名;

3. 修改数据表

sql

复制代码
-- 1. 添加字段
ALTER TABLE user ADD COLUMN email VARCHAR(100) DEFAULT NULL AFTER password;

-- 2. 修改字段(类型/约束)
ALTER TABLE user MODIFY COLUMN age INT UNSIGNED DEFAULT 0;

-- 3. 重命名字段
ALTER TABLE user CHANGE COLUMN email user_email VARCHAR(100) DEFAULT NULL;

-- 4. 删除字段
ALTER TABLE user DROP COLUMN user_email;

-- 5. 重命名表
ALTER TABLE user RENAME TO t_user;

4. 删除数据表

sql

复制代码
DROP TABLE IF EXISTS t_user;

四、数据(CRUD)核心操作

1. 新增数据(CREATE)

sql

复制代码
-- 方式1:指定字段(推荐,字段顺序可自定义)
INSERT INTO user (username, password, age) 
VALUES ('zhangsan', '123456', 20), ('lisi', '654321', 25);  -- 批量插入

-- 方式2:不指定字段(需按表字段顺序填写所有值)
INSERT INTO user VALUES (NULL, 'wangwu', '987654', 30, NOW());
  • 主键自增时,对应字段填 NULL 即可自动生成。

2. 查询数据(READ)

sql

复制代码
-- 1. 基础查询
SELECT id, username, age FROM user;  -- 指定字段
SELECT * FROM user;  -- 查询所有字段(生产环境慎用,性能差)

-- 2. 条件查询(WHERE)
SELECT * FROM user WHERE age > 20 AND username = 'lisi';

-- 3. 排序(ORDER BY):ASC升序(默认),DESC降序
SELECT * FROM user ORDER BY age DESC;

-- 4. 分页(LIMIT):offset起始位置(从0开始),size查询条数
SELECT * FROM user LIMIT 0, 10;  -- 第1页,每页10条
SELECT * FROM user LIMIT 10, 10; -- 第2页,每页10条

-- 5. 聚合查询
SELECT COUNT(*) AS total FROM user;  -- 总数
SELECT MAX(age) AS max_age FROM user;  -- 最大年龄
SELECT AVG(age) AS avg_age FROM user;  -- 平均年龄

3. 更新数据(UPDATE)

sql

复制代码
-- 必加WHERE条件!否则更新全表数据
UPDATE user SET password = 'abc123', age = 22 WHERE id = 1;

4. 删除数据(DELETE)

sql

复制代码
-- 1. 条件删除(推荐)
DELETE FROM user WHERE id = 3;

-- 2. 清空全表(自增主键重置)
TRUNCATE TABLE user;  -- 比DELETE * 效率高,不可回滚
  • 注意:DELETE 可加 WHERE 条件,TRUNCATE 直接清空,生产环境需谨慎。

五、索引操作(性能优化核心)

1. 创建索引

sql

复制代码
-- 1. 普通索引(最常用)
CREATE INDEX idx_user_age ON user(age);

-- 2. 唯一索引(字段值唯一)
CREATE UNIQUE INDEX idx_user_username ON user(username);

-- 3. 联合索引(多个字段)
CREATE INDEX idx_user_age_username ON user(age, username);

2. 查看索引

sql

复制代码
SHOW INDEX FROM user;

3. 删除索引

sql

复制代码
DROP INDEX idx_user_age ON user;

六、事务操作(保证数据一致性)

sql

复制代码
-- 开启事务
START TRANSACTION;

-- 执行操作(示例:转账)
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;

-- 提交事务(所有操作生效)
COMMIT;

-- 回滚事务(操作出错时,恢复到事务开始前状态)
-- ROLLBACK;
  • 注意:仅 InnoDB 引擎支持事务。

总结

  1. 基础规范 :创建库 / 表时必加 IF NOT EXISTS,指定 utf8mb4 字符集,优先使用 InnoDB 引擎;
  2. 核心操作 :CRUD 中,UPDATE/DELETE 必须加 WHERE 条件,查询避免用 SELECT *
  3. 性能优化:对常用查询字段创建索引(普通 / 唯一 / 联合),但索引不宜过多(影响插入 / 更新效率)。
相关推荐
2401_858936882 小时前
51 单片机入门踩坑实录:从编译报错到数码管显示 1234 的完整解决
数据库
java1234_小锋2 小时前
Java高频面试题:Spring框架中的单例bean是线程安全的吗?
java·数据库·spring
代码探秘者2 小时前
【大模型应用】5.深入理解向量数据库
java·数据库·后端·python·spring·面试
2401_832035342 小时前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python
roman_日积跬步-终至千里2 小时前
【论文ing】强化学习重塑 NL2SQL:单轮对齐、多轮交互与细粒度评估的最新进展(2020–2026)
数据库·sql·microsoft
杨超越luckly2 小时前
AI Agent应用指南 :自动化构建品牌数据库:提示词 + API + 结构化输出
大数据·数据库·人工智能·自动化·ai agent
写代码的小阿帆2 小时前
MySQL多表联查——内连、外连
数据库·mysql
九章-2 小时前
金仓数据库迁移工具链:Oracle平滑迁移的技术实践
数据库·oracle·数据库迁移工具·oracle迁移工具
逍遥德2 小时前
Postgresql explain执行计划详解
数据库·后端·sql·postgresql·数据分析