MySQL的 DDL和DML和DQL的基本语法详解

目录
  • 一、DDL(数据定义语言)
  • 二、DML(数据操作语言)
  • 三、DQL(数据查询语言)
  • 四、聚合函数

前言

SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

SQL标准规定的SQL语句分为:DDL(Data Define Language 数据定义语言)、  DML(Data Manipulation Language 数据操作语言)、DQL(Data Query Language 数据查询语言)、DCL(Data Control Language 数据控制语言)。本文将详细介绍它们。

首先了解一下关于SQL语法的一些注意事项:

1. SQL 语句可以单行或多行书写,以分号结尾。

2. 可使用空格和缩进来增强语句的可读性。

3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

4. 3 种注释

① 单行注释:  -- 注释内容 或 # 注释内容(mysql 特有)

② 多行注释:  /* 注释 */

一、DDL(数据定义语言)

DDL语言:全面数据定义语言(Data Define Language),是用来定义和管理数据对象,如数据库,数据表等。DDL命令有CREATE(创建)、DROP(删除)、ALTER(修改)。

下面用代码给大家举例子:

-- SQL语法不区分大小写
-- 每一句结束的时候都要用一个分号;
# 库的操作
-- 显示所有的库
show databases;
-- 创建一个库
-- create database 库名;
create database ku;
-- 删除一个库
-- drop database 库名;
drop database ku;
-- 使用库
-- use 库名;
use ku;
# 表的操作
-- 查看库中所有的表
show tables;
-- 建表
create table 表名(
	字段名  类型  属性,
	字段名  类型  属性,
	....
	字段名  类型 属性
);
create table tab_teacher(
	tea_name varchar(10),
	tea_sex char(1),
	tea_birthday datetime,
	tea_money decimal(20,1)
);
show tables;
-- 查看表结构
desc tab_teacher;
show create table tab_teacher;
-- ` 反引号 让关键词失效
CREATE TABLE `tab_teacher` (
  `tea_name` varchar(10) DEFAULT NULL,
  `tea_sex` char(1) DEFAULT NULL,
  `tea_birthday` datetime DEFAULT NULL,
  `tea_money` decimal(20,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    COLLATE=utf8mb4_0900_ai_ci

二、DML(数据操作语言)

DML语言:数据操作语言(Data Manipulation Language),是用于操作数据库对象中所包含的数据。DML命令有INSERT(增加)、DELETE(删除)、UPDATE(修改)。

下面用代码给大家举例子:

# DML 语句
-- 新增
-- 语法
-- insert into 表名(字段名,字段名...字段名) values(值,值...值);
-- 日期用字符串的形式表示
insert into student(sid,sname,birthday,ssex,classid) values(9,'张三','1999-1-1','男',3);
insert into student(sid,ssex,classid) values(11,'男',2);
-- 让主键自增
insert into student(sname) values("王桑");
insert into student values(default,'老王','1970-6-1','男',2);
insert into student values(null,'老王','1970-6-1','男',2);
-- 一次性插入多条数据
insert into student(sname,ssex) values('王帅帅','男'),('王靓靓','男'),('王妹妹','女');
-- 不常用的新增方式
-- 表都要存在
create table stu1(
	xingming varchar(10),
	ssex varchar(2)
)
-- insert into select
insert into stu1 select sname,ssex from student;
-- 新建表的时候插入数据
-- 新表不能存在
create table newstu select sname,birthday,ssex from student;
-- 修改
-- 语法
-- update 表名 set 字段名=值,字段名=值... where 子句
update stu1 set xingming = '赵雷雷';
update newstu set ssex= '女' where sname='老王';
-- 范围
update student set ssex = '女',classid = 10 where sid >= 10 and sid <= 15;
-- between 小数据 and 大数据
update student set ssex='呵呵',classid = 20 where sid between 10 and 15;
-- 删除
-- delete from 表名  where 子句
delete from stu1;
delete from student  where sname = '老王';
-- 清空表
truncate 表名
truncate student;

三、DQL(数据查询语言)

DQL语言:数据查询语言(Data Query Language),是用于查询数据库数据。DQL命令有SELECT(查询)。

下面用代码给大家举例子:

# DQL
-- 查询
-- 查询表所有行和列的数据(得到的是一张虚拟表)
-- select * from 表名;
select * from student;
-- 查询指定字段
-- select 字段名1,字段名2... from 表名;
select sid,sname,birthday,ssex,classid from student;
-- 字段起别名
-- select 旧字段名 as '新字段名';
select sname as '姓名', birthday '生日',ssex 性别 from student;
-- 去除重复 distinct
-- select distinct 字段名... from 表名;
select distinct ssex,classid,sid from student;
-- 带条件的查询  WHERE 子句
select * from student where ssex = '男' and classid = 1;
-- 生日 大于 1990-1-1 的学生
select * from student where birthday < '1990-1-1';
-- 模糊查询 like
insert into student(sname)
values('张三丰'),('张三'),('张三三');
-- 张字有关的数据
-- 模糊符号 % 任意多的任意字符
select * from student where sname like '%张%';
-- 姓张的人
select * from student where sname like '张%';
-- 模糊符号_ 一个任意字符
select * from student where sname like '张__';
-- 学生编号是 2,5,6,8,9,20,300,4000
-- in 在特定的范围内查找
select * from student  where sid in (2,5,6,8,9,20,300,4000);
-- 没有生日的学生  is 是对null的判断
select * from student where birthday is null;
select * from student where birthday is not null;
# 分组
-- group by 字段
select count(1) from student where ssex = '男';
select count(1) from student where ssex = '女';
select ssex,count(sid) from student group by ssex;
-- 每个班有多少学生
select classid,count(sid) from student group by classid;
-- sc  每个学生的平均分
select sid,avg(score) 平均分, sum(score) 总成绩,max(score) 最高分, min(score) 最低分, count(*) 次数 from sc group by sid;

四、聚合函数

语法:之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 NULL。

-- 统计个数 count(字段)/字段可以写*、常量、任意字段名/count不统计数据为null的个数。

-- 统计平均值 avg(字段)

-- 统计最大值 max(字段)

-- 统计最小值 min(字段)

-- 统计总和 sum(字段)

eg: select count(*) 总个数, sum(score) 总成绩, avg(score) 平均分, max(score) 最高分, min(score) 最低分 from sc;

# 聚合函数
count(字段) -- 统计个数
-- 数字
avg(字段) -- 平均值
sum(字段) -- 总和
max(字段) -- 最大值
min(字段) -- 最小值
-- count 统计个数
select count(*) from student where ssex = '男';
select count(sname) from student where ssex = '男';
select count(1) from student where ssex = '男';
select count('a') from student where ssex = '男';
-- count() 不统计null
select count(birthday) from student;
-- avg 平均值
-- 所有学生的平均分
select avg(score) from sc;
-- sum 总成绩
select sum(score) from sc;
select count(*) 次数, sum(score) 总成绩, avg(score) 平均分, max(score) 最高分,min(score)最低分 from sc;

到此这篇关于MySQL的 DDL和DML和DQL的基本语法的文章就介绍到这了,更多相关MySQL的 DDL和DML和DQL内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL 中定位 DDL 被阻塞的问题及解决方案

    DDL 被阻塞了,如何找到阻塞它的 SQL? 经常碰到开发.测试童鞋会问,线下开发.测试环境,执行了一个DDL,发现很久都没有执行完,是不是被阻塞了?要怎么解决? 包括在群里,也经常会碰到类似问题:DDL 被阻塞了,如何找到阻塞它的 SQL ? 实际上,如何解决 DDL 被阻塞的问题,是 MySQL 中一个共性且高频的问题. 下面,就这个问题,给一个清晰明了.拿来即用的解决方案: 怎么判断一个DDL是不是被阻塞了 ?当DDL被阻塞时,怎么找出阻塞它的会话 ? 怎么判断一个 DDL是不是被阻塞了?

  • Mysql Online DDL的使用详解

    正文 Online DDL在MySQL 5.6才开始支持的,在5.5及之前版本,使用alter table/create index等命令进行表结构修改操作均会锁表,这在生产环境上明显是不可接受的. 在MySQL 5.7,Online DDL在性能和稳定性上不断得到优化,性能有显著优势,且对业务负载影响小,停写时间可控,相对pt-osc/gh-ost来说,无需安装第三方依赖包,同时支持Inplace算法的Online DDL,由于无需拷表,所需磁盘空间也更小. 先来看一个常见的DDL语句: AL

  • Mysql DDL常见操作汇总

    库的管理 创建库 create database [if not exists] 库名; 删除库 drop databases [if exists] 库名; 建库通用的写法 drop database if exists 旧库名; create database 新库名; 示例 mysql> show databases like 'javacode2018'; +-------------------------+ | Database (javacode2018) | +---------

  • MySQL之浅谈DDL和DML

    目录 前言 一.DDL 1.1 数据库操作 1.2 数据表操作 1.3 常用数据类型 1.4 约束 1.5 标识列  二.DML 2.1 添加数据 2.2 修改数据 2.3 删除数据 前言         在前面的文章中我们认识了MySQL,以及熟悉了如何使用MySQL的查询语句         数据操作增删查改中的查我们已经介绍了,那么本篇文章将会介绍剩下的增删改以及数据库和表的常用操作,比如创建.删除.修改. 一.DDL         可能有看官老爷会问,什么是DDL啊?这里博主简单介绍一

  • MySQL ddl语句的使用

    前言 SQL的语言分类主要包含如下几种: DDL 数据定义语言 create.drop.alter 数据定义语言 create.drop.alter 语句 . DML 数据操纵语言 insert.delete.update 定义对数据库记录的增.删.改操作. DQL 数据库查询语言 select 定义对数据库记录的查询操作. DCL 数据库控制语言 grant.remove 定义对数据库.表.字段.用户的访问权限和安全级别. (授权grant,收回权限revoke等). TCL 事务控制语言 s

  • MySQL的 DDL和DML和DQL的基本语法详解

    目录 一.DDL(数据定义语言) 二.DML(数据操作语言) 三.DQL(数据查询语言) 四.聚合函数 前言 SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名. SQL标准规定的SQL语句分为:DDL(Data Define Language 数据定义语言).  DML(Data Manipulation Language 数

  • MySQL创建和删除数据表的命令及语法详解

    创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 TUTORIALS 数据库中创建数据表tutorials_tbl: tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT N

  • MySQL通过触发器解决数据库中表的行数限制详解及实例

    MySQL通过触发器解决数据库中表的行数限制详解及实例 最近项目一个需求是对操作日志的数量限制为10万条,超过十万条便删除最旧的那一条,保存数据库中日志数量不超过10万. 当时我的第一想法是通过触发器来做,便在数据库中执行了如下的SQL: delimiter $ create trigger limitLog before insert on OperationLog for each row begin if (select count(*) from OperationLog) > 1000

  • MySQL系列之redo log、undo log和binlog详解

    事务的实现 redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能. InnoDB存储引擎体系结构 redo log Write Ahead Log策略 事务提交时,先写重做日志再修改页:当由于发生宕机而导致数据丢失时,就可以通过重做日志来完成数据的恢复. InnoDB首先将重做日志信息先放到重做日志缓存 按一定频率刷新到重做日志文件 重做日志文件: 在默认情况,InnoDB存储引擎的数据目录下会有两个名为ib_logfile1和ib_logfile2的文件.每个In

  • Mysql 5.7.19 免安装版配置方法教程详解(64位)

    官方网站下载mysql-5.7.19-winx64,注意对应系统64位或者32位,这里使用的是64位. 解压放置到本地磁盘.发现文件很大,大概是1.6G左右.删除lib文件夹下的.lib文件和debug文件夹下所有文件. 在主目录下创建my.ini文件,文件内容如下:(这里是简洁版,对应本机修改basedir和datadir的目录,根据需要可以自己扩充配置) [client] port=3306 default-character-set=utf8 [mysqld] basedir=D:\Jav

  • MySQL 5.7 zip版本(zip版)安装配置步骤详解

    前言:重装win10顺带整理文件,然而装个MySQL用了我一下午,真是不值,所以写这篇来帮助大家. 一.下载 https://dev.mysql.com/downloads/mysql/ 二.解压缩zip包 三.配置环境变量 (1)配置Path (2)修改mysql-default.ini配置文件 原先的: # These are commonly set, remove the # and set as required.# basedir = .....# datadir = .....#

  • Mysql注入中的outfile、dumpfile、load_file函数详解

    在利用sql注入漏洞后期,最常用的就是通过mysql的file系列函数来进行读取敏感文件或者写入webshell,其中比较常用的函数有以下三个 into dumpfile() into outfile() load_file() 我们本次的测试数据如下 读写文件函数调用的限制 因为涉及到在服务器上写入文件,所以上述函数能否成功执行受到参数 secure_file_priv 的影响.官方文档中的描述如下 翻译一下就是 其中当参数 secure_file_priv 为空时,对导入导出无限制 当值为一

  • mysql(5.6及以下)解析json的方法实例详解

    mysql(5.6及以下)解析json #json解析函数 DELIMITER $$ DROP FUNCTION IF EXISTS `json_extract_c`$$ CREATE FUNCTION `json_extract_c`( details TEXT, required_field VARCHAR (255) ) RETURNS TEXT CHARSET latin1 BEGIN SET details = SUBSTRING_INDEX(details, "{", -1

  • window环境配置Mysql 5.7.21 windowx64.zip免安装版教程详解

    1.从官网下载mysql-5.7.21-windowx64.zip mysql下载页面 2.解压到合适的位置(E:\mysql) 这名字是我改过的 3.配置环境变量,将E:\mysql\bin 添加到PATH中 4.在mysql目录下(E:\mysql) 创建 my.ini文件,内容如下: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 based

  • MySQL 行锁和表锁的含义及区别详解

    一.前言 对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答. MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎.MyISAM不支持行锁,而InnoDB支持行锁和表锁. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制. MySQL大致可归纳为以下3种锁: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率

随机推荐