Mysql从删库到跑路(2)
文章目录
- Mysql数据管理
- 对数据表中数据进行增删改查
- 增添数据
- 删除数据
- 修改数据
- 查询数据(SQL最重要的语句)
- 单表无条件查询
- 使用WHERE子句实现条件查询
- 总结
Mysql数据管理
对数据表中数据进行增删改查
增添数据
1.插入单行数据
添加单行数据
语法:
INSERT INTO 表名(字段名1,字段名2…) VALUES(值1,值2…);
注意:插入数据时,数据与字段要一一对应
例:向student表中添加新记录,记录为:sno:‘194101’,sname:‘王小明’,ssex:‘男’,sbirthday:‘2001-02-14’,sdept:‘d12001’。

使用insert语句添加记录时,表名后的字段可以与表中定义的字段顺序不一致,他们只需要和values中值的顺序一致即可
也可以省略字段名,但values里面的值要与student表中的字段一一对应
2.插入多行数据
添加多行数据
语法:
INSERT INTO 表名 (字段名1,字段名2…) VALUES(值1,值2…) ,(值1,值2…) ,(值1,值2…) ;
例:向student表中添加3条记录,内容如下(194102,刘星,男),(194103,高火,男)(194104,张苗,女)。

注意:
INSERT语句执行成功后,通过查询语句查看数据是否添加成功;
添加多条记录时,只需要保证VALUES后面跟随的值列表依照字段在表后面的顺序即可;
若不指定字段名,必须为每个字段添加数据,若指定了字段名,只需要为指定的字段添加数据。
删除数据
数据表中数据的删除(DELETE)
语法:
DELETE FROM 表名 [WHERE条件表达式] ;
1.删除全部数据
例:删除sc表中的所有数据
delete from `sc`;
2.删除部分数据
例:删除sc表中sno为’18101’的记录
delete from `sc` where `sno`='18101';
注意:delete语句不包含where语句时,整个表将会被清空,反之,满足条件的将会清空
数据表中数据的删除(TRUNCATE)
语法:
TRUNCATE 表名;
例:删除sc表中的所有数据
truncate `student`;
DELETE和TRUNCATE的区别:
相同点:都能删除数据,都不会删除表结构
不同点:
a.TRUNCATE会重新设置自增列,计数器会归零
b.TRUNCATE不会影响事务
c.用DELETE删除表后,自动增量不会改变,你再次插入数据的时候,它的自增列还是会按照你以前的自增数继续向下加
d.重启Mysql服务,用DELETE删除数据后的数据表会重置自增列,默认存储引擎是INNODB,它是运行在内存中的,没有保存
关于DELETE删除的问题,重启数据库,现象:
1.INNODB引擎:自增列会从1开始(因为它是运行在内存中的,断电既失)
2.MYISAM引擎:会继续从上一个增量开始(因为它是存在于文件中的,数据包含丢失)
修改数据
数据表中数据的修改(UPDATE)
语法:
UPDATE 表名 SET 字段名1=值1[,字段名2=值2,…] [WHERE 条件表达式];
1.修改全部数据
例:将student表中的sbirthday字段全都修改为’2002-3-25’
update `student` set `sbirthday`='2002-3-25';
2.修改部分数据
根据指定条件修改表中的某一条或者某几条记录,需要使用where子句来指定修改记录的条件
例:将student表中sno字段为18101的sname字段改为’刘大壮’
update `student` set `sname`='刘大壮' where `sno`='18101';
若表中有多条记录都满足where子句中的条件,则满足条件的记录都会被修改。
查询数据(SQL最重要的语句)
SELECT语法:
SELECT [DISTINCT] 字段名1[字段名2,…] FROM 表名
[WHERE 条件表达式]
[GROUP BY 字段名 [HAVING 条件表达式]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 记录数];
[ ]为可选项,后面会一个一个讲到的
单表无条件查询
1.查询所有字段
例:查询student表的所有字段
select `sno`,`sname`,`ssex`,`sbirthday`,`sdept` from `student`;
说明:在select语句中的查询字段列表中,字段的顺序是可以改变的,无需按照其表中定义的顺序进行排列。
也可以使用" * "通配符来代替所以字段。
语法:
SELECT * FROM 表名;
例:使用星号"*"通配符查询student表中的所有记录
select * from `student`;
注意:一般情况下,不建议使用星号通配符,因为它获取的数据太多,会降低查询效率
2.查询指定字段
例:查询student表中的sname字段
select `sname` from `student`;
也可以在字段后面加上"AS 别名",显示的时候相应会改变查询列的名称
例:查询student表中的sname字段,添加别名为"姓名"。

注意:这里更改的别名只在显示区有效,并不会更改表中的字段名
3.查询计算结果
select还可以进行数学运算
例:查询2*30+50-11的结果

4.select查询语句加入DISTINCT关键字后,查询结果去重复
例:查询sc表中所有参加考试学生的学号

加入DISTINCT关键字后

5.运用函数查询
例:查询MYSQL系统版本号

6.查看经过运算后的数据信息
例:查询考试成绩+10分后的信息


注意:增加10分只是在显示结果上增加了,并不会修改到表中的数据
使用WHERE子句实现条件查询
1.带关系运算符的查询
MYSQL中常见的关系运算符
| 关系运算符 | 说明 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
例:查询student表中sno字段为18101的学生的姓名

例:查询考试成绩不及格的学生学号

2.带IN关键字的查询
语法:
SELECT 字段名1[,字段名2,…] FROM 表名 WHERE 字段名 [NOT] IN (元素1,元素2,…);
作用:查询在或不在IN指定集合范围中的记录
例:查询学号为194102,194103,194104的记录
例:查询学号不为194102,194103,194104的记录

