MySQL零基础入门:从建库到增删改查

目录

引言

数据库的增删改查

数据表的增删改查

表数据的增删改查

修改表结构

操作总结对比

综合实战演练


引言

对于刚接触数据库的新手来说,MySQL 庞大的指令集往往让人望而生畏。其实,万变不离其宗,核心操作无非是围绕"库"、"表"和"数据"这三个维度进行的增删改查。我们将这些复杂的概念拆解为最基础的积木,带你一步步搭建起对数据库的直观认知。

数据库的增删改查

数据库是存储数据的仓库,管理好仓库是第一步。

创建数据库时,我们通常建议加上 IF NOT EXISTS 判断(可选字段 ),并指定字符集为 utf8mb4,以支持包括 Emoji 在内的所有字符。

sql 复制代码
CREATE DATABASE IF NOT EXISTS my_shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

想要查看当前服务器里有哪些数据库,或者想操作某个特定的库,可以使用以下指令:

sql 复制代码
SHOW DATABASES; -- 查看所有数据库
USE my_shop;    -- 选中 my_shop 库进行后续操作

删除数据库是一个高危操作,它会连同库里的所有数据一起彻底消失,所以务必谨慎使用,并加上 IF EXISTS 防止报错(可选字段)。

sql 复制代码
DROP DATABASE IF EXISTS my_shop;

数据表的增删改查

表是数据库中实际存储数据的结构。我们可以把它想象成 Excel 表格,定义好列名(字段)和类型即可。

创建一个学生表,包含ID、姓名和入学日期。注意 AUTO_INCREMENT 用于主键自增,DEFAULT 用于设置默认值,COMMENT用于描述数据

sql 复制代码
CREATE TABLE student (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    age INT DEFAULT 0 COMMENT '年龄',
    enroll_date DATE COMMENT '入学日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';

建好表后,我们需要确认表是否创建成功,或者查看表的具体结构。

sql 复制代码
SHOW TABLES;      -- 查看当前库下所有的表
DESC student;     -- 查看 student 表的具体字段结构

如果表设计错误或者不再需要,可以将其删除。

sql 复制代码
DROP TABLE IF EXISTS student;

表数据的增删改查

这是开发中最常用的部分,即对表里的行数据进行操作。

向表中添加新记录。注意字符串类型的值需要用单引号包裹。

cpp 复制代码
INSERT INTO student (name, age, enroll_date) VALUES ('张三', 18, '2023-09-01');
INSERT INTO student (name, age, enroll_date) VALUES ('李四', 20, '2023-09-02');

查询是数据库的灵魂。我们可以查询所有列,也可以只查询特定列,并配合条件筛选。

sql 复制代码
SELECT * FROM student; -- 查询所有数据(生产环境慎用)
SELECT name, age FROM student WHERE age > 18; -- 查询年龄大于18的学生姓名和年龄

修改数据时,必须格外小心。SET 后面跟要修改的字段和新值。

cpp 复制代码
UPDATE student SET age = 19 WHERE name = '张三';

删除数据同样危险 。WHERE 子句决定了删除哪一行。

cpp 复制代码
DELETE FROM student WHERE name = '李四';

这里必须强调一个新手最容易犯的错误:在执行 UPDATE 或 DELETE 语句时,千万别忘了加 WHERE 条件!如果不加 WHERE,数据库会默认更新或删除表中的所有数据,这通常会导致灾难性的后果。

修改表结构

业务变更时,我们往往需要修改已经存在的表结构,而不是删表重建。ALTER TABLE 就是为此而生的。

  • 添加字段 :在 age 字段后面加一个 phone 字段。
    ALTER TABLE student ADD phone VARCHAR(20) AFTER age;
  • 修改字段类型 :将 name 的长度从 50 改为 100。
    ALTER TABLE student MODIFY name VARCHAR(100);
  • 删除字段 :删除 phone 字段。
    ALTER TABLE student DROP phone;
  • 修改字段名 :将 enroll_date 改名为 create_time。
    ALTER TABLE student CHANGE enroll_date create_time DATE;

操作总结对比

操作对象 增 (Create) 删 (Drop/Delete) 改 (Alter/Update) 查 (Read/Select)
数据库 CREATE DATABASE DROP DATABASE - SHOW DATABASES
数据表 CREATE TABLE DROP TABLE ALTER TABLE SHOW TABLES / DESC
表数据 INSERT INTO DELETE FROM UPDATE SELECT

综合实战演练

下面是一段连贯的 SQL 脚本,模拟了一个完整的流程。你可以直接复制到你的数据库工具中运行,观察每一步的变化。

sql 复制代码
-- 1. 创建并选中数据库
CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4;
USE test_db;

-- 2. 创建一张商品表
CREATE TABLE product (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    stock INT DEFAULT 0
);

-- 3. 插入两条商品数据
INSERT INTO product (name, price, stock) VALUES ('iPhone 15', 5999.00, 100);
INSERT INTO product (name, price, stock) VALUES ('MacBook Pro', 12999.00, 50);

-- 4. 修改表结构:增加一个"品牌"字段
ALTER TABLE product ADD brand VARCHAR(50) DEFAULT 'Apple' AFTER name;

-- 5. 更新数据:iPhone 15 降价了
UPDATE product SET price = 5499.00 WHERE name = 'iPhone 15';

-- 6. 查询最终结果
SELECT * FROM product;

-- 7. 清理环境(可选)
DROP DATABASE test_db;
相关推荐
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客3 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy5 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2017 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_7 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼8 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川8 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路8 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna9 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白9 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库