SQL语言分类有哪几种?分别都对应着哪些关键字?都整理在这里了
yuyutoo 2025-01-01 23:25 3 浏览 0 评论
本文是mysql系列之第三篇文章 ,主要介绍常用的SQL语句 ,具体如下 ,若要查看mysql客户端工具的使用,请见:mysql系列之一文详解Navicat工具的使用(二)
sql语言分类
- DDL:数据定义语言
- DQL:数据查询语言
- DML:数据操纵语言
- DCL:数据控制语言
语言类型 | 说明 | 关键字 |
DDL Data Definition Language | 数据定义语言 | create、alter、truncate、drop ,show ,use |
DML Data Manipulation Language | 数据操纵语言 | insert、delete、update |
DQL Data Query Language | 数据查询语言 | select |
DCL Data Control Language | 数据控制语言 | grant、revoke、commit、rollback |
数据库对象
1.表(Table )
数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于惟一地确定一条记录。
2.索引(Index)
索引是根据指定的数据库列表建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。
3.视图(View)
视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存在。该视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。
4.图表(Diagram)
图表其实就是数据库表之间的关系示意图。利用它可以编辑表与表之间的关系。
5.缺省值(Default)
缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。
6.规则(Rule)
规则是对数据库表中数据信息的限制。它限定的是表的列。
7.触发器(Trigger)
触发器是一个用户定义的SQL事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。
8.存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在数据库中的SQL 程序。
9.用户(User)
所谓用户就是有权限访问数据库的人。用户分为:管理员用户和普通用户。管理用户可对数据库进行修改删除,而普通用户只能进行阅读查看等操作。
10.总结
针对以上的对象 ,我们主要抽取其每个对象的关键字 ,因为这些关键字都会在后面的sql语句用到 。
数据库对象 | 关键字 |
数据库 | database |
表 | table |
索引 | index |
视图 | view |
图标 | diagram |
缺失值 | default |
规则 | rule |
触发器 | trigger |
存储过程 | procedure |
用户 | user |
DDL SQL语言
而以上的DDL语言多是对这些对象的操作,而对象本身又具有增、删、改、查特性 。 所以 ,DDL语言多是对对象本身的增删改查操作 ,下面就具体的介绍每个关键字的SQL实现 。
create
创建数据库:
create database gg # 创建数据库gg
创建表:
create table gg(字段1 类型,字段2 类型2,...) #创建表gg
创建视图:
create view gg as select 列名 from 表名 where 条件 #创建视图gg
创建索引:
create index gg ON 表名 (列名 [长度]) # 创建索引gg
创建触发器:
create trigger gg #创建触发器gg
{befor | after }
{insert | update delete}
on 表名
for each row
<触发器SQL语句>
# 说明:
{ before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。
on <表名>:用于指定响应该触发器的表名。
for each row:触发器的执行间隔,for each row 通知触发器每隔一行执行一次,而不是对整个表执行一次。
<触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。
创建存储过程
CREATE PROCEDURE gg(参数列表) #创建带参数的存储过程,名为gg
BEGIN
SQL语句代码块
END
创建用户:
create user 'username'@'host' identified by 'password';
# 说明:
username : 你要创建的用户名
host:指定在用户在那台主机上可以登录 ,如果是本地用户可以用localhost,如果想让该用户可以从任意远程主机登录,可以使用通配符% .
password : 设置该用户的登录密码
# 举例 :
create user 'ggg'@'%' identified by '123456'
alert
修改表名:
#格式:
alter table 旧表名 rename 新表名
# 举例 :将表abc 修改为bcd
alter table abc rename bcd ;
以下主要是对表的列做出的修改:
增加一列:
# 格式:
alter table 表名 add 列表 类型[长度]
#举例 :给表bcd添加一列sex
alter table bcd add sex enum('男','女')
删除列
# 格式:
alter table 表名 drop 列表
#示例:删除表bcd中的sex列
alter table bcd drop sex
重命名列
#格式:
alter table 表 change 原列名 新列名 类型
#示例:将表bcd中的sex列修改为class
alter table bcd change sex class varchar(2) ;
修改列的类型名称
# 格式:
alter table 表名 change 列名 类型
#示例:修改class类型为int类型
alter table bcd change class class int(20) ;
添加主键:
#格式:
alter table 表名 add primary key(列名)
#示例:给新表abc的id列设置为主键
alter table abc primary key(id)
修改主键:
#格式:
ALTER TABLE 表名 DROP PRIMARY KEY ,ADD PRIMARY KEY (列名);
#示例 :给表abc修改主键
alter table abc drop primary key ,add primary key(name)
删除主键:
#格式:
alter table 表名 drop primary key
#示例 :删除主键
alter table abc drop primary key
添加索引
#格式
alter table 表名 add index 索引名字(列名)
#示例 :给列name添加索引tt
alter table abc add index tt(name)
#组合索引:
alter table 表名 add index 索引名字(列1,列2,列3)
drop
删除语句比较简单,具体如下
# 格式 :drop 对象 对象名称
# 示例
1. 删除数据库 : drop database 数据库名
2. 删除表 : drop table 表名
3. 删除用户 : drop user 用户名
truncate
格式 : truncate table 表名
# 作用 : 清空表
#说明 : 和delete的主要区别是 ,truncate删除数据的速度更快 ,但是它不支持where操作。
show
#显示当前数据库中所有表的名称,以下两个语句都可以
show tables
show tables from database_name;
#显示mysql中所有数据库的名称。
show databases;
#显示表中列名称。
show columns from table_name from database_name;
show columns from database_name.table_name;
#显示一个用户的权限,显示结果类似于grant 命令。
show grants for user_name;
#显示表的索引。
show index from table_name;
#显示一些系统特定资源的信息,例如,正在运行的线程数量。
show status;
#显示系统变量的名称和值。
show variables;
#显示系统中正在运行的所有进程,也就是当前正在执行的查询。
show processlist;
#显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
show table status;
#显示服务器所支持的不同权限。
show privileges;
#显示create database 语句是否能够创建指定的数据库。
show create database database_name;
#显示create database 语句是否能够创建指定的数据库。
show create table table_name;
#显示安装以后可用的存储引擎和默认引擎。
show engies;
#显示innoDB存储引擎的状态。
show innodb status;
#显示BDB存储引擎的日志
show logs;
#显示最后一个执行的语句所产生的错误、警告和通知。
show warnings;
#只显示最后一个执行语句所产生的错误。
show errors;
#--显示安装后的可用存储引擎和默认引擎。
show [storage] engines;
use
USE <数据库名>
#作用 :指定数据库为当前的使用库 ,被选中后,会出现:Database changed提示
DML SQL语言
insert
#作用 : 向表中插入一条数据 ;
#格式2:
insert into 表名 values(value1,value2,...valueN)
#说明 :向表中的每个字段插入值,值的顺序要和表中的字段要一致
#示例:
insert into abc values(1,'张三','男')
#格式1:
insert into 表名(field1, field2,...fieldN) values(value1, value2,...valueN);
#说明:以上可以插入表中的部分字段 ,而且字段的先后顺序可以打乱,但是值一定要和字段一一对应 。
#示例 :
insert into abc(id,name) values(2,'李四')
delete
# 作用 :删除表中的数据
# 格式:
delete from 表名 [where 条件]
#示例:
delete from abc # 删除表abc中的全部数据
delete from abc where id = 2 # 删除id=2的数据
update
# 作用 : 更新表中的数据 ,可以是一条也可以是全部
#格式:
update 表名 set 字段1=新值1 [,字段2=新值2] [where 条件]
#示例
# update abc set name='张飞' #将表abc中的name值全部修改为张飞
# update abc set name='张飞' where id =2 #将表abc中id=2的name值修改为张飞
DQL SQL语言
select
# select 完整的SQL语句
SELECT [ALL | DISTINCT]
{ * | 表.* | [表.字段1 [as 别名1][,表.字段2] [as 别名2][,...]]}
FROM table_name [as 表别名]
[left | out | inner join 表2] #联合查询
[WHERE ...] #指定结果需要满足的条件
[GROUP BY ...] #指定结果按照哪几个字段来分组
[HAVING ...] #过滤分组的记录必须满足的次要条件
[ODER BY ...] #指定查询记录按一个或者多个条件排序
[LIMIT [偏移量,返回结果记录数]; #指定查询的记录从哪条至哪条
#说明:虽然以上的SQL语句是完整的select语句 ,但是多数情况下,我们编写的都是它的子集,也就是用其中的一部分关键字 。
说明:以下是对select语句的每一部分拆解说明 ,但需要明确的是DQL的关键字只有select ,其它的只是select的一部分 。
基本查询
# 作用 : 查询表中的所有数据
# 格式1 :
select * from 表
# 作用:指定列进行查询
#格式2 :
select 列1,列2,...列n from 表
#示例
select id,name,sex from students # 查询学生的编号,姓名,性别从学生表里
AS作用和用法
#作用:给列或表指定别名,当查询的列名或表名不好记时,可以起一个更容易记忆或写起来更方便的名字作为别名 。
# 格式:
select 列1,列2 as 别名2 from 表名 as 表别名
#说明:当然指定别名时,也可以将as关键字去掉,效果一样 。
DISTINCT关键字
# 作用 :去掉select查询出来的重复值 ,当所有返回值相同时,只返回一条记录 。
# 格式:
select distinct 字段1,字段2, ... from 表名
# 示例:
select distinct name, address from students
where语句
# 作用 :用于检索表中符合条件的记录 ,主要是用来做数据筛查 ,可以在select,update,delete语句后使用
# 格式:
select * from 表 where 条件语句
#示例:
select * from students where age > 30 #查询年龄大于30的学生记录
update students set phone='13210001000' where name = '张三' #将张三手机号修改为13210001000
delete from students where city ='北京' #删除北京学生的数据
说明 : where后面的条件语句 ,其实并非这么简单 ,它是非常灵活且强大的 ,这里我们先拆解条件语句的一部分 。
条件语句 由三部分组成,分别是 :字段 操作符 值 ,这三部分其实都非常灵活 ,都可以有不同情况,下面主要解决操作符的情况,操作符主要包括如下几种情况:
- 比较运算符
- 逻辑操作符
- 模糊查询
- 范围查询
- 空
比较运算符
#说明 :支持的操作符包括 : >,>=,<,<=,!=(不等于)
# 格式 :
select * from 表 where 字段 {> 或 >= 或 < 或 <= 或 !=} 值
#示例:
select * from students where city != '北京' # 查询不在北京的学生记录
逻辑运算符
逻辑运算符主要包括逻辑与,逻辑或,非 三种情况 。
逻辑符 | 语法 | 说明 |
and或 && | 条件1 and 条件2 条件1 && 条件2 | 两个条件必须都满足 |
or或 || | 条件1 or 条件2 条件1 || 条件2 | 两个条件满足其一即可 |
not或! | not 条件 ! 条件 | 如果条件满足,not后变为不满足,如果条件不满足,not后变为满足 |
示例:
#需求1 :查询年龄>30 并且 在北京的学生记录(逻辑与)
select * from students where age > 30 and city = '北京'
#需求2 :查询年龄>30 或 在北京的学生记录 (逻辑或)
select * from students where age > 30 or city = '北京'
#需求3: 查询不在北京的学生记录
select * from students where not city= '北京'
模糊查询
是指使用关键字like进行的查询
#作用: 使用like进行模糊查询 。
#格式:
select * from 表 where 字段 like 值
#说明:使用like ,一般都会结合%或_进行使用
% :表示任意多个字符
_ :表示任意一个字符
#需求1:查询姓名中含有莉的学生记录
select * from students where name like '%莉%'
#需求2:查询姓名以张开头,且只有一个名的学生
select * from students where name like '张_'
范围查询
# 说明 :这里有两个关键字 ,分别为
in : 表示在一个非连续的范围内
between ... and :表示在一个连续的范围内
# 格式 :
select * from 表 where 字段 in (值1,值2,值n)
select * from 表 where 字段 between 值1 and 值2 # 在值1 到 值2 之间 ,两者都是闭区间
#示例:
#需求1:查询北京,上海,深圳的学生记录
select * from students where city in ('北京','上海','深圳')
#需求2:查询年龄在20~30之间的,包括20和30
select * from students where age between 20 and 30
空值查询
# 说明 :空值,代表无值 ,区别于值为0和空字符串,使用is null关键字
#格式 :
select * from students where 字段 is null
#需求:查询身份证号为空的学生
select * from students where card is null
排序
# 作用 :按照某个字段进行排序 ,方便查找
# 说明:排序使用的关键字是order by ,后面跟排序的字段,排序有两种方式 :
ase 代表升序 ,为默认的排序方式
desc 代表降序
# 格式:
select * from students order by 字段1 asc|desc,字段2 asc|desc
# 需求 :按照学生的年龄大小从小到大进行排序
select * from students order by age asc ; # 其中asc可以忽略 。
分组
# 作用 :按照字段分组,将字段值相同的数据放在一个组中,方便统计
# 说明 :分组关键字 : group by , 分组常和聚合函数一起使用
# 格式 :
select * from students group by 字段1,字段2
# 需求 :查询各年龄段的人数
select age,count(age) from students group by age
当然 ,分组后也可以进行数据筛选 ,它使用到的关键字having ,和where有点相似,但又不完全一样 。
# 作用 : 分组后再进行数据筛选
# 说明 :关键字 :having 条件
# 格式:
select 字段1,字段2,聚合函数 from 表名 group by 字段1,字段2 having 字段1,聚合函数
# 需求 :查询男生总数
select sex,count(*) from students group by sex having sex = '男' ;
# 备注 : 以上需求使用where也能实现 ,
where和having的区别:
- where是对from后面的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
分页
# 作用 : 有时候数据多 ,就可以使用分页显示
# 说明 : 使用关键字limit ,limit后面跟两个参数 ,分别是:, 以及查询数count .
index : 起始查询位置index ,第一条数据的index为0 ,默认值为0 ,若为0,可省略此参数 。
count :查询数
# 格式 :
select * from 表名 limit index count
# 需求1 :查询最后的5条数据
select * from students limit 5
#需求 : 从第3条数据开始查,显示10条数据
select * from students limit 2 ,10
DCL SQL语言
grant
grant主要是授权用户权限 ,主要控制以下访问权限 :
- 可以限制用户访问那些数据库 ,那些表
- 可以限制用户对哪些表执行select,create ,delete,alter等操作 。
- 可以限制用户登录的IP和域名
- 可以限制用户的权限是否授权给别的用户
# 格式 :
grant 权限 on 对象 to 用户
#说明:
权限:其实就是对权限控制使用的关键字,如:select ,create 等 。
# 示例1:test用户,对school数据库下的所有数据表具有的增,删、改、查的数据的权限, 。
grant insert on school.* to test@'%' ;
grant select on school.* to test@'%' ;
grant update on school.* to test@'%' ;
grant delete on school.* to test@'%' ;
#或者,用一条MySQL命令替代 :
grant insert,select,update,delete on school.* test@'%' ;
#示例2:只能对shool下的students表进行查询权限
grant select on school.students to test@localhost
# 示例3 :对dev用户 ,设置创建,修改,删除对象权限
grant create,alter,drop on school.* to dev@'%' ;
revoke
revoke正好与grant相反 ,是回收权限(取消权限) 。
# 作用 : 取消权限
# 格式 :
revoke 权限 on 库.表 from 用户名@'ip'
# 示例1 :回收test用户的删除,修改权限
revoke delete,update on test.school.* from test@'%'
# 示例2 :取消test的取消权限
revoke insert on *.* from test@'localhost'
commit
commit和rollback主要用于事务处理 。使用事务有两种方式,分别为隐式事务和显式事务。隐式事务实际上就是自动提交,在MySQL中,自动提交(autocommit)在支持事务(transaction)的引擎中,若autocommit=true,则不需要commit的情况下直接提交语句形成永久性修改,Mysql默认打开autocommit,也可以通过配置设置。
# 查询是否设置了自动提交 ,
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.04 sec)
# 可以将自动提交关闭
mysql > set autocommit = 0 # 0 代表关闭 ,1 代表已开启 。
mysql> start transaction; #手动开启事务
mysql> insert into students(name) values('allen');
mysql> commit; #commit之后即可改变数据
rollback
mysql> start transaction; #开启事务
mysql> insert into students(name) values('jony');
mysql> rollback;
mysql> select * from students; # 实际的jony数据并不会插入到数据库
- 上一篇:程序员总结的常用sql语句大全
- 下一篇:PostgreSQL的一些使用技巧 (二)
相关推荐
- 二十三种设计模式之-模板方法模式
-
这是我写二十三种设计模式第二篇文章。这个系列我将持续写下去,欢迎大家关注,点赞和收藏。模板方法模式1.模板方法模式(TemplateMethodPattern)又叫模板模式,在一个抽象的类中,公开...
- 从 Java 代码逆向工程生成 UML 类图和序列图
-
前言本文面向于那些软件架构师,设计师和开发人员,他们想使用IBM?Rational?SoftwareArchitect从Java?源代码来逆向工程生成UML类和序列图。逆向工程经常...
- 作为程序员,还在手动画流程图、类图?看看这个神器
-
老板看不懂你写的代码,要求你补充流程图。。。客户看不懂你的代码,要求画流程图。。。新同事看不懂你的代码,要求画流程图。。。此时此刻,你的内心是崩溃的。。。曾几何时,我也和你一样崩溃。。。...
- 使用 seaborn 绘制 12 类图
-
你好,我是zhenguo今晚分享一个很不错的seaborn可视化实战入门材料,这个实战教程来自于kaggle,使用的是美国警察开枪数据集,大小1M,一共5个csv文件使用seaborn作...
- 分享一个从源码快速生成UML类图的插件——PlantUML Parser
-
前言相信每一位程序员都分析过源码,在分析源码过程中,除了了解代码实现的功能(业务逻辑),还需要深入下去了解程序代码的执行过程以及结构,往往在了解代码执行过程(动态模型)前,先对代码的结构(静态模型)有...
- 需求分析-类图建模
-
...
- 还能这么玩?用VsCode画类图、流程图、时序图、...不要太爽
-
软件设计中,有好几种图需要画,比如流程图、类图、组件图等,我知道大部分人画流程图一般都会用微软的viso绘制,我之前也是这个习惯。viso画图有个不好的地方是需要时刻去调整线条和边框已达到简洁美观,今...
- UML:类图关系总结
-
UML类图几种关系的总结,泛化=实现>组合>聚合>关联>依赖在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Reali...
- 小白进阶之路:一文读懂UML-类图
-
UML类图(UnifiedModelingLanguageClassDiagram)是一种用于可视化和描述系统中类、属性、方法以及它们之间关系的图形化表示方法。我在大学时,学习这个知识总是容易...
- 餐饮系统大拆解:用类图拆解员工结构与工作职责(1)
-
编辑导语:利用类图这一方式,产品经理可以更清晰地梳理设计思路,进而推动后续方案的迭代优化,同时结合类图梳理,团队内也能降低沟通成本。具体应该如何拆解?本篇文章里,作者结合餐饮系统,对类图拆解和梳理做了...
- 软件开发设计文档之「类图」
-
对象是系统中用来描述客观事物的一个实体,它由对象标识(名称)、属性(状态、数据、成员变量)和服务(操作、行为、方法)三个要素组成,它们被封装为一个整体,以接口的形式对外提供服务。而类则是对具有相同属性...
- 如何绘制「UML类图」?附内容详解和优质实例分析!
-
下面这篇文章是笔者整理分析的关于如何绘制「UML类图」的相关内容,大家一起来看看吧!UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、...
- UML统一建模语言系列二:类图设计方法及最佳实践
-
一、前言...
- 类图(Class Diagram)
-
类图(ClassDiagram):类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。类一般由三部分组成:类名(Class):每个类都必须有一个...
- 类图怎么画?简单快速绘制类图的软件
-
类图是显示模型中的类、类的内部结构和其他类的关系的图表,用来描述系统的结构化设计。类图是由类、包等元素和内容相互连接组成,是最常用的UML图。类图是描述系统中的类以及它们之间的关系的图表,它的主要作用...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)