3.带BETWEEN AND 关键字的查询
语法:
SELECT 字段名1 [,字段名2,…] FROM 表名 WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;
作用:查询字段从值1(起始值)到值2(结束值)的记录
例:查询sno字段从’194101’到’194105’之间的记录

例:查询sno字段不在’194101’到’194105’之间的学生学号和姓名

4.空值查询
语法:
SELECT 字段名1[,字段名2,…] FROM 表名 WHERE 字段名 IS [NOT] NULL;
作用:查询某字段是否为空值的记录
一定要分清什么是空值:
字段为NULL的才是空值,没有NULL的你看着它里面什么都没有,其实还可能会存在空格字符的情况,就不是空值

例:查询student表中sphone字段为空值的记录

例:查询student表中sphone字段不为空值的记录

5.带DISTINCT关键字的查询
语法:
SELECT DISTINCT 字段名 FROM 表名;
作用:查询结果去重复
例:查询sc表中考试不及格的学生记录

例:查询sc表中考试不及格的学生记录(查询结果去重复)

6.带LIKE关键字的查询
语法:
SELECT 字段名1[,字段名2,…] FROM 表名 WHERE 字段名 [NOT] LIKE ‘匹配字符串’;
作用:模糊查询,查询某字段值与 ‘匹配字符串’ 相似的字段
通配符说明
(1)% 通配符(百分号)
说明:可以查询任意多个的字符
例:
M%:表示查询以M开头的任意字符串,如:Mike
%M:表示查询以M结尾的任意字符串,如:ROOM
%m%:表示查询在任意位置包含字母m的所有字符串,如:man,some
(2)_ 通配符(下划线)
说明:查询单个字符,一个下划线代表一个字符
例:
_M:表示查询以任意一个字符开头的,以M结尾的两位字符串,如:AM,PM
H_:表示查询以H开头,后面跟任意一个字符的两位字符串,如:Hi,He
注意:使用_下划线通配符的时候一定要注意,一个下划线仅代表一个字符,要不然会造成查询结果的失效
例:查询student表中sname字段以字符’欧’开头的学生记录

例:查询生源地不是山东省的学生记录
因为山东省可能也会出现在地址字符串的中间,所以使用%M%通配符

例:查询sname字段以"欧"开始,以"娜"结束,中间有两个字符的记录

当用户要查询的字符串本身就含有通配符时,我们可以使用ESCAPE关键字转义字符来进行转义
语法:
SELECT 字段名1[,字段名2,…] FROM 表名 WHERE 字段名 [NOT] LIKE ‘匹配字符串’ [ESCAPE ‘转义字符’];
例:查询"计算机_网络基础"的课程号


7.正则表达式
跟LIKE差不多,可以用来模糊查询,比LIKE功能更强大
语法:
SELECT 字段名1[,字段名2,…] FROM 表名 WHERE 字段名 REGEXP ‘操作符’;
常见的字符匹配选项表
| 选项 | 说明 | 示例 |
|---|---|---|
| ^ | 匹配文本的开始字符 | ^b:匹配以字母b开头的字符串,如:book,big |
| $ | 匹配文本的结束字符 | st$:匹配以st结尾的字符串,如:test,persist |
| . | 匹配任何单个字符 | b.t:匹配b和t之间有一个字符串,如:bit,bat,bite |
| * | 匹配零个或多个在它前面的字符 | *n:匹配字符n前面有任意个字符的字符串,如:abandon,afternoon,fan |
| + | 匹配前面的字符1次或多次 | ba+:匹配以ba开头的字符串,如:bar,battle |
| <字符串> | 匹配包含指定字符串的文本 | fa:字符串至少要包含fa,如:fan,fantastic,fat |
| [字符集合] | 匹配字符集合中的任何一个字符 | [xz]:匹配x或z,如:dizzy,zebra,extra |
| [^] | 匹配不在括号内的任何字符 | [ ^abc]:匹配任何不包含a、b、c的字符串 |
| 字符串{n,} | 匹配单面的字符串至少n次 | b{2,}:匹配两个或更多的b,如bb,bbbb,bbbbb |
| 字符串{m,n} | 匹配前面的字符串至少m次,至多n次,如果n为0,则m为可选参数 | b{2,4}:匹配至少2个b,最多4个b,如:bb,bbb,bbbb |
哈哈是不是有点多,我也没记住,用的时候再一个一个查吧
例:查询saddress字段以’济’开头的记录

例:查询学生电话号码中出现66的记录


查询的时候可以有很多不同的方法都可以查出来你想要的结果,可以多试试不同的方法哈
8.带AND关键字的多条件查询
语法:
SELECT 字段名1 [,字段名2,…] FROM 表名 WHERE 条件表达式1 AND 条件表达式2 […AND 条件表达式n] ;
作用:查询多个条件都要满足的情况,也就是逻辑与&&
例:查询a01课程不及格学生的学号

9.带OR关键字的多条件查询
语法:
SELECT 字段名1 [,字段名2,…] FROM 表名 WHERE 条件表达式1 OR 条件表达式2 […OR 条件表达式n] ;
作用:查询多个条件满足任意一种的情况,也就是逻辑或||
例:查询系部为"电子工程系"或学号小于’194105’的学生记录

总结
这次主要复习了Mysql的增删改查,其实增删改查就只有那几个关键字,记住就好了,最重要的就是查询了,SELECT可以查询出很多东西,像计算结果啊,运用函数啊,查系统变量等等,今天只复习了单表查询,它主要是用WHERE条件语句来查询,WHERE语句里针对不同的查询情况设定了不同的关键字来进行查询,between…and范围查询,like模糊查询,正则表达式,多条件查询等等,多练习几个例子差不多就学会了,加油哦
那就下次见

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
