SQL四大基础操作语言DDL,DCL,DQL,DML
1.定义
1.DDL data definition language 数据定义语言,用以定义数据库对象(数据库,表,字段)
2.DML data manipilation language 数据操作语言,用来对数据库表中的对象进行增删改
3.DQL data query language 数据查询语言,用来查询数据库表中的记录
4.DCL data control language 数据控制语言,用来创建数据库用户,控制访问权限
2.启动方式
在运行输入 services.msc
net start mysql80 启动
net stop mysql80 停止
3.客户端链接
方式一:打开MySQL 8.0 Command Line Client - Unicode
方式二:mysql [-h 127.0.0.1] [-P 3306] -u root -p
-h : MySQL服务所在的主机IP
-P : MySQL服务端口号, 默认3306
-u : MySQL数据库用户名
-p : MySQL数据库用户名对应的密码
4.SQL通用语法
sql 语句可以单行或多行书写,以分号结尾
sql语句可以使用空格或者缩进来增强语句的可读性
MYSQL数据库的SQL语句不区分大小写,关键字建议大写
注释: 单行注释: --或者# 多行注释: /* */
DDL(data definition language) (数据定义语言)
作用:用以定义数据库对象(数据库,表,字段)
1.查询操作
查询所有数据库 | SHOW DATABASES ; |
---|---|
查询当前数据库 | select database() ; |
创建数据库 | create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ; |
删除数据库 | drop database [ if exists ] 数据库名 ; |
切换数据库 | use 数据库名 ; |
2.表操作
查询当前数据库所有表 | SHOW TABLES; |
---|---|
查看指定表结构 | desc 表名 ; |
查询指定表的建表语句 | show create table 表名 ; |
创建表结构 | 注意: [...] 内为可选参数,最后一个字段后面没有逗号 |
例如:
REATE TABLE 表名( 字段1 字段1类型 [ COMMENT 字段1注释 ], 字段2 字段2类型 [COMMENT 字段2注释 ], 字段3 字段3类型 [COMMENT 字段3注释 ],...... 字段n 字段n类型 [COMMENT 字段n注释 ] ) [ COMMENT 表注释 ] ;
例如:
create table tb_user( id int comment '编号', name varchar(50) comment '姓名', age int comment '年龄', gender varchar(1) comment '性别' ) comment '用户表';
3.数值类型
MySQL中的数据类型有很多,主要分为三类:
数值类型、
字符串类型、
日期时间类型。
3.1数值类型
类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
---|---|---|---|---|
tinyint | 1byte | -128-127 | 0 -255 | 小整数值 |
smallint | 2bytes | -32768-32767 | 0-65535 | 大整数值 |
mediumint | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
int/integer | 4bytes | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
bigint | 8bytes | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157E+308,1.7976931348623157E+308) | 0 和(2.2250738585072014E-308,1.7976931348623157E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数,确定精度 | |
3.2字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串(需要指定长度) |
VARCHAR | 065535 | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 | 短文本字符串 |
BLOB | 0-65535 | 二进制形式的长文本数据 |
TEXT | 0-65535 | 长文本数据 |
MEDIUMBLOB | 0-16777215 | 二进制形式的中等长度的文本数据 |
MEDIUMTEXT | 0-16777215 | 中等长度的文本数据 |
LONGBLOB | 0-4294967295 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295 | 极大文本数据 |
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
案列
1). 用户名 username ------> 长度不定, 最长不会超过50 username varchar(50) 2). 性别 gender ---------> 存储值, 不是男,就是女 gender char(1) 3). 手机号 phone --------> 固定长度为11 phone char(11)
3.3日期类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59至838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901-2155 | YYYY | 年份值 |
DATETIE | 8 | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
案例:
1). 生日字段 birthday birthday date 2). 创建时间 createtime createtime datetime
DML(data anipulation language)(数据操作语言)
作用:用对数据库表中的数据记录进行增删改操作
一,添加数据:insert into
1.给指定字段添加数据
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
案列为emp表增加一个新的字段”昵称”为nickname,类型为varchar(20)
ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
2.给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
3.批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值 1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
注意:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串的和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
二,修改数据:updata ... set
1.语法:
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
注意:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据;
案列:
修改id为1的数据,将name修改为itheima
update employee set name = 'itheima' where id = 1;
1 修改id为1的数据, 将name修改为小昭, gender修改为 女
update employee set name = '小昭' , gender = '女' where id = 1;
1 将所有的员工入职日期修改为 2008-01-01
update employee set entrydate = '2008-01-01';
三,删除数据:delete from
1.语法
DELETE FROM 表名 [ WHERE 条件 ] ;
注意:
delete语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
delete语句不能删除某一个字段的值(可以使用update)
案例
#添加数据 insert into employee(id, work_number, name, gender, age, entry_date) values(1,'1','你好','男',18,'2002-02-02')select * from employee; #展示表格 insert into employee values(2,22,'小李','女',36,'2008-5-1') #添加多行数据 insert into employee values (2,22,'芜湖','女',36,'2008-5-1'),(3,32,'嘿嘿','女',36,'2008-5-1');#修改数据update employee set name='黑马' where id = 1; #将id=1的名字修改为黑马 update employee set name='嘻嘻' where id = 3; update employee set name ='小赵' ,gender = '女' where id ='1' #无条件,修改所有的数据 update employee set entry_date = '2015-5-9'; update employee set gender = '男' where id=2; #删除为女的列 delete from employee where gender='女'; select * from employee; #删除所有数据 delete from employee;
DQL(data query language)(数据查询语言)
DQL 语法
select 字段列表
from 表明列表 基本查询
where 条件列表 条件查询
group by 分段后条件列表 分组查询
having 分段后条件列表 聚合函数(count,max,min,average,sum)
opder by 排序字段列表 排序查询
limit 分页参数 分页查询
一,基本查询
1.查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
注意:
*号代表查询所有字段,在实际开发中尽量少用(不直观,影响效率)
2.设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名; 1
注意:
as可以省略
3.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
案列
create table emp(id int comment '编号',workno varchar(10) comment '工号',name varchar(10) comment '姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',workdress varchar(50) comment '工作地点',entry_date date comment '入职日期' )comment '员工表'; insert into emp (id, workno, name, gender, age, workdress, entry_date) values (1,'1','小王','男','18','郑州','2020-5-1'),(2,'2','小利','女','19','新乡','2010-5-1'),(3,'4','小方','男','13','郑州','2030-5-1'),(4,'4','小狗','男','17','郑州','2020-5-1'),(5,'5','小媛','女','15','新乡','2020-5-1'),(6,'6','小艾','女','13','新乡','2010-5-1'); select * from emp; #查询指定字段 select name,workno,workdress from emp;#查询所有字段 select * from emp; select id, workno, name, gender, age, workdress, entry_date from emp; #上下效果等同,但建议用下面的,下面的更直观 #查询所有远东的工作地址,起别名 select workdress as '工作地址' from emp; #as起别名,as也可以省#查询公司员工的工作地址 (去掉重复) select distinct workdress '工作地址' from emp;
二,条件查询
1.语法
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
2.条件
比较运算法 | 功能 |
---|---|
> | |
>= | |
< | |
<= | |
= | |
<>或 != | 不等于 |
between ... and... | 在某个范围之内(含最小,最大值) |
in(...) | 在IN之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配多个字符) |
is null | 是null |
逻辑运算符 | 功能 |
---|---|
and 或 && | 并且(多个条件同时成立) |
or 或 || | 或者(多个条件任意一个成立 |
not 或 ! | 非,不是 |
escape: select * from score where name like "/雄" escape "/"; escape"/" 表示/后面的不再是通配符,只是代表符号_.
案列
insert into emp (id, workno, name, gender, age, workdress, entry_date) values (7,'7','湫','男',null,'上海','2015-8-9');#条件查询 # 1.查询年龄等于18的员工 select * from emp where age = 18; # 2.查询年龄小于15的员工 select * from emp where age<15; # 3.查询年龄小于等于15的员工 select * from emp where age<=15; # 4,查询没有年龄的员工 select * from emp where age is null; # 5查询有年龄的员工 select * from emp where age is not null ; # 6查询性别为女且年龄小于15的员工信息 select * from emp where age<15&&gender='女'; # 7查询年龄等于18或19或17的员工信息 select * from emp where age=17||emp.age=19||emp.age = 18; select * from emp where age in (17,18,19); # 8.查询姓名为一个字的员工 select * from emp where name like '_'; #_表示单个字符 %表示无数个字符 # 9.查询年龄在15(包含)到18(包含)之间的员工信息 select * from emp where age between 15 and 18; select * from emp where age>=15 and age<=18; # 10查询年龄最后以为是7的员工信息 select * from emp where age like '%7'; select * from emp where age like '_7';
三,聚合函数
1.介绍
将一列数据作为一个整体,进行纵向运算
2.常见聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
AVG | 平均值 |
sum | 求和 |
3.语法
SELECT 聚合函数(字段列表) FROM 表名 ;
案列
# 聚合函数 # 1.统计该企业的员工数量 select count(*) from emp; select count(id) from emp; #如果有null值,null值不参与计算 # 2.统计员工的平均年龄 select avg(age) from emp; # 3.统计企业员工的最大年龄 select max(age) from emp; # 4.统计员工的最小年龄 select min(age) from emp; #统计新乡地区的员工年龄之和 select sum(age) from emp where workdress= '新乡';
四,分组查询
1.语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ]; 1
2.where 和having的区别
执行时机不同:where是分组之前进行,不满足where条件,不参与分组,二having是分组之后对结果进行过滤
判断条件不同:where不能对聚合函数进行判断,而having可以
注意:
执行顺序:where > 聚合函数 having
分组之后:
案列
#分组查询 # 1.根据性别分组,分别统计男女员工的数量 select gender, count(*) from emp group by gender; # 2.根据性别分组,分别统计男女员工的年龄 select gender ,avg(age) from emp group by gender; # 3.查询年龄小于18的员工,并根据工作地址分组,获取员工数量大于等于二的工作地点 select workdress,count(*) address_count from emp where age<18 group by workdress having count(*)>=2
五,排序查询
1.语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
2.排序方式
ASC:升序(默认值)
DESC:降序
注意:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
案例
# 排序查询 # 1.根据年龄队公司的员工进行升序排序 select * from emp order by age asc; select * from emp order by age desc; # 2.根据入职时间对员工进降序排序,入职时间相同,则按照年龄进行升序排序 select * from emp order by entry_date desc ,age asc;
六,分页查询
1.语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意:
起始索引从0开始,起始索引 = (查询页码-1)* 每页显示记录数
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是limit
如果查询的是第一页的数据,起始索引可以省略,直接简写成 limit 10 (返回第一页的十条数据)
案列
#分页查询 # 1.查询第一页的员工数据,每页显示十条数据 select * from emp limit 0,10; select * from emp limit 10; # 2查询第二页的员工数据,每页展示10条记录 select * from emp limit1,10;
FINALLY总结:
DQL执行顺序:
from>where>group up> having>select>order by>limit
DQL编写顺序:
select>from>where>group by>having >order by>limit
as起别名
DCL(data control language)(数据控制语言)
作用:用来管理数据库用户,控制数据库访问权限
一,管理用户
1,查询用户
use mysql;select from user;
2.创建用户
create user '用户名'@'主机名' identified by '密码'
3.修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
4.删除用户
DROP USER '用户名'@'主机名' ;
案列:
# 创建用户itcast,只能在当前主机localhost访问,密码123456 create user 'itcast'@'localhost' identified by'123456'; #可在mysql数据库的user表中查看 # 创建用户heima可以在任意主机访问数据库,密码123456 create user 'heima'@'%' identified by'123456'; # 修改用户heima的访问密码为1234; alter user 'heima'@'%' identified with mysql_native_password by '1234'; # 删除itcast@localhost用户 drop user 'itcast'@'localhost'; drop user 'heima'@'%';
注意:
主机名可以使用%统配(%表示任意主机都可以访问该mysql服务器)
这类SQL开发人员操作的比较少,主要是DBA(database administrator 数据库管理员)使用
二权限控制
权限 | 说明 |
---|---|
ALL,ALL PRIVILEGES | 所有权限 |
SELECT | 查询权限 |
INSERT | 插入权限 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
1.查询权限
show grants
2.授权权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; //如果在后面加上with check option 则被授权的用户,不能将自己的权限再授予他人。
3.撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
案列
create user 'hehe'@'%'; #也可以不设置密码 # 查询权限 show grants for 'hehe'@'%'; #授予权限 grant all on emp.* to 'hehe'@'%'; # 撤销权限 revoke all on emp.* from 'hehe'@'%';
注意
多个权限之间,使用逗号分割;
授权时,数据库名和表名可使用 * 进行统配,代表所有;
创造角色
1)创造角色
格式 create role <角色名>
2)给角色授权
grant<权限>[权限]...
on 对象类型 对象名
to 角色1,角色2...
3)讲一个角色授予其他的角色或用户
grant 角色1,角色2...
to 角色3,用户1 ...
with admin option //此句可不加,加上以后则说明某种权限的角色或用户还可以把这种权限再授予其他用户。
4)角色权限的收回
revoke 权限...
on 对象类型 对象名称
from 角色1,角色2...
5)角色的作用
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此,可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
SQL四大基础操作语言DDL,DCL,DQL,DML相关推荐
- SQL中数据操作语言 (DML) 和数据定义语言 (DDL)
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插入和删除记录的语法. ...
- DML语言(数据库操作语言)和DQL语言(数据库查询语言)
DML语言(数据库操作语言)和DQL语言(数据库查询语言) 1.DML语言(Data Manipulation Language) 1.1.添加语句(insert) INSERT INTO `teac ...
- 【ClickHouse SQL 极简教程】ClickHouse SQL之数据定义语言 DDL
1.1. ClickHouse SQL之数据定义语言 DDL 本节介绍 ClickHouse 中进行数据库.表结构的定义和管理. 1.1.1. 概述 在SQL中,数据定义语言( DDL ) 用来创建 ...
- DML,DDL,DCL,DQL的区别
DML 英文缩写 DML = Data Manipulation Language,数据操纵语言,命令使用户能够查询数据库以及操作已有数据库中的数据的计算机语言.具体是指是UPDATE更新.INSER ...
- oracle dfl dml,DML,DDL,DCL,DQL的区别
DML数据库 英文缩写express DML = Data Manipulation Language,数据操纵语言,命令使用户可以查询数据库以及操做已有数据库中的数据的计算机语言.具体是指是UPDA ...
- mysql 四大基础操作_mysql数据库的基本操作
mysql数据库的基本操作 首先我们要把mysql装好 mkdir chen/ mount.cifs //192.168.100.23/LNMP chen/ [root@localhost ~]# y ...
- 数据库中DML,DDL,DCL,DQL指的是什么意思
1)DQL(Dimensional Query Language) 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT < ...
- mysql 四大基础操作_事务的四大特性和隔离级别
MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...
- SQL数据库层面操作(DDL)
DDL(Data Definition Language 数据定义语言)用于对数据库和数据表的操作,因为操作对象有两个(数据库和数据表),所以我们要在每个命令之后(create.drop.alter. ...
最新文章
- 《利用Python》进行数据分析:Numpy基础9 数组转置和轴对换
- alpine linux docker容器时区修改
- Java多线程编程模式实战指南(二):Immutable Object模式--转载
- Knockout中ViewModel与Model的互转
- 【Java深入研究】10、红黑树
- linux两个卷组可以合并,Linux系统中所有的逻辑卷必须属于同一个卷组()。
- 【SpringCloud】Spring cloud Alibaba Sentinel 系统规则
- mysql 打印_揭秘MySQL 主从环境中大事务的传奇事迹
- sqlserver 'sa'密码忘记,windows集成身份验证都登录不了解决办法
- 记录一个小程序 input输入框格式手机号方法
- 中国公路客运中心产业运营现状与十四五管理规划报告2022-2028年
- linux中目录权限777,Linux文件和目录的777、755、644权限解释
- hardfault常见原因_keil遇到hardfault时原因的查找
- AUTOSAR架构软件结构简介
- linux下jmeter性能测试
- dB单位与放大倍数关系
- 2022第三届全国大学生网络安全精英赛练习题(1)
- 关于Spark Steaming中的Processing Time/Total Delay/Processing Delay
- c++ 关于heap的STL用法
- resultMap的用处
热门文章
- matlab 谐波注入,一种基于谐波注入的新能源汽车永磁同步电机噪声控制方法与流程...
- X86云游戏能玩王者荣耀方案
- SinGAN一张照片即可生成同样的照片(附简化版代码)
- 丰田生产方式的浪费观——《可以量化的管理学》
- [爆笑网文]我终于成材了!一个大学毕业生的学业汇报
- 未备案访问服务器网站,未备案域名怎样访问国内服务器
- 火星坐标-地球坐标的由来 以及转换方式:
- Windows Server 2012R2 域与活动目录
- 学习access的同学们的福利,推荐优秀的access教程
- CMake - 使用 target_sources() 提高源文件处理能力