MySQL必知必会笔记

15.聚集函数

 

 

AVG(columnName)不会统计该列值为NULL的列

 

 

 

 

14.数学函数

 

13.使用Date取出datetime中的date

当然,Time(order_time)能取出时间

类似的方法有:Year(datetime),Month(datetime),Day(datetime),Hour(datetime),Minute(datetime),Second(datetime),()

DayofWeek(datetime)返回星期几,DateDiff(datetime1,datetime2)计算两个日期之差 = Day(datetime1)-Day(datetime2);

 

12.算式 AS alias

① 使用加减乘除算术符号:

② 一些现成方法,如now(),curdate(),curtime()。

 

Trim(" abc ")方法:

 

但是,并不是太推荐使用数据库内置函数,这样的移植性不是那么强。

 

11.AS别名(alias):

 

但是注意,只能给一个列或者Concat拼接的结果起别名,不能给两个列的select起别名:

 

 

11.Concat拼接结果:

 

 

 

10.where中使用正则表达式

 

 

 

9.like

① 结合通配符百分号“%”——任意字符出现任意次:

但是注意:

 

 

② 结合通配符下划线“_”——任意字符出现1次:

可以看到,“_om%”要求的是om前面只有一个字母,所以Tom可以匹配上,但是aaaTom匹配不上。

这本资料是基于MySQL 5的,有这么一句:

即city like "Shanghai"是不会返回city刚好为“Shanghai”的记录,而至少我使用的MySQL 8是可以的:

 

 

③ 正则和Like的一个注意点:

 

 

关于通配符,要注意:

8.where字句

① 之前说过的,database或table或column的排序规则会影响到等于和大于小于的结果

② 不等于可以使用“<>”或者“!=

③ 使用where city IS NULL选出NULL值记录(不是使用 = NULL)

因为NULL记录利用Like是取不到的:

④ IN子句:

实现OR的功能:

包含sql子查询:

 

⑤ NOT

NOT可以和where后面任何条件连用,表示取反,特别和IN,BETWEEN,EXIST连用,很简洁。

7.主键默认值不能为NULL

MySQL强烈建议为每一张表设置一份主键。当然也可以不设置,这样非常不安全。

当然,设置为主键只代表数据库保证表中的值唯一,如insert或update一条与已有id相同的记录时,会报错。

但是不代表数据库会自动添加increment属性,这个需要自己手动加上的。这样update就不能改动id,insert一条已有id时并不会报错,因为MySQL会忽略,其实对于id的任何指定值都会忽略,数据库会自己在当前最大的id后面追加一条记录,id++。

 

 

 

 

6.每个数据库内部的表名是唯一的

实际上,由于MySQL不区分大小写,user表和USer表是一样,新建一张已经存在的表将会报错。

 

8.order by + limit获得TopK/BottomK数据:

 

 

5.DESC的单列作用 + 'A'和'a'是一样的。

和distinct相反,desc只对本列起作用,如果需要对两行都进行反序,则需要单独指定:

原因在本来就能够实现,每一列可以拍自己的,如果本列有重复值,右边的列可以在内部再排。

 

MySQL不区分大小写,在排序是默认A和a也是一样的,换句话说,如果表中有若干个相间的A和a,对于他们的order的结果将是不确定的:

但是通过改变数据库的排序规则来改变它,简而言之:在新建database或table或column时,来选择排序方式:

其中,_ci结尾的排序时都是不区分大小的。以_bin和_cs结尾的排序时都是区分大小写的。

不过要注意,如果选了区分大小写的排序规则,则也会影响到where子句中等号,大于等于,小于等于的判断:

将name的排序规则改为:

原始数据和where name =>< "tOm"结果:

 可以看到,此时MySQL认为 Tom  < TOM 没有数据!

(并不是ASCII码顺序:A < a)

 

 

 

 

4.distinct的多列作用

原来的表:

不加任何限制:

对name使用distinct:

对name,id同时使用distinct:

即,只要name,city不是全部一样,则都返回。将name列+city列作为是否distinct的标识。

原因如果只指定一个,则如上图有两个shishi,到底取哪一个呢,取哪个都不科学。甚至对name和city分别加distinct,返回结果该是什么呢?

 

3.从启动数据库(服务端)到看到行信息(记录):

客户端登录:cmd——mysql -u root -p root ;

看数据库:show databases;

进入某个数据库:use dbName;

看这个数据库有哪些表:show tables;

看某个表的域:show columns from tableName;

或者 describe tableName;

看数据库定义信息:show create database dbName;(MySQL 8)

看表定义信息:show create table tableName;(MySQL 8)

 

2.MySQL语句每一行最后需要加分号——";"

 

 

1. 主流的数据库都是CS架构的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值