当前位置: 首页 > news >正文

《MySQL数据库从零搭建到高效管理|表的增删改查(基础)》

目录

引言:

一、表的操作

1.1 创建学生表

 1.2 查看表结构

1.3 删除表

1.4 修改表名

1.5 添加字段

1.6 修改字段

1.7 删除字段

1.8 小结

二、CRUD

2.1 新增(Create)数据

2.2 查询(Retrieve)数据

2.3 修改(Update)数据

2.4 删除(Delete)数据

2.5 小结


引言:

在数据库中,表(Table) 是最基础也最重要的数据结构。然而,许多开发者在初次接触MySQL时,往往只关注SQL查询的编写,却忽视了表操作的重要性。一个设计不当的表结构,可能导致数据冗余、查询性能低下,甚至引发数据一致性问题。

本文将带您深入MySQL表操作的每一个细节,从基础的DDL语句到高级的优化策略,助您构建出高效、稳定、易维护的数据表结构。


一、表的操作

想要操作数据库中的表时,需要先使用该数据库:(以数据库school为例)

use school;

 注释:在 SQL 中可以使用"--空格+描述"来表示注释说明


1.1 创建学生表

create table 表名(
    字段名 字段类型,
    字段名 字段类型,
    字段名 字段类型,
    字段名 字段类型
);

-- 或者
create table 表名(字段名 字段类型,字段名 字段类型,字段名 字段类型,字段名 字段类型);

可以使用 comment 增加字段说明。示例:

create table student(
    id int,
    name varchar(20) comment '姓名',
    gender varchar(20) comment '性别',
    phone varchar(20) comment '电话'
);

常用数据类型: 

  • int:整型
  • decimal(M,D):浮点数类型
  • varchar(size):字符串类型
  • timestamp:日期类型

 1.2 查看表结构

desc 表名;


1.3 删除表

-- 删除student表
drop table student;

-- 如果存在student表,则删除student表
drop table if exists student;

1.4 修改表名

alter table 表名 rename to 新表名;


1.5 添加字段

alter table 表名 add 字段名 字段类型 [约束];


1.6 修改字段

alter table 表名 change 旧字段名 新字段名 字段类型 [约束];


1.7 删除字段

alter table 表名 drop 字段名;

1.8 小结

-- 创建表
create table 表名(字段名 字段类型,字段名 字段类型,字段名 字段类型,字段名 字段类型);

-- 查看库中的表
show tables;

-- 查看表结构
desc 表名;

-- 删除
drop table 表名;

-- 修改表名
alter table 表名 rename to 新表名;

-- 添加字段
alter table 表名 add 字段名 字段类型 [约束];

-- 修改字段
alter table 表名 change 旧字段名 新字段名 字段类型 [约束];

-- 删除字段
alter table 表名 drop 字段名;

二、CRUD

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)

学习表的增删查改的前提是,我们得先有一张表才行。

-- 1.创建数据库school
create database school;

-- 2.使用数据库
use school;

-- 3.建表
create table student(
    id int,
    name varchar(20) comment '姓名',
    gender varchar(20) comment '性别',
    phone varchar(20) comment '电话'
);

2.1 新增(Create)数据

insert into 表名 [(列,列,列,列...)] values(值,值,值,值...);
-- 此处的值,要和列相匹配(列的个数和类型)
-- 带上[ ] 为指定列插入 不带为默认全列插入

单行数据 + 全列插入

insert into student values (1,'刘备','男','112233');
insert into student values (2,'关羽','男','123456');
insert into student values (3,'张飞','男','778833');

多行数据 + 指定列插入:

insert into student (id,name,gender) values
    (4,'吕布','男'),
    (5,'貂蝉','女'),
    (6,'赵云','男');

 


2.2 查询(Retrieve)数据

