【MySQL】详解

SQL语句的分类:

1.DDL(Data Definition Languages)语句:

数据定义语言 ,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象的定义。常用的语句关键字主要包括:create,drop,alter,rename,truncate

2.DML(Data Manipulation Languages)语句:

数据操纵语句 ,用于添加,删除,更新和查询数据库记录,并检查数据完整性,常用的语句关键字有:insert,delete,update等等

3.DCL(Data Control Languages)语句:

数据控制语句 ,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库,表,字段,用户的访问权限和安全级别。主要的语句的关键字包括:grant,revoke等等

4.DQL(Data Query Languages)语句:

数据查询语句 ,用于从一个或多个表中检索信息。主要的语句关键字包括:select

注:我们平常说的MySQL,其实主要指的是MySQL数据库管理系统
一个MySQL DBMS可以同时存放多个数据库,理论上一个项目就对应一个数据库
一个 数据库中还可以同时包含多个数据表,而数据表才是真正用于存放数据的位置
理论上一个功能就对应一个数据表
一个数据表又可以拆分成多个字段,每个字段就是一个属性
一个数据表除了字段以外,还有很多行,每一行都是一条完整的数据(记录)

SQL语句的基本操作

1. 数据库的基本操作:

①.创建数据库:

基本语法:

create database 数据库名称;

特别注意:在mysql中,当一条SQL语句编写完毕后,一定要使用分号;进行结尾,否则系统认为这条语句还没有结束。

创建数据库代db1,并同时指定编码格式

create database db1 default charset=utf8;

如果存在不报错(if not exists)

create database if not exists db1 default charset=utf8;

说明:不能创建相同名字的数据库!
扩展:编码格式:常见的gbk(中国的编码格式)与utf8(国际通用编码格式),后来5.6版本以后又进行了升级utf8mb4

②.查询已创建数据库:

基本语法:
显示所有数据库:

show databases;

显示某个数据库的数据结构:

show create database 数据库名称;
③.修改数据库信息:

在MySQL5以后的版本中,MySQL不支持更改数据库的名称。我们所谓的修改数据库主要修改的是数据库的编码格式
基本语法:

alter database数据库名称 default charset=新的编码格式;
④.删除数据库:

基本语法:

drop database 数据库名称;
2. 数据表的基本操作:

①数据表的创建:
基本语法:

create table 数据表名称(
字段1 字段类型 [字段约束],
字段2 字段类型 [字段约束],
…
);

案例:创建一个admin管理员表,拥有三个字段(编号,用户名称,用户密码)

mysql> use 数据库名称;   #use在MySQL中的含义代表选择,use数据库名称相当于选择指定的数据库
mysql> create table tb_admin(
	id tinyint,
	username varchar(20),
	password char(32)
) engine=innodb default charset=utf8;;

  • tinyint:微整型,范围-128 ~ 127,无符号型,则表示0 ~ 255
  • 表示字符串类型可以使用char与varchar,char代表固定长度的字段,varchar代表变化长度的字段
  • text:文本类型,一般情况下,用varchar存储不了的字符串信息,都建议使用text文本进行处理

②查询已创建数据表

mysql> use 数据库名称;
mysql> show tables   #显示所有数据表(当前数据库)
#显示数据表的创建过程(编码格式,字段等等信息)
mysql> show create table 数据表名称;
或
mysql> desc 数据表名称;

③修改数据表信息
1).数据表字段添加:
基本语法:

mysql> alter table 数据表名称 add 新字段名称 字段类型 first|after 其他字段名称;

选项说明:
first:把新添加的字段放在第一位
after 字段名称:把新添加字段放在指定字段的后面

2).修改字段名称或字段类型:
修改字段名称与字段类型(也可以只修改名称)
mysql> alter table 数据表名称 change 旧字段名 新字段名 类型;
仅修改字段的类型
mysql> alter table 数据表名称 modify 字段名 类型;
3).删除某个字段:
mysql> alter table 数据表名称 drop 字段名称;
4).修改数据表引擎(MyISAM或InnoDB):
mysql> alter table 数据表名称 engine=myisam;
5).修改数据表的编码格式:
mysql> alter table 数据表名称 default charset=gbk;
6).修改数据表名称:

