MySQL表的增删改查(基础)

发布于:2025-06-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

CRUD:

C:Create 新增,在一张表中增加一条数据。

R:Retrieve 检索/查询,在一张表中查询相应的数据和字段。

U:Update 更新,将表中所存在的对应数据进行更新。

D:Delete 删除,删除表中对应数据行。

Create 新增:

1.单行数据+全列插入:

insert into 表名 [字段1,字段2] values (值1,值2);

insert 和into都是插入一条新数据的关键字。

方括号里面的字段就是自己所想要查询的列,可以是多个也可以是一个。

values关键字后面的值,需要按照前面字段名的顺序,设置对应的值。

 我们查询表中的数据,发现我们插入成功。

简写方式:如果我们要全列插入,就不用在表名后面指定插入列名,在values值中按照表中定义的字段顺序设置相应的值即可。

 指定列插入:

insert into 表名 (指定插入的列名 ) values (值);

只插入名字:

 我们只插入名字,没有插入id编号,我们插入的数据行,id列是null,这里我们在建表时,设置未插入则默认是null。

只插入id:

默认值也是null,这里的默认值是可以修改的。

多行插入:

 insert into 表名 [指定列] values(1值),(2值),(3值); 

 问题:一次插入一条数据和一次插入多条数据哪个效率高?

1.执行所有SQL时都会有网络开销

2.写入数据时还会有磁盘IO开销

3.每执行一条SQL语句都会开启一个事务。(事务的开启和关闭都需要消耗系统资源)

答:一次提交多条数据(在一个可控范围之内),比一次提交一条数据效率高一些。

Retrieve(查询):

1.全列查询:

select * from 表名;

select、from是查询语句的关键字。

*表示要查询表中所有的列(通配符)

表名即我们要查询的那个表。

我创建一个新表exam,并插入一些数据,来练习查询语句。

-- 创建考试成绩表
DROP TABLE IF EXISTS exam;
CREATE TABLE exam (
    id bigint,
    name VARCHAR(20),
    chinese DECIMAL(3,1),
    math DECIMAL(3,1),
    english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);

 全列查询结果:

指定列名查询:

 select 列名[,列名].....  from 表名;

下面我只查询id、name、chinese。

我们还可以对结果进行处理,比如我们发现所有同学的语文成绩少了10分。

 取别名as:

 我们发现id,name,chinese对我们英语同学不好的不是很友好,于是我们可以取别名。

我们要用到新的关键字as,在我们要去别名的对象后面加上 as '别名'

 比如我下面将id改成编号,name改成名字,chinese改成语文成绩。

其实as也不是必须加的可以省略。

 去重DISTINCT:

select distinct 列名 from 表名;

应该在那种场景下面使用呢?

我现在查询exam表中的所有的数学成绩:

 但是我们如果只要保留一个的话,就得用distinct去重。

去重成功!

注意:去重时,只要查询结果中所有的列都相同才能去重成功! 

当我插叙id,数学成绩这两列,并去重的话,还能不能去重成功呢?

结果显而易见的失败了,因为去重的前提是,这两行数据的所有列都相同,但是上面数学成绩虽然相同,但是id编号却不同,所以去重失败了。

 排序ORDER BY:

排序规则:

ASC(按照升序排列)

DESC(按照降序排列)

select 列名 from 表名 order by 列名 [ASC/DESC];

 order by :是排序的关键字。

order by后面的列名,就是需要排序的列。

比如语文成绩按照降序排列:

如果没有明确排序规则,则默认是升序排列(强烈建议:加上排序规则)

注意:如果数据里面有null值:

1.不论和什么值进行运算,返回的值都null。

2.null始终被判定为false。

3.在mysql中null就是null,它比任何值都小,所以按照降序排列,它则在最下面。如果按升序排序,它则在最上面。