MySQL表的增删改查(初阶)

发布时间:2023年12月19日

????????CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查(CRUD,create,retrieve,update,delete)数据库的核心模块。

1.?新增(Create)

????????实际上sql中使用insert来往表里插入数据(确保已经选中数据库并创建好相应的表);

Insert into 表名 values(列,列…..);

//这里给出的列的数目和类型与之前创建的表里面的相关信息要匹配。

1.1?单行数据 + 全列插入

????????代码如下:

-- 插入两条记录,table表数量必须和定义表的列的数量及顺序一致
insert into chengyuan values (1,'沈梦瑶');
insert into chengyuan values (1,'袁一琦');

? ? ? ? 结果如下:

? ? ? ???

2、查询(Retrieve)

2.1?单次插入多行数据 + 指定列插入

? ? ? ? 1、一次插入多行

????????在values后面写多组()就可以,代码如下:

//-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
insert into chengyuan values 
(2,'袁一琦'),
(3,'王奕');

????????结果如下:

? ? ? ?

????????2、指定列进行插入,可以进行操作成功。代码如下:

//将成员表的id指定为4的信息插入
 insert into chengyuan (id ) values (4);

????????结果如下:

? ? ? ? ?

? ? ? ? 注意:在控制台中我们可以通过向上和向下的方向键来显示我们上一行命令。

2.2?全列查询

? ? ? ? 操作指令及注意事项如下:

// 通常情况下不建议使用 * 进行全列查询
// 1. 查询的列越多,意味着需要传输的数据量越大;
// 2. 可能会影响到索引的使用。(索引待后面课程讲解)
SELECT * FROM 表名;

? ? ? ? 结果展示:?

? ? ? ?

2.3?指定列查询

? ? ? ? 调整表固定列的参数顺序

????????语法如下:

//指定列的顺序不需要按定义表的顺序来
SELECT  name, id FROM chengyuan;

? ? ? ? 结果展示:

? ? ? ??

2.4?查询字段为表达式

????????语法如下:

//指定列的顺序不需要按定义表的顺序来
SELECT id, id+10,name FROM chengyuan;

? ? ? ? 结果如下:

? ? ? ??

2.5? 设置为别名查询

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

SELECT id,name ,id+100 AS 总分 FROM chengyuan;

? ? ? ? ?结果如下:

? ? ? ??

  1. 当前表达式查询,并没有修改服务器上硬盘中存储的数据本体,只是在查寻结果的基础上进行运算的,得到的是一个临时表。(当这个操作结束,这里的数据就会消散,这里的数据库本体不会发生改变)->select操作不会改硬盘上的原始数据带来改变。
  2. 此处查询出来的临时表,每个列的类型不在受限于原始表。

2.6?去重:DISTINCT

????????使用DISTINCT关键字对某列数据进行去重:

? ? ? ? 1、对一个列使用去重,使用语法如下:

SELECT DISTINCT id FROM chengyuan;

? ? ? ? 结果展示:

? ? ? ? 2、 对多个列使用去重,当两个列都有着相同的数据才会进行合并,否则只有一个列相同,数据不会发生合并,使用语法如下:

SELECT  DISTINCT  name,id FROM chengyuan;

? ? ? ? ?结果展示:

? ? ? ? ??

2.7?排序:ORDER BY

2.7.1 简单的升降序排序

????????语法格式:

// ASC 为升序(从小到大)
// DESC 为降序(从大到小)
// 一般默认为 ASC
	select 列名 from 表名 order by 列名;

????????(注意:order是一个关键字)

????????最后一个列名就是排序的依据(不一定出现在select的列名中,order by也是针对临时表进行排序)

????????如果一个查询语句没有order by,此时查询到的临时表,数据之间的顺序是不可以期望的。(mysql没有承诺一定要保持一种顺序)一定是要使用order by才能够明确制定一个顺序。

????????NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面;

? ? ? ? 操作代码:

1、升序(默认,asc)

? ? ? ? 通过id对于数据信息进行升序排序

select * from chengyuan order by id;

2、降序(desc)

? ? ? ? 通过id对于数据信息进行升序排序

select * from chengyuan order by id desc;

2.7.2?使用表达式及别名排序

????????使用表达式语法:

select id + 100,name,id  from chengyuan order by id desc;

?

? ? ? ? 使用别名:

select id ,name,id +10 newId  from chengyuan order by id desc;

2.7.3??可以对多个字段进行排序,排序优先级随书写顺序?

语法展示:

select * ?from chengyuan order by name,id desc;

