MySQL学习-4种语言
在MySQL数据库中存在4种常见的语言,它们分别是:
- 数据定义语言:DDL,data defination language
- 数据操作语言:DML,data manipulation language
- 数据控制语言:DCL,data control language
- 数据查询语言:DQL,data query language
在接下来的内容中,本文将会对这4种语言进行详细地讲解:
进入数据库
在网上安装MySQL
数据库的教程很多,不阐述安装过程。在讲解4种数据库之前,先看看怎么进入到数据库中,以macOS
系统为例:
方式1
第一种是通过密码明文方式进入数据库中:
1 | mysql -uroot -p123456 # 假设用户名是root,密码是123456 |
这种方式的好处是我们能够看到自己的用户名和密码,方便检查;缺点就是在系统中暴露了我们的密码,不够安全
方式2
第二种是通过密码暗文方式进入数据库
1 | mysql -uroot -p # 按下回车再输入密码 |
这种方式后面有跟上用户名,但是密码需要再输入,而且看不到我们用户的内容。
优点就是安全,保证密码不泄露;缺点就是看不到输入的内容,我们可能输入错误的密码也不方便检查,需要我们很有把握保证我们输入正确的密码。笔者一般使用的此种方式
数据定义语言
数据定义语言指的是:data defination language
,简称是DDL
。
DDL
的主要作用是创建数据库,以及对库和表的结构进行删除和修改等基本操作,下面是针对库表的操作命令进行解释
全部命令
1 | -- 1、数据库操作 |
创建表
1 | create table user( id int(10) unsigned not null auto_increment comment "user_id", -- id作为主键 |
查看表结构
查看上面创建的表结构
1 | desc user; -- 查看创建表的结构 |
显示创建表的SQL语句
1 | show create table user; |
字段操作
字段操作的关键词是alter
,我们先选中需要操作的表,常见的操作有:
modify
:修改change
:改变名字add
:添加字段,默认是在末尾添加,也可以指定位置
1 | -- 修改字段信息 |
比如我们添加了字段password
之后的建表语句:
数据库操作语言
数据操作语言指的是DML,data manipulation language
。主要是对数据库中的表记录进行操作的语言,包含往表中插入数据、表中数据的更新、表的删除等
插入数据
我们往上面创建的user
表中插入数据,我们可以只插入部分字段,未插入的则为NULL
;如果是时间则默认为当前时间:
1 | -- 将字段名和字段的值一一对应起来,可以只插入部分字段 |
下面是插入全部的字段信息:
1 | -- 包含所有字段信息 |
几个需要注意的地方:
- 字符串字段必须用引号括起来
- 允许只插入部分字段,则未插入的字段显示为
NULL
- 可以省去字段名,直接插入数据的具体值,但是此时需要加上自增的
id
字段,而且必须填写所有的字段信息,不能只添加部分字段数据
数据更新
数据更新update
使用最多的是where
语句,指定某个条件下执行;如果不加where
,则所有的字段都会被更改,需要慎重考虑此操作
- 指定
id
号 - 指定字段的具体值
- 字段允许有多个,用逗号隔开
1 | mysql> update user set name="nangying" where id=6; -- 通过id指定 |
删除
表的删除有两种操作:
delete
:删除表或者删除表中的某条记录,插入数据从上一次结束
的id
号开始继续插入;删除的记录仍存在truncate
:清空表,重新插入数据id
从1开始;不占内存空间
两种方式都可以直接删除表:
1 | delete table user; |
假设现在我们的表中存在如下的4条记录,来演示上面两种操作的区别:
1、首先是delete
操作,我们删除其中id=8
的记录:
1 | delete from user where id=8; -- 删除某条记录 |
接下来我们尝试插入新的数据(没有指定id号),生成新的数据之后我们发现:系统分配的id号是11,也就是说是从当前最大的id号开始往后生成的。
2、我们在看看truncate
的操作
truncate
是删除整个表,相当于是清空了整个表,之后生成的数据的编号是从id=1
开始
再次插入数据之后id
号默认从1
开始:
数据控制语言
数据控制语言指的是data control language
,简称是DCL
。主要是对数据库中的登录和用户的权限进行控制的语言。
主要命令
下面是DCL
语言中涉及到的主要命令:
1 | -- 1、查看数据库中的用户及信息 |
注意点
在进行DCL
语言操作的时候需要注意:
MySQL
服务默认的端口号是3306
;- 撤销权限必须通过root账户来解决
- 将所有权限授权给某个数据库必须谨慎操作
DCL
语言修改之后都要刷新权限,重启MySQL
服务才会生效
关于MySQL
的相关权限和配置文件详细解析,请参考文章:https://www.cnblogs.com/langdashu/p/5889352.html
数据查询语言
数据查询语言指的是:data query language,简称是
DQL。查询语言在工作中其实使用的是最为频繁,查询的方式多种多样,也有很多的技巧。在本文中主要讲解常见的
DQL`语言操作。后续会针对具体的技巧进行详细讲解
基本查询
1、查询全部信息:
1 | select * from user; |
2、通过指定的字段信息来查询
1 | select * from user where id=2; |
3、查询指定字段信息
1 | select name,age from user; |
关键字in
1 | select * from user where id in (1,2,3); |
关键词between…and….
关键词between…and…
的作用是限定字段的取值,头尾两个取值都是包含的
1 | select * from user where age between 20 and 35; |
关键词distinct
关键词distinct
的作用是去重之后查出数据,相当于是过滤查询数据:
关键词concat
关键词语concat
的作用是连接查询显示数据:
- 直接使用系统默认的连接方式,将原来的字段通过下划线进行连接
- 使用
concat...as...
,as
后面自己指定连接的新字段名 - 带上连接符号的查询
concat_ws("+", 列名1,列名2)
;其中"+"就是指定连接符
我们也是可以使用连接符:
1 | select concat_ws("+",name,age) as name_age from user; -- 指定连接符,同时指定别名 |
模糊查询like
模糊查询的关键字是like
,中文翻译成像
,使用的符号是%
分为3种情况:
- 左匹配
- 右匹配
- 左右匹配
排序查询
对表中的记录进行升序asc
或者降序desc
的排列,默认的是升序asc
,同时需要使用order by
关键字:
- 升序:
asc
,默认情况 - 降序:
desc
查询年龄age字段,默认是升序的情况:
指定降序的排列:
聚合查询
聚合查询使用的是聚合函数:
avg()
:求均值sum()
:求和max()
:最大值min()
:最小值count()
:求个数,统计值
1 | select count(*) from user; -- 总记录 |
限制查询limit
有时候我们只想查询部分数据,防止查崩数据库,可以使用limit关键字来进行限制输出的数目:
- 直接使用
limit
- 使用
limit ... offset ...
:指定从哪里开始显示,显示多少行 - 简写:
limit 3, 2
:表示从第3行开始,显示2行数据
1 | select name, age from user limit 3; -- 只显示3行数据 |
DQL
语言是使用最为广泛的,本文中只是简单地介绍了基本查询语句,后续会介绍多种进阶的查询。