目录
[1.1 创建表的基本语法](#1.1 创建表的基本语法)
[1.2 MySQL常用数据类型详解](#1.2 MySQL常用数据类型详解)
[1.3 创建表实战练习](#1.3 创建表实战练习)
[2.1 常用的修改表操作](#2.1 常用的修改表操作)
[4.1 插入数据(INSERT)](#4.1 插入数据(INSERT))
[4.2 更新数据(UPDATE)](#4.2 更新数据(UPDATE))
[4.3 删除数据(DELETE)](#4.3 删除数据(DELETE))
[4.4 查询数据(SELECT)------最常用的操作](#4.4 查询数据(SELECT)——最常用的操作)
[5.1 综合查询练习](#5.1 综合查询练习)
[5.2 实用小技巧](#5.2 实用小技巧)
前言
在之前的文章中,我们已经了解了MySQL的三层结构和数据库的基本操作。掌握了数据库的基础之后,我们要进入更重要的学习阶段------表和数据的操作。本篇将详细讲解如何创建、修改、删除表,以及如何对表中的数据进行增删改查,这些都是数据库操作中最核心、最常用的技能。
正文
一、创建表:定义数据的"骨架"
1.1 创建表的基本语法
创建表就像为数据搭建一个框架,需要明确每个字段的名称、类型和约束。
sql
-- 创建用户表
CREATE TABLE `user` (
id INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
birthday DATE
) CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

我们这样就有了user表。
同样,我们也可以这样创建。
语法要点:
CREATE TABLE是创建表的关键字
表名建议用反引号括起来(尤其包含关键字时)
每个字段由字段名、数据类型、约束组成
最后可以指定字符集、校对规则和存储引擎
1.2 MySQL常用数据类型详解
数值类型
整数类型:
sql
-- TINYINT: 1字节,有符号范围-128~127,无符号0~255
CREATE TABLE t3 (id TINYINT); -- 有符号
CREATE TABLE t4 (id TINYINT UNSIGNED); -- 无符号
-- 插入数据验证
INSERT INTO t3 VALUES(127); -- 成功
INSERT INTO t4 VALUES(255); -- 成功

BIT类型:
sql
-- BIT(M): M取值范围1~64
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(255);
SELECT * FROM t05; -- 以二进制显示

小数类型:
sql
-- FLOAT, DOUBLE, DECIMAL
CREATE TABLE t06 (
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20) #其中,前面的数为大小,后面的为精度
);
-- DECIMAL精度更高,适合存储精确数值
由于都是很容易的东西,我这两部分就不select了
字符串类型
sql
-- CHAR(固定长度) 和 VARCHAR(可变长度)
CREATE TABLE t09 (`name` CHAR(255)); -- 固定占255字符
CREATE TABLE t10 (`name` VARCHAR(32766)) CHARSET gbk; -- 最大长度与字符集有关
-- 大文本类型
CREATE TABLE t13(
content TEXT, -- 约65KB
content2 MEDIUMTEXT, -- 约16MB
content3 LONGTEXT -- 约4GB
);
重要区别:
CHAR(4):固定分配4个字符空间
VARCHAR(4):实际使用空间根据内容变化
UTF8编码下,VARCHAR最大约21844字符
日期类型
sql
CREATE TABLE t14 (
birthday DATE, -- 年月日
job_time DATETIME, -- 年月日时分秒
login_time TIMESTAMP -- 时间戳,可自动更新
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
1.3 创建表实战练习
让我们创建一个员工表,包含各种数据类型:
sql
CREATE TABLE `emp` (
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entry_date DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT
) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
-- 插入测试数据
INSERT INTO `emp` VALUES(
100,
'小妖怪',
'男',
'2000-11-11',
'2010-11-10 11:11:11',
'巡山的',
3000,
'大王叫我来巡山'
);
运行结果如下
二、修改表结构:灵活调整数据框架
2.1 常用的修改表操作
实际开发中,经常需要调整表结构,使用ALTER TABLE语句:
sql
-- 1. 添加新列(在resume后添加image列)
ALTER TABLE emp
ADD image VARCHAR(32) NOT NULL DEFAULT '' AFTER resume;
-- 2. 修改列的数据类型
ALTER TABLE emp
MODIFY job VARCHAR(60) NOT NULL DEFAULT '';
-- 3. 删除列
ALTER TABLE emp
DROP sex;
-- 4. 修改列名
ALTER TABLE emp
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT '';
-- 5. 修改表名
RENAME TABLE emp TO employee;
-- 6. 修改表的字符集
ALTER TABLE employee CHARACTER SET utf8;
修改结果如图


三、删除表:谨慎操作!
删除表会同时删除表中的所有数据,务必谨慎!
sql
-- 删除表
DROP TABLE employee;
-- 更安全的写法(表不存在时不会报错)
DROP TABLE IF EXISTS employee;
四、数据的CRUD操作
4.1 插入数据(INSERT)
插入数据是向表中添加记录的基本操作:
sql
-- 创建商品表
CREATE TABLE `goods` (
id INT,
goods_name VARCHAR(10),
price DOUBLE NOT NULL DEFAULT 100
);
-- 插入数据的几种方式
-- 1. 指定列名插入
INSERT INTO `goods` (id, goods_name, price)
VALUES(10, '华为手机', 2000);
-- 2. 插入多条数据
INSERT INTO `goods` (id, goods_name, price)
VALUES(20, '苹果手机', 3000),
(30, '小米手机', 1500);
-- 3. 不指定列名(需为所有列提供值)
INSERT INTO `goods` VALUES(40, '三星手机', 2800);
-- 4. 插入NULL值
INSERT INTO `goods` (id, goods_name, price)
VALUES(50, '测试手机', NULL);

INSERT注意事项:
-
数据应与字段类型匹配
-
数据的长度应在规定范围内
-
值的位置与列的顺序对应
-
字符和日期用单引号括起来
-
可插入NULL值(如果字段允许)
4.2 更新数据(UPDATE)
更新数据用于修改已有记录:
sql
-- 1. 更新所有记录的薪水
UPDATE employee SET salary = 5000;
-- 2. 更新特定记录的薪水
UPDATE employee
SET salary = 3000
WHERE user_name = '小妖怪';
-- 3. 在原有基础上增加薪水
UPDATE employee
SET salary = salary + 1000
WHERE user_name = '老妖怪';
-- 4. 同时更新多个字段
UPDATE employee
SET salary = salary + 1000,
job = '出主意的'
WHERE user_name = '老妖怪';
在这之前我们得根据之前修改的写一个老妖怪的数据

**重要提示:** 一定要使用WHERE条件,否则会更新所有记录!
4.3 删除数据(DELETE)
删除数据要特别小心,尤其是没有WHERE条件时:
sql
-- 1. 删除特定记录
DELETE FROM employee
WHERE user_name = '老妖怪';
-- 2. 删除所有记录(危险操作!)
DELETE FROM employee;
-- 3. 删除某列的值(用UPDATE设为NULL)
UPDATE employee
SET job = NULL
WHERE user_name = '老妖怪';
DELETE与DROP的区别:
DELETE:删除表中的数据,表结构还在
DROP:删除整个表,包括表结构和数据
4.4 查询数据(SELECT)------最常用的操作
基本查询
sql
-- 创建学生表用于演示
CREATE TABLE student(
id INT NOT NULL DEFAULT 1,
NAME VARCHAR(20) NOT NULL DEFAULT '',
chinese FLOAT NOT NULL DEFAULT 0.0,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0
);
-- 插入测试数据
INSERT INTO student VALUES(1,'刘备',89,78,90);
INSERT INTO student VALUES(2,'张飞',67,98,56);
INSERT INTO student VALUES(3,'宋江',87,78,77);
INSERT INTO student VALUES(4,'关羽',88,98,90);
INSERT INTO student VALUES(5,'赵云',82,84,67);
INSERT INTO student VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student VALUES(7,'刘禹锡',65,24,87);
查询示例
sql
-- 1. 查询所有列
SELECT * FROM student;
-- 2. 查询特定列
SELECT `name`, english FROM student;
-- 3. 去重查询
SELECT DISTINCT english FROM student; -- 去除重复的英语成绩
-- 4. 使用表达式和别名
SELECT `name`, (chinese + english + math) AS total_score FROM student;
SELECT `name`, (chinese + english + math + 10) AS '总分加10' FROM student;
-- 5. WHERE条件查询
-- 查询姓名为赵云的学生
SELECT * FROM student WHERE `name` = '赵云';
-- 查询英语大于90分的学生
SELECT * FROM student WHERE english > 90;
-- 查询总分大于200分的学生
SELECT * FROM student WHERE (chinese + english + math) > 200;
-- 查询数学大于60且id大于4的学生
SELECT * FROM student WHERE math > 60 AND id > 4;
-- 模糊查询:姓刘的学生
SELECT * FROM student WHERE `name` LIKE '刘%';
-- 范围查询
SELECT * FROM student WHERE english BETWEEN 80 AND 90; -- 闭区间[80, 90]
-- IN查询
SELECT * FROM student WHERE math IN (89, 90, 91);
-- 6. 排序查询
-- 数学成绩升序
SELECT * FROM student ORDER BY math;
-- 总分降序
SELECT `name`, (chinese + english + math) AS total_score
FROM student
ORDER BY total_score DESC;
-- 条件+排序:姓刘的学生按总分升序
SELECT `name`, (chinese + english + math) AS total_score
FROM student
WHERE `name` LIKE '刘%'
ORDER BY total_score;
运行结果:
1.
2.
3.
4.其中一个
其他条件大家可以自己试试看
五、综合练习与技巧
5.1 综合查询练习
sql
-- 查询总分大于200分,且数学成绩小于语文成绩,且姓赵的学生
SELECT * FROM student
WHERE (chinese + english + math) > 200
AND math < chinese
AND `name` LIKE '赵%';
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student
WHERE english > chinese;
5.2 实用小技巧
-
批量插入 :使用
INSERT INTO ... VALUES (), (), ()提高效率 -
使用别名:让查询结果更易读
-
事务处理:重要操作使用事务保证数据一致性
-
备份数据:操作前先备份,特别是DELETE和UPDATE操作
总结
通过本文的学习,我们掌握了MySQL中表和数据操作的核心技能:
-
创建表:理解不同数据类型的特点和应用场景
-
修改表:使用ALTER TABLE灵活调整表结构
-
数据操作:
-
INSERT:添加数据
-
UPDATE:更新数据(注意WHERE条件)
-
DELETE:删除数据(谨慎使用)
-
SELECT:查询数据(最常用)
-
-
WHERE条件:精确筛选所需数据
-
ORDER BY:对结果进行排序
给初学者的建议:
-
创建表时要深思熟虑,考虑未来的扩展性
-
数据操作前先备份,特别是生产环境
-
UPDATE和DELETE一定要带上WHERE条件
-
多使用SELECT查询验证结果
-
通过图形化工具和命令行结合学习,事半功倍
数据库操作需要大量练习才能真正掌握,建议大家在本地环境中多动手实践,创建不同的表,尝试各种查询条件,这样才能在实际工作中游刃有余。
致谢
希望本文能帮助大家在MySQL的学习道路上更进一步。如果文章中有任何错误或不清晰的地方,欢迎在评论区指出,我们一起交流学习!