sql的语言有哪些功能,sql语言功能包括

首页 > 实用技巧 > 作者:YD1662024-02-10 21:26:48

本文是mysql系列之第三篇文章 ,主要介绍常用的SQL语句 ,具体如下 ,若要查看mysql客户端工具的使用,请见:

sql语言分类

语言类型

说明

关键字

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的区别:

分页

# 作用 : 有时候数据多 ,就可以使用分页显示 # 说明 : 使用关键字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 ,10DCL SQL语言

grant

grant主要是授权用户权限 ,主要控制以下访问权限 :

# 格式 : 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数据并不会插入到数据库



栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.