MySql的优点
- 代码开源,一般可以免费使用
- 性能搞,执行速度快
- 简单,很容易安装或卸载
MySQL的数据管理软件是c/s结构的,底层是tcp/ip协议程序
本机命令行登录:mysql -u用户名 -p密码
链接其他电脑的数据库:mysql -h地址 -P端口号 -u用户名 -p密码
常用sql命令
-
show databases; 查看有哪些数据库
- information_schema: 数据库里是服务端基本的一些数据,没事别乱搞
- mysql:存放了自己的用户信息,表信息,时区信息等等
- performance_schema:是一些性能的分析
- test:默认空的,给你自己操作的,随你搞,删掉都可以
-
use 数据库名; 使用数据库进行增删改查等操作,就是进入到该数据库
-
show tables; 查看数据库里表
-
select database();查看当前在哪个数据库
-
desc 表名; 查看该表的描述,就是看它的字段或者属性以及各个字段的约束
-
set names 值(列如,utf8);设置客服端的字符集 (windows的命令行一般默认为gbk)
-
exit;退出
-
create table 表名(
字段名 数据类型 约束,
…
);
sql的语法注意事项
- 不区分大小写(库名,表名,字段名建议大写,其他的关键值建议小写)
- 也有注释,#单行注释,–也表示单行注释(但是–后面必须跟一个空格,否则出错),还有一个多行注释给java的一样
- 如果你写的语句太长,可以换行写,但是不要卡在一个字符上换行
sql语句
sql语句在所有的关系型数据库都差不多大同小异,但也有可能会存在每个数据库它独有的语句或语法。列如,LIMIT语句是MySql独有的语句。
sql语句的分类
- DDL:数据定义语言,用来定义数据库对象的,就是建表,建库子类的语句
- DML:数据操作语言,用来定义数据库记录(数据),就是数据库的数据进行增删改的操作的语句
- DCL:数据控制语言,用来定义访问权限和安全级别,一般人用不到这种语句(DBA用的)
- TCL:事物控制语言
- DQL:数据查询语言,用来查询记录(数据)就是select
DQL语句
基础查询语句
select 查询列表 from 表面;
查询列表可以是字段、表达式、常量、函数等
举列:
-
查询常量
SELECT 100;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e7wKus3p-1620787651039)(MySql.assets/1618670151942.png)]
-
查询表达式
SELECT 100%3;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fl7xgsFX-1620787651043)(MySql.assets/1618670125180.png)] -
查询单个字段
SELECT username FROM table;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6an91yBD-1620787651043)(MySql.assets/1618670379359.png)]
-
查询函数 (查看当前数据库名)
SELECT DATABASE();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RPqafgz-1620787651045)(MySql.assets/1618670413826.png)]
查询的结果集是一个虚拟表
查询的顺序是:先看库里有没有该表,如果有,再去表里筛选出列
mysql里的+号作用
-
两个操作数都是数值,就正常运算
-
其中有一个为字符型,将字符型强制转换为数值型,如果无法转换,则直接当0处理
-
其中一个为null,结果为null
concat(),将字符连接成一个字符,如果其中有参数为null,就会把结果赋为null
ifnull(one,re),判断one字段是否为null,如果是就用re当它的值,不是null就用本身的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnsditF1-1620787651047)(MySql.assets/1618802256368.png)]
distinct 去重关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcpPYeDF-1620787651048)(MySql.assets/1618802017334.png)]
查看表结构
- DESC 表名;
- SHOW COLUMNS FROM 表名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AumxRw0M-1620787651049)(MySql.assets/1618802290847.png)]
起别名
- 可以使用as关键字(原名 as 别名)
- 可以使用空格(原名 别名)
条件查询
SELECT 查询列表 FROM 表名 WHERE 条件;
执行顺序:先走from子句,再走where子句,最后select子句
- 按关系表达式筛选:关系运算符 < ,> ,>=, <= , != , <>,<=>
- 按逻辑表达式筛选:&&,||,!,and,or, not
- 模糊查询:like,in,between,is null
=与is的区别
=只能判断普通的内容,is只能判断NULL值
还有一个 <=>,这个叫安全等于,普通内容和NULL值都可以判断
排序查询
SELECT 查询列表 FROM 表名 WHERE 条件 ORDER BY 排序列表
执行顺序:先走from子句,再where子句,再select子句,最后order by子句
排序列表可以是单个字段,多个字段,表达式,函数,列数(或列名),以及以上的组合。(多个字段表示,按顺序一个一个条件排,就是先按年龄排,年龄相同时再按工资)
升序(默认),同追加asc,降序,追加desc
length(str), 计算字节长度
常见函数
字符函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0sFAtPf-1620787651050)(MySql.assets/1618802982200.png)]
concat():拼接函数
length(): 字节长度函数
char_length():获取字符长度
substring()所截取的字符串,开始位置,截取长度): 截取子串,位置从1开始算,截取长度可以不写,就是截取到结尾
instr(str1,str2):获取str2的最开始出现位置
trim(str1 FROM str2):去掉str2前后str1字符
lpad(str1,number,str2):在str1的左边填充str2,但是填充后的长度为number,
rpad(s ,n ,s2):在右边填充
upper() 转换大写
lower() 转换小写
strcmp(str,str) 比较字符串大小,有点类似java String的compareto()
LEFT /RIGHT:截取长度(str,length)
数学函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YKuNzRcg-1620787651053)(MySql.assets/1618803048226.png)]
abs():绝对值
cell():向上取整,就是天花板函数,但是是返回>=参数的最小整数,注意=
floor():向下取整,就是地板函数,返回<=参数的最大整数,
round(number,length):四舍五入函数,length是几位小数,可以不写,默认0
mod():取余,被除数的符号为余数的符号
truncate(x,d):截取,保留小数点后d位
日期函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E1wMCHQs-1620787651053)(MySql.assets/1618803063187.png)]
now():获取当前日期,会包含时间
curdate():获取当前日期,不含时间
curtime():获取当前时间
datediff():计算两个日期的差,是那前一个参数减第二个参数,返回值为天数
date_format():第一个参数为日期,第二个为格式字符串,具体如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SC6z8Yx4-1620787651055)(MySql.assets/image-20210326101848795.png)]
举列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qF1CBrAb-1620787651057)(MySql.assets/image-20210326102047677.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifTA910t-1620787651058)(MySql.assets/image-20210326102122176.png)]
str_to_date():按指定的格式解析字符串为日期,是date_forma()的反过来
如[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kPLr3opU-1620787651059)(MySql.assets/image-20210326102350817.png)]
流程控制函数
if(条件,表达式1,表达式2):如果条件为真,做表达式1,否则表达式2
-
情况1:类似switch语句,可以实现等值判断
case 表达式
when 值1 then 结果1
when 值2 then 结果2
…
else 结果n
end