MySQL基础(DDL,DML,DQL)

目录

一DDL

1.1数据库操作

1.1.1查询所有数据库:

1.1.2创建数据库

 1.1.3 使用数据库

1.1.4 删除数据库

1.2表操作

1.2.1表操作

1.2.1.1创建表

1.2.1.1.1约束

1.2.1.1.2 数据类型

1.2.1.1.2.1 数值类型

1.2.1.1.2.2 字符串类型

1.2.1.1.2.3日期类型 

 1.2.1.1.2图形化工具创建表

1.2.2查询表

 1.2.2.3查询建表语句的图形化操作

 1.2.3修改表结构

​编辑

​编辑 ​编辑1.2.4删除表结构

 二DML

 2.1添加数据(INSERT)

2.2修改数据 (UPDATE)

2.3删除数据(delete)

 三DQL

 3.1 基本查询

3.2条件查询 

3.3分组查询 

 3.3.1聚合函数

 3.4排序查询

3.5分页查询 


一DDL

1.1数据库操作

我们在进行数据库设计,需要使用到刚才所介绍 SQL 分类中的 DDL 语句。
DDL 英文全称是 Data Definition Language( 数据定义语言 ) ,用来定义数据库对象 ( 数据库、
)
中数据库的常见操作:查询、创建、使用、删除。

1.1.1查询所有数据库:

show databases;

通过指令:select database() ,就可以查询到当前所处的数据库

1.1.2创建数据库

create database itcast;创建一个 itcast 数据库。

 1.1.3 使用数据库

use 数据库名;

我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。

 

1.1.4 删除数据库

drop database [if exists] 数据库名;

如果删除一个不存在的数据库,将会报错。
可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。

drop database if exists itcast; -- itcast数据库存在时删除

说明:上述语法中的database,也可以替换成schema

1.2表操作

学习完了 DDL 语句当中关于数据库的操作之后,接下来我们继续学习 DDL 语句当中关于表结构的操作。
关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。

1.2.1表操作

1.2.1.1创建表
create table 表名 (
字段 1 字段 1 类型 [ 约束 ] [ comment 字段 1 注释 ] ,
字段 2 字段 2 类型 [ 约束 ] [ comment 字段 2 注释 ] ,
......
字段 n 字段 n 类型 [ 约束 ] [ comment 字段 n 注释 ]
) [ comment 表注释 ] ;
注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号。
create table ta_user(id int comment 'ID,唯一标识',username varchar(20) comment '用户名字',name varchar(10) comment '姓名',age int comment '年龄',gender char(1) comment '性别'
)comment '用户表';
1.2.1.1.1约束
概念:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
作用:就是来保证数据库当中数据的正确性、有效性和完整性。
MySQL 数据库当中,提供了以下 5 种约束:
约束描述关键字
非空约束
限制该字段值不能为 null
not null
唯一约束
保证字段的所有数据都是唯一、不重复的
unique
主键约束
主键是一行数据的唯一标识,要求非空且唯一
primary key
默认约束
保存数据时,如果未指定该字段值,则采用默认值
aa
外键约束
让两张表的数据建立连接,保证数据的一致性和完整性
foreign key

 

  • id 是一行数据的唯一标识
  • username 用户名字段是非空且唯一的
  • name 姓名字段是不允许存储空值的
  • gender 性别字段是有默认值,默认为男

create table ta_user(id int  primary key  auto_increment comment 'ID,唯一标识',username varchar(20)  not null unique comment '用户名字',name varchar(10) not null comment '姓名',age int comment '年龄',gender char(1) default '男' comment '性别'
)comment '用户表';
1.2.1.1.2 数据类型
MySQL 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1.2.1.1.2.1 数值类型
举例子:
分数 --- 总分 100 , 最多出现一位小数
score double ( 4 , 1 )

年龄字段 --- 不会出现负数 , 而且人的年龄不会太大
age tinyintunsigned
1.2.1.1.2.2 字符串类型

 

char varchar 都可以描述字符串,
char 是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关。
varchar 是变长字符串,指定的长度为最大占用长度。
相对来说, char 的性能会更高些。
char性能高,浪费空间
varchar 性能低,节省空间
例子:
用户名 username --- 长度不定 , 最长不会超过 50
username varchar ( 50 )
手机号 phone --- 固定长度为 11
phone char ( 11 )
1.2.1.1.2.3日期类型 

 

