MySQL基础探秘2

上次讲到的是对数据库和表的一些基础操作,像是创建,删除,简单的查看之类的。

那么今天,我将分享的是,对于表的操作,更深一层的。

那么对表的操作,无非就是我们常说的的增删改查。

那么什么又是增删改查呢?

增:create

删:delete

改:update

查:retrieve

值得注意的是,这里的查、增,只是英文上的表诉,而我们的实际表的操作的话,查:select。

以及insert

ok,我们先从这个新增开始

新增

语法:insert into 表名 values(列,列,列);

比如我新建了一个表

现在我往里面插入一条数据:

这显示成功添加了,我们可以暂时使用这个select 命令进行查讯,后面将会有详细的说明

使用select

值得注意的是,如果这里的name没有正确显示出来,多半是创建数据库的时候没指定正确的字符集

一般们指定是utf-8和gbk

接着我们看下这个有意思的插入

第一列不是int类型吗?第二列不是字符串类型嘛?为什么插入的时候,我写反了,也可以正确插入呢?

这是因为MySQL中,当我们用字符串来添加int的属性时,字符串会尝试自动转换int,同理,

当我们的用int来添加字符串的属性时,字符串会尝试自动转换为字符串。

而上述的转换,称为隐式转换。

这里涉及到一个点

支持隐式类型转换的,称为“弱类型系统”

不太支持隐式类型的,称为:“强类型系统”

弱类型呢,是在运行时检查的,强类型呢,是在编译时检查的。

ok,回归主题。

insert操作还可以指定列插入

指定列插入:

语法:insert into 表名(列,列……)values(值,值,值);

比如,我按照上面的那个表,指定商品和价格插入

很显然,当我们有些列未指定的时候,数据库会自动填充为null。

上面看到,指定列,插入的时候,可以指定多个列,可以联想到,insert 操作也可以进行一次性插入多个,提升效率

一次性插入多行

语法:insert into 表名 values(值),(值),(值);

例子:

有个问题?为什么有些使用一次性插入多个数据呢?

这里要提到MySQL是一个客户端——服务器结构的程序!

所以,我们创建多条数据时,一条条去创建,交互次数多,会增加MySQL的开销。

如若,我们一次性插入多个数据,有助于提高效率,除非数据差异过大,那么会有些明显的额影响。

insert 操作插入时间这个操作,提供了一个方法来自动填充数据。

方法(此例子)insert into artitle (create_date) values(now());

例子

ok,新增操作暂时介绍就这么些,总结一下:直接性的插入、指定列插入、一次性插入多个数据、插入时间。

那么接下来就是查询操作

查询

关键词呢就是:select

第一个操作

全列查询

语法:select * from 表名;

值得注意的是:

1.*是指通配符,可以代指所有列的意思

2.select * 是一个很危险的操作,因为我们当前所用的表,内容少,如若我们进行查询的表非常大,例如百亿千亿的数据量,就会触发大量的硬盘和网络上的I/O,可能会导致把宽带都占满,当其他客户进行查询的时候,就无法正常进行了。

指定列查询

语法:select 列名,列名…… from 表名;

查询时指定表达式

语法 :select 列名(加减乘除)数值,列名(加减乘除)数值,from 表名

值得注意的是,这些查询时指定表达式,出来的结果只是会储存在临时表中,对原有数据不产生影响。

当然,我们还可以引入多个列进行运算

例子:

我这里有一个学生表,然后,我们进行了语文、数学和英语成绩的相加。

但我们发现相加那一列里,表名有点长,那么又什么办法进行缩短它呢?

那就自然引入了as关键字

表达式取别名

语法:select 表达式 as 别名 from 表名;

例子:

当然,这个as也是可以省略的:

但是建议以后不使用,容易引起歧异,对代码的可读性有一定影响。

select操作还支持去重查询

去重查询

语法:select distinct 列名 from 表名;

例子:

select 操作还有一个较为重要的操作——排序操作

排序查询

语法:select * from 表名 order by 列 关键字

此处,我这里并没有进行关键字的填入,但也可以看到,Chinese列中也对其进行排序了

但值得注意的是,这是数据库中对其默认的升序排序了,

但是,如果没有指定结果集的顺序,数据库对其是不会做出任何承若的,所以建议是包含排序关键字。而且当有些行中的数值是相同的时候,它们结果也是不能进行保证。

比如升序的关键字:asc

降序排序关键字:desc

当然,order by也是可以支持多个列进行排序的

例子:

这里要说明的是这写结果是存放在临时表的,不对原来的数据产生影响。

还有,多列进行排序的话,是按照math排序完,然后再到Chinese,如若math相同

那么再按照Chinese进行降序排序。

ok,结束了排序查询,还有一个重要的条件查询。

接触语法之前,先看看这个表

语法:select 列名 from 表名 where 条件;

例子:查英语少于60分的同学

例子:查询语文分数大于数学分数

例子:查询总分低于200分的。

那要是给总分起个别名,用别名再去查询呢?

很遗憾,MySQL不支持这样的操作,会报错

有一个这样的解释:

1.遍历表,取出每一行

2.把当前行,带入到where条件,根据条件的真假决定这一行是否要查询出来

3.再根据select 后面写的列名/表达式,进行选择列计算

4.order by 进行排序。

例子:语文成绩大于八十分并且英语成绩也大于80分

例子:语文成绩大于80或者数学成绩大于80

值得注意的是,如果多个and和or,建议使用括号括起来。

例子:语文成绩在80-90

like模糊查询

like模糊查询,不要完全相等,只需要满足一定条件就行了。

%:匹配0个或者任意个字符

_:匹配1个特定的字符

首先我先插入几个数据先

%匹配:

接着来查询,以孙开头的数据

结尾为孙的名字

中间为孙的名字

_匹配

匹配任意一个字符

null查询

不要直接使用null查询,因为null与什么运算都是null。

例如

会显示为空

要使用安全的比较

或者

在 select* 中,如果一次性查询太多数据,可能会导致服务器挂掉,

所以更为稳妥的做法是采用数据库提供的分页查询

分页查询

语法:select 列名 from 表名 limit N;

例子:

当然,我们的limit 还可以搭配 offset进行使用

offset的意思是,从下标为几这样的地方开始算起

比如:

limit 还可以省略offset 操作,也可以达到以上效果。

比如:

这种写法有时候分不清3,5代表什么意思。

所以不建议使用,可读性较差。

查询操作暂且这么多,那么查询完后,还有个改!

修改

关键词是update

这个东西就是在改硬盘的数据了,而且是持久化的。

语法:update 表名 set 列名=值

还可以搭配条件进行使用

举个例子:

将孙悟空的数学成绩改为80;

值得注意的是,如若不搭配任何条件,仅将某列设置为一个数值,那么将会修改这整列数值。

非常危险!

修改这个挺简单的,那么最后说说这个删吧。

删除

关键词:delete

语法:delete from 表名 where 条件

注意添加条件,会使整个表的内容进行删除。

举个例子,把id=null的值进行删除

ok,删除也讲到这里。

那么一些数据的基础操作也讲到这里了。

完!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值