mysql> rename table 旧数据表名称 to 新数据表名称;
或
mysql> alter table 旧数据表名称 rename 新数据表名称;
扩展:重命名的同时移动数据表到指定的数据库
mysql> rename table 数据库名称.旧数据表名 to 另一个数据库名称.新数据表名;

④.删除数据表:
mysql> drop table 数据表名称;

3. 数据的增删改查(重点):

①.数据的增加操作:
基本语法:
mysql> insert into 数据表名称([字段1,字段2,字段3...]) values (字段1的值,字段2的值,字段3的值.....);

特别注意:在SQL语句中,除了数字,其他类型的值都需要使用引号引起来,否则插入时会报错

第一步:准备一个数据表

mysql> use db1;
mysql> create table tb_user(
	 id int,
	 username varchar(20),
	 age tinyint unsigned,  #unsigned代表无符号型,只有0-255
	 sex enum('男','女')#enum代表枚举类型,多选一。只能从给定的值中选择一个
	 address varchar(255)
) engine=innodb default charset=utf8;

第二步:使用insert语句插入数据

mysql> insert into tb_user values (1,'小凯','18','男','北京朝阳');
mysql> insert into db_user(id,username,age) values (2,'小鹿','21');

②.数据的查询操作:
基本语法:

mysql> select * from 数据表名称 [where 查询条件];  #*代表查询所有字段,也可以只查询某些字段
mysql> select id,username from 数据表名称 [where 查询条件];

只查询id=2的小伙伴信息

mysql> select * from db_user where id=2;

查询年龄大于17岁的小伙伴的信息

mysql> select * from db_user where age>17;

③.数据的修改操作:
基本语法:
mysql> update 数据表名称 set 字段1=更新后的值,字段2=更新后的值,....where 更新条件;

特别说明:如果在更新数据时,不指定更新条件,则会把这个数据表的所有记录全部更新一遍

案例:修改’username=小鹿’这条记录,将其年龄更新为22岁,家庭住址更新为广东省广州市

mysql> update tb_user set age=22,address='广东省广州市' where username='小鹿';

案例:过了一年,每个人的年龄都增加了一岁

mysql> update db_user set age=age+1;

④.数据的删除操作:
基本语法:
mysql> delete from 数据表名称 [where 删除条件];

案例:删除tb_user表中,id=1的用户信息

mysql> delete from tb_user where id=1;

1).delete from 与truncate清空数据表操作:

mysql> delete from 数据表名称;
或者
mysql> truncate 数据表名称;

delete from 和truncate区别:

delete: 删除数据记录
		。数据操作语言(DML)
		。在事务控制里,DML语句要么commit,要么rollback
		。删除大量记录速度慢,只删除数据不回收高水位线
		。可以带条件删除
truncate:删除所有数据记录
		。数据定义语言(DDL)
		。不在事务控制里,DDL语句执行前会提交前面所有未提交的事务
		。清里大量数据速度快,回收高水位线(high water mark)
		。不能带条件删除

在这里插入图片描述

SQL查询语句(重点!!!)

基本语法:
mysql> select */字段列表 from 数据表名称 where 查询条件;

SQL查询五子句
基本语法:
	mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句;
	①.where 子句
	②.group by 子句
	③.having 子句
	④.order by 子句
	⑤.limit子句
特别注意:五子句的顺序是固定的,不能颠倒

where 子句:

在这里插入图片描述

like模糊查询,有点类似于管道命令中的数据检索。有两个关键字,%百分号与_下划线,%代表任意个字符,_代表任意的某个字符(只能匹配1个)

group by 子句(难重点):
  • group by子句的作用:对数据进行分组操作,为什么要进行分组呢?
    分组的目标就是进行分组统计
  • 在5.7以后的版本中,分组字段必须出现在select后面的查询字段中

根据给定 数据列 的查询结果进行分组统计,最终得到一个分组汇总表
注:一般情况下group by需与统计函数一起使用才有意义

在这里插入图片描述
案例:求tb_student表中,男同学的总数量和女同学的总数量