生日字段 birthday ---生日只需要年月日

birthday date
创建时间 createtime --- 需要精确到时分秒
createtime datetime
 1.2.1.1.2图形化工具创建表

1.2.2查询表

 show tables;查询当前数据库所有表

desc ta_user;查询表结构

show create table ta_user;查询建表语句

 1.2.2.3查询建表语句的图形化操作

 1.2.3修改表结构

关于表结构的修改操作,工作中一般都是直接基于图形化界面操作

 1.2.4删除表结构

关于表结构的删除操作,工作中一般都是直接基于 图形化界面操作
drop table if exists 表名;在删除表时,表中的全部数据也会被删除。

 二DML

DML 英文全称是 Data Manipulation Language( 数据操作语言 ) ,用来对数据库中表的数据记录进
行增、删、改操作

添加数据( INSERT
修改数据( UPDATE
删除数据( DELETE

 2.1添加数据(INSERT)

insert语法:

  • 向指定字段添加数据
    insert into ta_user(id,username,name) values(1,'zxr','zxr');

  • 全部字段添加数据
insert into ta_user values (2,'zxr1','zxr1',20,'男');
  • 批量添加数据(指定字段)
insertinto tb_emp(username, name, gender, create_time, update_time)values('weifuwang','韦一笑',1, now(), now()),('fengzi','张三疯',1, now(), now());
  • 批量添加数据(全部字段)
insert into ta_user values (3,'zxr2','zxr2',20,'男'),(4,'zxr3','zxr3',20,'男')

 注意事项

1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
2. 字符串和日期型数据应该包含在引号中。
3. 插入的数据大小,应该在字段的规定范围内。

2.2修改数据 (UPDATE)

update语法:

update表名set字段名1 =值1 ,字段名2 =值2 , .... [where条件];
update ta_user set name='张三' where name='zxr1'
注意事项
1. 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
2. 在修改数据时,一般需要同时修改公共字段 update_time ,将其修改为当前操作时间。

 

2.3删除数据(delete)

delete 语法:
delete from 表名 where 条件;
案例 1 :删除 tb_emp 表中 id 1 的员工
deletefrom tb_emp where id = 1 ;
注意
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
• DELETE 语句不能删除某一个字段的值 ( 可以使用 UPDATE ,将该字段值置为 NULL)
• 当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击Execute

 三DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
查询关键字:SELECT
查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的
使用频次是要远高于增删改操作的。当我们打开某个网站或APP所看到的展示信息,都是通过从数据库
中查询得到的,而在这个查询过程中,还会涉及到条件、排序、分页等操作
基本语法:

 3.1 基本查询

  • 查询多个字段

--  =================== 基本查询 ======================

-- 1. 查询指定字段 name,entrydate 并返回

select name,entrydate from emp ;


 

-- 2. 查询返回所有字段

-- 方式一:  推荐 , 效率高 . 更直观

select id, username, password, name, gender, image, job, entrydate, create_time, update_time from emp;


 

-- 方式二:

select * from emp;


 

-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)  --- as 关键字可以省略

select name as '姓名' ,entrydate as '入职日期' from emp ;

select name '姓名' ,entrydate '入职日期' from emp ;


 

-- 4. 查询员工有哪几种职位(不要重复) -- distinct

select distinct job from emp;

3.2条件查询 

案例
'2000-01-01' ( 包含 ) '2010-01-01'( 包含 ) 之间的员工信息

-- 方式 1
select id, username, password , name, gender, image, job, entrydate,
create_time, update_time
from tb_emp
where entrydate >= '2000-01-01' and entrydate <= '2010-01-01' ;
-- 方式 2 between...and
select id, username, password , name, gender, image, job, entrydate,
create_time, update_time
from tb_emp
where entrydate between '2000-01-01' and '2010-01-01' ;

 

案例 :查询 姓名 为两个字的员工信息
select id, username, password , name, gender, image, job, entrydate,
create_time, update_time
from tb_emp
where name like '__' ; # 通配符 "_" 代表任意 1 个字符
案例:查询姓张的
select id, username, password , name, gender, image, job, entrydate,
create_time, update_time
from tb_emp
where name like ' %' ; # 通配符 "%" 代表任意个字符( 0 ~ 多个)

 

3.3分组查询 

分组其实就是按列进行分类 ( 指定列下相同的数据归为一类 ) ,然后可以对分类完的数据进行合并
计算。
分组查询通常会使用聚合函数进行计算。

 3.3.1聚合函数

count :按照列去统计有多少行数据。
在根据指定的列统计的时候,如果这一列中有 null 的行,该行不会被统计在其中。
# count(字段)
select count(id) from tb_emp;-- 结果:29
select count(job) from tb_emp;-- 结果:28 (聚合函数对NULL值不做计算)
# count(常量)
select count(0) from tb_emp;
select count('A') from tb_emp;
# count(*) 推荐此写法(MySQL底层进行了优化)
select count(*) from tb_emp;

select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having
分组后过滤条件 ] ;

 案例1:根据性别分组 , 统计男性和女性员工的数量

select gender,count(*) from emp group by gender;
案例 2 :查询入职时间在 '2015-01-01' ( 包含 ) 以前的员工 , 并对结果根据职位分组 , 获取员
工数量大于等于 2 的职位。
select job,count(*) from emp where job <='2015-01-01'group by job having count(*)>2;

 

 3.4排序查询

排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。
select 字段列表
from 表名
[ where 条件列表 ]
[ group by 分组字段 ]
order by 字段 1 排序方式 1 , 字段 2 排序方式 2 … ;
  1. ASC :升序(默认值)
  2. DESC:降序

案例:根据入职时间对公司的员工进行升序排序,入职时间相同,再按照更新时间进行降序排序。

# 根据入职时间对公司的员工进行升序排序,入职时间相同,再按照更新时间进行降序排序
select * from emp order by entrydate asc,update_time desc ;

3.5分页查询 

语法:

select 字段列表 from 表名 limit 起始索引 , 查询记录数 ;
案例 :查询 第 2 页 员工数据 , 每页展示 5 条记录
select id, username, password , name, gender, image, job, entrydate,
create_time, update_time
from tb_emp
limit 5 , 5 ; -- 从索引 5 开始,向后取 5 条记录

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】动态内存管理及其常见错误

文章目录 1、前言&#xff1a;为什么要有动态内存分布2、三种动态内存的创建方式及其释放2.1 malloc2.2 calloc2.3 ralloc2.4 free 3、常⻅的动态内存的错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使⽤free释放⼀块动态开…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…

NFT Insider #124:Aavegotchi 开启新一季稀有度挖矿,德克萨斯州奥斯汀市登陆 The Sandbox

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…

多线程libtorch推理问题

一、环境 我出问题的测试环境如下: pytorch1.10+cu113 pytorch1.10+cu116 pytorch2.2+cu118 libtorch1.10.1+cu113 libtorch1.10.1+cu111 libtorch1.9.0+cu111 二、问题现象 最近封装libtorch的推理为多线程推理的时候,遇到一个现象如下: (1)只要是将模型初始化放到一个…

【主函数参数和 fork 讲解】

主函数参数 main函数是有参数的&#xff0c;而且主函数可以在运行时传参数&#xff0c;举例如下&#xff1a; 【编写main.c文件】 主函数的三个参数&#xff1a;**参数个数&#xff0c;参数内容&#xff0c;环境变量**也可以这样写&#xff1a;环境变量最后一个元素为Null f…

wma格式可以用u盘插音响播放吗?

WMA&#xff08;Windows Media Audio&#xff09;文件格式是由微软公司创建的一种音频文件标准。大多数现代车载音频系统、MP3设备、音响设备都支持播放WMA文件。但是&#xff0c;一些老旧的车载音频系统或设备可能不支持WMA格式&#xff0c;可以将WMA文件转换为更普遍支持的格…

白话transformer(四):整体架构介绍

transformer现在是最主流的深度学习框架&#xff0c;尤其是大模型的流程让transformer的作用更加凸显&#xff0c;他可以对话、分类、生成文本等功能&#xff0c;那么他到底是如何工作的呢。 B站视频 1、背景知识铺垫 1.1、生成式模型 相信大家在使用手机聊天的输入法时&am…

【C++】string类模拟实现

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 构造函数和析构函数3. 遍历3.1 下标[]3.2 迭代器 4. Modifiers4.1 push_back和append4.2 4.3 insert4.4 erase4.5 swap 5.Capacity5.1 resize5.2 clear 6. 深浅拷贝6.1 浅拷贝&#xff08;值拷贝&#xff0…

wy的leetcode刷题记录_Day92

wy的leetcode刷题记录_Day92 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-22 前言 目录 wy的leetcode刷题记录_Day92声明前言2617. 网格图中最少访问的格子数题目介绍思路代码收获 695. 岛屿的最大面积题目介绍思路代码收获 2…

适合新生儿的奶瓶有哪些?五款高分新生儿奶瓶分享!

每一个有新生儿的家庭都一定会挑选奶瓶&#xff0c;但是因为市面有太多品牌和款式&#xff0c;让大家难以挑选&#xff0c;更为重要的是还有可能会不小心选到劣质的产品&#xff0c;不仅奶嘴的仿真度差、易胀气&#xff0c;还可能高温消毒后散发有害物质&#xff01;那么新生儿…

仿muduo库实现one thread one loop式并发服务器

文章目录 一、项目简介 二、项目整体认识 2、1 HTTP服务器 2、2 Reactor模型 三、预备知识 3、1 C11 中的 bind 3、2 简单的秒级定时任务实现 3、3 正则库的简单使用 3、4 通用类型any类型的实现 四、服务器功能模块划分与实现 4、1 Buffer模块 4、2 Socket模块 4、3 Channel模…

算法系列--递归(2)

&#x1f495;"什么样的灵魂就要什么样的养料&#xff0c;越悲怆的时候我越想嬉皮。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–递归(2) 前言:今天带来的是算法系列--递归(2)的讲解,包含六个和二叉树相关的题目哦 1.计算布尔⼆叉树的…

就业班 第二阶段 2401--3.21 day3 备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度较慢&…

005——串口移植(基于鸿蒙liteos-a)

目录 一、 Liteos-a中串口的使用 1.1 内核里打印 1.2 APP控制台 ​编辑 1.2.1 /dev/console 1.2.2 /dev/serial 1.2.3 /dev/uartddev-0 1. 总体介绍 2. device_t 3. drvier_t 4. uartdev_fops 1.2.4 uart_ops 二、 鸿蒙串口内部的一些机制&#xff08;流水账&…

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…

QGraphicsView的使用,view坐标,scene坐标,item坐标

Graphics View绘图构架 QGraphicsScene&#xff08;场景&#xff09;&#xff1a;可以管理多个图形项QGraphicsItem&#xff08;图形项&#xff09;&#xff1a;也就是图元&#xff0c;支持鼠标事件响应。QGraphicsView&#xff08;视图&#xff09;&#xff1a;关联场景可以让…

canvas跟随鼠标移动画带透明度的线

提示&#xff1a;canvas画线 文章目录 前言一、带透明度的线二、试错&#xff0c;只有lineTo的时候画&#xff0c;只有最后地方是透明度的三、试错&#xff0c;只存上一次的点&#xff0c;线会出现断裂的情况总结 前言 一、带透明度的线 test.html <!DOCTYPE html> &l…

Linux:执行命令的命令eval与Bash解析命令的方式

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 eval命令用于接收参数&#xff0c;并将这些参数作为一行命令执行&#xff0c;这也许会使人困惑&#xff0c;为什么我不能直接执行命令而需要使用eval命令间接执行呢&…

MySQL数据库事务介绍

前言 在MySQL数据库中&#xff0c;事务&#xff08;Transaction&#xff09;是指一组SQL语句的执行序列&#xff0c;这些SQL语句要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;保证数据库的一致性和完整性&#xff1b;用于操作量大、复杂度高的数据。 目录 一、…

Python之Web开发中级教程----Django站点管理

Python之Web开发中级教程----Django站点管理 网站的开发分为两部分&#xff1a;内容发布和公共访问 内容发布是由网站的管理员负责查看、添加、修改、删除数据 Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块, 需要按照如下步骤操作 : 1.管理界面本地…