? ? ? ? 1、使用字符串name进行排序,但是排序的内容不是按照中文字典进行排的序。

? ? ? ? 2、Order by可以指定多个列来进行排序,在指定多个列的时候,也是有优先级的,前面的列,优先级高,后面的列优先级低。当优先级列的数值相同的时候,才会比较优先级低的列。

2.8?条件查询:WHERE

2.8.1 运算符的介绍

????????比较运算符如下图所示:

? ? ? ? ? ?

????????逻辑运算符:

? ? ? ? ? ? ?

注意事项:

  1. WHERE条件可以使用表达式,但不能使用别名。

  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分案例

2.8.2? 基本查询

//查询id小于3的成员的名字( id< 60 )
SELECT name FROM chengyuan WHERE id < 3;

? ? ? ? 结果如下图所示:

? ? ? ?

2.8.3?AND与OR?

? ? ? ? 语法如下:

//查询id大于1分,且id小于4的成员,
//也可以使用between。。。and的语句使用,详见于后面
SELECT * FROM chengyuan WHERE id > 1 and id < 4;

//查询id小于1分,或id大于3的成员
SELECT * FROM chengyuan WHERE id < 1 or id > 3;


????????结果如下图所示:

2.8.4 范围查询

????????BETWEEN … AND …

?????????语法如下:

//查询id大于1分,且id小于4的成员,
//也可以使用between。。。and的语句使用
SELECT * FROM chengyuan WHERE id between 1 and  3;

? ? ? ? 结果展示:

? ? ? ? IN

????????语法代码:

// 查询id是 1 或者 2 或者 3 的成员
SELECT * FROM chengyuan WHERE id IN (1, 2, 3);


????????结果展示:

2.8.5 模糊查询:LIKE

?代码如下:

?// % 匹配任意多个(包括 0 个)字符
SELECT name FROM chengyuan WHERE name LIKE '王%';-- 匹配到孙悟空、孙权

// _ 匹配严格的一个任意字符
SELECT name FROM chengyuan WHERE name LIKE '王_';-- 匹配到孙权

结果展示:

?2.8.6?NULL 的查询

????????IS [NOT] NULL

? ? ? ? 语法如下:

// 查询  name已知的同学姓名
SELECT * FROM chengyuan WHERE name IS NOT NULL;

// 查询 name未知的同学姓名
SELECT * FROM chengyuan WHERE name IS  NULL;


? ? ? ? 结果展示:

2.9?分页查询

?????LIMIT 关键字的用法:

?????关键字limit,来限制这次请求返回多少个记录(一页里面有几条)

?????分页查询则是最合适的能解决上述问题的方案,分页查询可以限制这一次查询最大查多少个记录。

-- 起始下标为 0

-- 从 0 开始,筛选 2 条结果
SELECT * FROM chengyuan  LIMIT 2;

-- 从 2 开始,筛选 2 条结果
SELECT * FROM chengyuan  LIMIT 2, 2;

-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT * FROM chengyuan  LIMIT 2,  OFFSET 2;

? ? ? ? 结果如下:

3. 修改(Update)?

????????update的操作都不是临时表,都是改为硬盘数据了,且Update也是一个危险的操作,sql没有相关的撤回操作。(无论是备份,还是恢复,都是有成本的,因为数据库里面数据很多,同时再恢复数据库的时候,数据库无法给外界提供服务,相当于数据库宕机)。

? ? ? ? 语法格式:

Update 表名 set 列名 = 值 where 条件;

? ? ? ? 语法代码:

// 将zhoushiyu的id变更为 0 
UPDATE chengyuan SET id = 0 WHERE name = 'zhoushiyu';

-- 将id变为 0的成员改为曾艳芬
UPDATE chengyuan SET name = '曾艳芬' WHERE id = 0;

? ? ? ? ?操作结果:

where 条件:指的是修改哪一行?

? ? ? ? 我们进行修改,要定位到行和列在进行修改。如果不写条件,就是针对所有的行和列。

4. 删除(Delete)

????????Delete from 表名 where 条件、order by 、limit;(把条件匹配符合要求的记录给删除掉)

//删除id = 2 的袁一琦这一行的chengyuanbiao
delete from chengyuan where id = 2;

? ? ? ? 结果展示:

????????Drop table是吧表本身和表里的数据都给删除了;

????????Delete只是把表里的数据删除了。

ps:本次的内容就到这里了,如果大家感兴趣的话,就请一键三连!!!

文章来源:https://blog.csdn.net/2202_76101487/article/details/135073496
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。