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

《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 为案例


http://www.kler.cn/a/585989.html

相关文章:

  • STM32与HAL库开发实战:深入探索ESP8266的多种工作模式
  • 46. HarmonyOS NEXT 登录模块开发教程(一):模态窗口登录概述
  • Flask使用Blueprint注册管理路由
  • 搭建基于chatgpt的问答系统
  • Python 推导式详解
  • MySQL学习笔记(4)三大日志
  • 基于Matlab设计GUI图像处理交互界面
  • 计算机网络基础:网络安全基础
  • python-leetcode-删掉一个元素以后全为 1 的最长子数组
  • 将docker images导入crictl images
  • 基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析
  • uniapp页面跳转带参数获取,需要注意在小程序和web下是不一样的
  • 网络爬虫相关
  • DeepLabv3+改进10:在主干网络中添加LSKBlock|动态调整其大型空间感受野,助力小目标识别
  • element-plus中Autocomplete自动补全输入框组件的使用
  • 硬件工程师入门教程(四)
  • linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序
  • 解决Docker Desktop中ext4.vhdx文件过大的问题
  • 【Java 进阶实战】一 学习成果检验
  • 《大语言模型》学习笔记(一)