SELECT
    [DISTINCT] {* | {column [, column] ...} 
    [FROM table_name]
    [WHERE ...]
    [ORDER BY column [ASC | DESC], ...]
    LIMIT ...

示例:

-- 创建考试表
CREATE TABLE exam_result (
 id INT,
 name VARCHAR(20),
 chinese DECIMAL(3,1),
 math DECIMAL(3,1),
 english DECIMAL(3,1)
);

-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
 (1,'唐三藏', 67, 98, 56),
 (2,'孙悟空', 87.5, 78, 77),
 (3,'猪悟能', 88, 98.5, 90),
 (4,'曹孟德', 82, 84, 67),
 (5,'刘玄德', 55.5, 85, 45),
 (6,'孙权', 70, 73, 78.5),
 (7,'宋公明', 75, 65, 30);

全列查询

select * from 表名;

-- 通常情况下不建议使用 * 进行全列查询
-- 1.查询的列越多,意味着要传输的数据量越大
-- 2.可能会影响索引的使用(索引会在后续提到)


 指定列查询

select 列名,列名,列名 from 表名;


查询字段为表达式

-- 查询所有同学的总分(语文 + 数学 + 英语)
select id,name,chinese + math + english from exam_result;


为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称:

select 列/表达式 as 别名 from 表名;


去重查询:DISTINCT

select distinct 列名 from 表名;

排序:ORDER BY

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM 表名 [WHERE ...] ORDER BY 列名 [ASC|DESC];

条件查询:WHERE

比较运算符:

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是TRUE
!=, <>不等于
between a0 and a1范围匹配,[a0, a1],如果 a0 <= values <= a1,返回TRUE
in(a,b,c...)如果是a,b,c...其中的任意一个,返回TRUE
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE
模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符

逻辑运算符:

运算符说明
AND与。多个条件必须都为 TRUE,结果才是 TRUE
OR或。任意一个条件为 TRUE, 结果为 TRUE
NOT非。条件为 TRUE,结果为 FALSE

注意:

  • WHERE条件可以使用表达式,但不能使用别名
  • AND 的优先级高于 OR ,在同时使用时,需要使用小括号 () 包裹优先执行的部分

2.3 修改(Update)数据

update 表名 set 列名 = 值 [WHERE ...];
-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam_result SET chinese = chinese * 2;

-- 将孙悟空同学的数学成绩变更为 80 分
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';


2.4 删除(Delete)数据

delete from 表名 [WHERE ...] [ORDER BY ...];
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = '孙悟空';

-- 删除整张表数据
-- 准备测试表
CREATE TABLE for_delete (
 id INT,
 name VARCHAR(20)
);
-- 插入测试数据
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
-- 删除整表数据
DELETE FROM for_delete;


2.5 小结

  • 新增
    -- 单行插入
    insert into 表名 [(列,列,列,列...)] values(值,值,值,值...);
    
    -- 多行插入
    insert into 表名 (字段1, ... , 字段n) values
        (value1,...),
        (value2,...),
        (value3,...);
  • 查询
    -- 全列查询
    select * from 表
    
    -- 指定列查询
    select 字段1,字段2... from 表
    
    -- 查询表达式字段
    select 字段1 + 100,字段2 + 字段3 from 表
    
    -- 别名
    select 字段1 as 别名1, 字段2 as 别名2 from 表
    
    -- 去重DISTINCT
    select distinct 字段 from 表
    
    -- 排序ORDER BY
    select * from 表 order by 排序字段
    
    -- 条件查询WHERE:
    -- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR (8)NOT
    select * from 表 where 条件
  • 修改
    update 表 set 字段1 = value1, 字段2=value2 ... [where ...];
  • 删除
    delete from 表名 [WHERE ...] [ORDER BY ...];

 积跬步,以致千里

下章预告——> 约束

本专栏内容均以 MySQL 8.0 为案例

相关文章:

  • Linux 安装 Oh My Zsh
  • 机器学习中的激活函数是什么起什么作用
  • 卷积神经网络(CNN)之 EfficientNet
  • C#-使用VisualStudio编译C#工程
  • Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台
  • 【eNSP基础使用教程-1】
  • 【SpringMVC】深入解析使用 Postman 和浏览器模拟将单个与多个参数传递到后端的原理和后端接收参数的过程
  • X86 RouterOS 7.18 设置笔记八:策略路由及DNS劫持
  • 《C语言中的“三元精灵”:条件操作符的魔法与奥秘》
  • X86 RouterOS 7.18 设置笔记十:上海电信IPTV使用msd_lite实现组播转单拨
  • Android 自定义数字键盘实现教程
  • LeetCode - #227 基于 Swift 实现基本计算器
  • TopoJSON 数据介绍与应用案例
  • golang 高性能的 MySQL 数据导出
  • 【算法】双指针、递归与回溯、排序、查找
  • 面向工业与汽车领域的高安全可靠MCU——AS32X601系列芯片解析
  • 大视频背景暗黑风格的wordpress企业主题免费下载
  • 【接口封装】——21、解析Json对象数组的文本块
  • 为什么List、Set集合无法在遍历的时候修改内部元素
  • 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎
  • “典孝急乐批麻蚌赢”:互联网“八字真言”与当代赛博赢学
  • 山东鄄城发生一起交通事故,造成4人死亡、2人受伤
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿
  • 陈宝良 高寿仙 彭勇︱明清社会的皇权、商帮与市井百态
  • 人民日报读者点题·共同关注:今天我们为什么还需要图书馆?