MySQL作为最流行的开源关系型数据库,初学者首先要理解它的层级结构:实例包含多个数据库,数据库包含表,表由行和列组成。列定义数据类型与约束,行则是具体记录。掌握这套模型后,后续写SQL就不会迷失在语法细节里。

一、连接与创建数据库
本地安装完MySQL服务后,可以使用命令行客户端或图形化工具连接。最基础的方式是通过mysql命令指定用户与主机,连接成功后才能执行后续SQL。初学者建议先用root用户熟悉流程,正式环境再收拢权限。
创建数据库时需要指明字符集,否则容易出现中文乱码。下面这段SQL创建了一个使用utf8mb4的数据库,该字符集能完整支持emoji与特殊汉字,是目前的推荐做法。
-- 连接数据库示例(命令行) -- mysql -u root -p -- 创建数据库并指定字符集 CREATE DATABASE learn_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 查看已有数据库 SHOW DATABASES;
使用SHOW DATABASES能列出所有库,切换当前库用USE learn_db。很多新手忘记切换库就建表,结果表跑到了其他库里,排查起来浪费时间。
二、表结构与约束设计
表是存储的核心。定义表时要给每列选择合适类型,例如整数用INT,变长字符串用VARCHAR,日期用DATETIME。约束则保证数据合理性,最常用的就是主键和NOT NULL。
主键用于唯一标识一行,可以是一列也可以是多列组合。外键用来关联两张表,保证引用完整性。下面示例建立用户表与订单表,订单表通过user_id关联用户。
-- 使用目标数据库 USE learn_db; -- 用户表 CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ); -- 订单表,外键关联用户 CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, amount DECIMAL(10,2), FOREIGN KEY (user_id) REFERENCES user(id) );
这里user表的id设为主键且自增,email加了唯一约束防止重复注册。orders表的user_id作为外键,若插入不存在的用户id会直接报错,从而避免脏数据。
三、基础增删改查操作
SQL的四种基本操作常被称为CRUD。插入用INSERT,查询用SELECT,更新用UPDATE,删除用DELETE。初学者写查询时容易漏掉WHERE条件,导致更新或删除影响全表。
下面示例演示插入两条用户记录,并查询金额大于一百的订单。注意SELECT后写具体列名比用星号更规范,能减少不必要的IO。
-- 插入用户
INSERT INTO user (name, email) VALUES
('张三', 'zhangsan@ipipp.com'),
('李四', 'lisi@ipipp.com');
-- 插入订单
INSERT INTO orders (user_id, amount) VALUES
(1, 199.00),
(2, 59.90);
-- 查询订单金额大于100的记录
SELECT id, user_id, amount
FROM orders
WHERE amount > 100;
更新与删除必须带WHERE。例如将张三的email改为新地址,应写UPDATE user SET email='new@ipipp.com' WHERE name='张三'。如果省略WHERE,整列都会被改掉,生产事故往往由此而起。
四、常见误区与避坑建议
不少初学者把DROP和DELETE混为一谈。DELETE删的是行数据,表结构还在;DROP TABLE直接把表定义和数据全清掉,且不易恢复。还有人用root账号写业务代码,一旦泄露后果严重。
另一个坑是类型选择随意,比如用VARCHAR存日期,后续没法按时间范围高效查询。建议在建表前先画字段草图,标好类型和约束,再落到SQL里。养成备份习惯,哪怕用mysqldump导一份也好。
# 备份整个数据库到文件 mysqldump -u root -p learn_db > learn_db.sql
通过上述步骤,初学者可以搭建起MySQL基础操作的完整链条。后续再深入索引、事务与慢查询优化,都会建立在这套稳固的认知之上。