select sex,max(age) from tb_student group by sex;
having 子句:
  • having与where类似,根据条件对数据进行过滤筛选
  • where针对表中的列发挥作用,查询数据
  • having针对查询结果集发挥作用,筛选数据

案例:求每个学科中,学科人数大于3人的学科信息

select subject,count(*) from tb_studentl group by subject having count(*)>3;
order by 子句
  • 主要作用:就是对数据进行排序(升序,降序)

升序:从小到大

  • mysql> select * from 数据表名 … order by 字段名称 asc;(默认升序)

降序:从大到小

  • mysql> select * from 数据表名 … order by 字段名称 dese;
limit 子句:

limit 子句在开发项目中,主要应用于数据分页!
基本语法:

mysql> select * from 数据表名称 .... limit n;  #只查询满足条件的n条数据(限制数量)
或
mysql> select * from 数据表名称 .... limit m,n;  #从偏移量为m开始查询,查询n条记录,m的值从0开始

内连接查询(重点):

内连接查询,把两个表甚至多个表进行连接,然后拿表1中的每一条记录与表2中的每一条记录进行匹配,如果有与之对应的结果,则显示。反之,则忽略这条记录。

基本语法:

mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 inner join 数据表2 on 连接条件;

外连接查询(重点):

内连接查询要求:表1和表2中的每一条记录必须要一一对应,如果无法匹配,则这条记录会被忽略,那如果我需要保留表1和表2中的所有记录可以使用外连接查询

左外连接查询:
左外连接查询:把左表中的每一条数据都保留,右表匹配到结果就显示,匹配不到就显示为null
基本语法:

mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 left join 数据表2 on 连接条件;

右外连接查询:
右外连接查询:把右表中的每一条数据都保留,左表匹配到结果就显示,匹配不到就显示为null
基本语法:

mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 right join 数据表2 on 连接条件;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

随笔(一)

1.即时通信软件原理(发展) 即时通信软件实现原理_即时通讯原理-CSDN博客 笔记: 2.泛洪算法: 算法介绍 | 泛洪算法(Flood fill Algorithm)-CSDN博客 漫水填充算法实现最常见有四邻域像素填充法&#xf…

Studio One直播声音怎么调 Studio One直播没有声音输出怎么办 studio one如何设置声音变好听

Studio One做为新生代音乐工作站,凭借更低的价格和完备的功能,获得了音乐人和直播行业工作者的青睐,尤其是对硬件声卡的适配支持更好,特别适合用来配合线上教学和电商带货。 一、Studio One直播声音怎么调 在Studio One进行直播时…

AdaBoost集成学习算法理论解读以及公式为什么这么设计?

本文致力于阐述AdaBoost基本步骤涉及的每一个公式和公式为什么这么设计。 AdaBoost集成学习算法基本上遵从Boosting集成学习思想,通过不断迭代更新训练样本集的样本权重分布获得一组性能互补的弱学习器,然后通过加权投票等方式将这些弱学习器集成起来得到…

P8306 【模板】字典树

