【连载1】《假装自己是个小白 —— 重新认识 MySQL》实践指南

目录

一、MySQL 基础操作代码示例

以下是 MySQL 初学者常用的基础操作代码,涵盖数据库创建、表设计、数据增删改查等核心功能。

1、登录 MySQL

通过命令行登录 MySQL 数据库:

sql 复制代码
mysql -u 用户名 -p
2、查看所有数据库

列出当前 MySQL 实例中的所有数据库:

sql 复制代码
SHOW DATABASES;
3、创建数据库

创建一个支持多语言的 UTF-8 数据库:

sql 复制代码
CREATE DATABASE IF NOT EXISTS my_first_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4、使用数据库

切换当前操作的数据库:

sql 复制代码
USE my_first_db;
5、创建表结构

建立用户表,包含自增主键和自动时间戳:

sql 复制代码
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    age INT,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
6、插入数据

批量插入用户数据:

sql 复制代码
INSERT INTO users (username, age, email) 
VALUES 
('zhangsan', 25, 'zhangsan@example.com'),
('lisi', 30, 'lisi@example.com');
7、查询数据

基础查询语句:

sql 复制代码
SELECT * FROM users;

条件查询示例:

sql 复制代码
SELECT username, age FROM users WHERE age > 28;

排序查询示例:

sql 复制代码
SELECT * FROM users ORDER BY age DESC;
8、更新数据

修改特定用户的年龄:

sql 复制代码
UPDATE users SET age = 26 WHERE username = 'zhangsan';
9、删除数据

移除指定用户:

sql 复制代码
DELETE FROM users WHERE username = 'lisi';
10、查看表结构

显示表的字段信息:

sql 复制代码
DESCRIBE users;
11、删除表

移除整个表结构:

sql 复制代码
DROP TABLE IF EXISTS users;
12、删除数据库

彻底删除数据库:

sql 复制代码
DROP DATABASE IF EXISTS my_first_db;
### 字符编码问题  
数据库或表使用默认的 `latin1` 编码时,插入中文数据会出现乱码或报错。推荐在创建数据库或表时显式指定 `utf8mb4` 编码,该编码支持完整的 Unicode 字符(包括 emoji)。  
示例建表语句:  
```sql
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(255)
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

二、常踩的坑

1、主键与自增陷阱

删除数据后,自增 ID 不会重新计算,可能导致后续插入的 ID 不连续。若业务逻辑依赖 ID 连续性,需通过程序控制而非依赖数据库自增机制。

自增 ID 的设计原则是唯一性,非连续性。如需连续序号,可通过 ROW_NUMBER() 窗口函数生成。

2、UPDATE/DELETE 不带 WHERE 条件

未指定条件的 UPDATEDELETE 会操作全表数据,可能导致灾难性后果。防护措施包括:

  • 操作前备份数据。
  • 使用事务包裹语句,确认无误后再提交:
sql 复制代码
BEGIN;
UPDATE table SET column=value WHERE condition;
-- 确认影响行数后再执行
COMMIT;

3、SELECT * 的滥用

SELECT * 会检索所有字段,包括未使用的数据,增加网络传输和内存开销。明确指定所需字段能提升性能:

sql 复制代码
SELECT id, name, email FROM users WHERE status=1;

4、忘记提交事务

InnoDB 默认需手动提交事务,未执行 COMMIT 前,其他会话无法看到修改的数据。解决方法:

  • 显式提交:COMMIT;
  • 开启自动提交:SET AUTOCOMMIT=1;(会话级设置)
    事务中可通过 ROLLBACK 回滚未提交的操作。
复制代码
相关推荐
Libraeking2 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位2 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
xiaowu0803 小时前
C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想
数据库·oracle
JMchen1234 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
Apple_羊先森4 小时前
ORACLE数据库巡检SQL脚本--19、磁盘读次数最高的前5条SQL语句
数据库·sql·oracle
crmscs4 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob5 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔5 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9965 小时前
flutter和Android动画的对比
android·flutter·动画