题目描述 给定 n 个模式串 s1​,s2​,…,sn​ 和 q 次询问,每次询问给定一个文本串 ti​,请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个(可以为 0 个&#…

Scissor算法-从含有表型的bulkRNA数据中提取信息进而鉴别单细胞亚群

在做基础实验的时候,研究者都希望能够改变各种条件来进行对比分析,从而探索自己所感兴趣的方向。 在做数据分析的时候也是一样的,我们希望有一个数据集能够附加了很多临床信息/表型,然后二次分析者们就可以进一步挖掘。 然而现实…

【深度学习基础】MacOS PyCharm连接远程服务器

目录 一、需求描述二、建立与服务器的远程连接1. 新版Pycharm的界面有什么不同?2. 创建远程连接3. 建立本地项目与远程服务器项目之间的路径映射4.设置保存自动上传文件 三、设置解释器总结 写在前面,本人用的是Macbook Pro, M3 MAX处理器&am…

【Linux】多线程_2

文章目录 九、多线程2. 线程的控制 未完待续 九、多线程 2. 线程的控制 主线程退出 等同于 进程退出 等同于 所有线程都退出。为了避免主线程退出,但是新线程并没有执行完自己的任务的问题,主线程同样要跟进程一样等待新线程返回。 pthread_join 函数…

接口测试(3)

接口自动化 # 获取图片验证码import requestsresponse requests.get(url"http://kdtx-test.itheima.net/api/captchaImage")print(response.status_code) print(response.text) import requestsurl "http://kdtx-test.itheima.net/api/login" header_da…

ffmpeg滤镜-drawtext-命令行

使用 FFmpeg 在视频上添加文字可以通过 drawtext 滤镜来实现。这个滤镜允许你指定字体、大小、颜色、位置等。 基本用法 以下命令将 "Hello, World!" 添加到视频的顶部左侧: ffmpeg -i input.mp4 -vf "drawtexttextHello, World\!:fontcolorwhite…

使用redis进行短信登录验证(验证码打印在控制台)

使用redis进行短信登录验证 一、流程1. 总体流程图2. 流程文字讲解:3.代码3.1 UserServiceImpl:(难点)3.2 拦截器LoginInterceptor:3.3 拦截器配置类: 4 功能实现,成功存入redis (黑…

飞速(FS)10G光模块选择指南

飞速(FS)的10G SFP光模块专为万兆每秒(10 Gbps)的数据传输设计,满足多样化网络需求。该光模块支持多种传输距离,具备热插拔和数字诊断监控功能,全面适配200品牌,为客户提供更灵活的选…

CTF php RCE(二)

0x04 php伪协议 这种我们是先看到了include才会想到,利用伪协议来外带文件内容,但是有些同学会问,我们怎么知道文件名是哪个,哪个文件名才是正确的,那么这里我们就得靠猜了 include函数 因为 include 是一个特殊的语…

Tomcat的安全配置

1、生产环境优化 2、部分漏洞修复 转载自风险评估:Tomcat的安全配置,Tomcat安全基线检查加固-CSDN博客

氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享

亲爱的创作者们,大家好!今天我们来聊聊视频创作中至关重要的一点——氛围感。一个好的视频,不仅要有视觉冲击力,还要能够触动观众的情感。那我们应该去哪里寻找这些充满氛围感且高级的视频素材呢?别急,我这…

telnet在windows和linux上的使用方法

telnet在windows上使用 ‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 windows上有自带的telnet工具的,这只是没有安装添加进来而已。 处理 方法: 打开控制面板-点击程序与功能 进到程序与功能界面,点击启用或…

Debezium报错处理系列之第114篇:No TableMapEventData has been found for table id:256.

Debezium报错处理系列之第114篇:Caused by: com.github.shyiko.mysql.binlog.event.deserialization.MissingTableMapEventException: No TableMapEventData has been found for table id:256. Usually that means that you have started reading binary log within the logic…

产品原型设计:从概念到实现的完整指南

如果你是一位产品经理,那么你一定会和原型图打交道,产品原型是产品设计方案和底层逻辑的可视化表达,需要完整清晰地表达出产品目的及需求,在整个产品创造的过程中发挥着不可或缺的作用。而对于一些刚入行的产品经理来说&#xff0…

C++基础语法

目录 一、命名空间 1.1 什么是命名空间 1.2 命名空间的定义 1.3 命名空间的使用 二、输入输出流 三、缺省参数 四、函数重载 五、内联函数 C是一种通用的编程语言,具有面向对象、泛型编程和低级内存操作等特性。它是由Bjarne Stroustrup在20世纪80年代初开发…

idea集成本地tomcat

由于网课老师使用的是eclipse,但是……本人用的是idea,所以不得不去找教程。 解决方案1: https://blog.csdn.net/weixin_54048131/article/details/131359793 这个地方,路径一定要到这个tomcat 否则不识别: 这里的JRE也要配置一下 新问题&…

VBA初学:零件成本统计之四(汇总计算)

第四步,最后进行汇总计算 汇总统计的计算 Sub count() Dim rng As Range Dim i As Long, j As Long Dim arr_s, arr, brr, crr, drr Dim rowscount As Long Dim X As Variant Dim rg As Single, xb As Single, zj As SingleMsgBox "汇总计算时间较久&#xff…