【MySQL】详解

news2024/11/27 9:56:05

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).删除某个字段:

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 连接条件;

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

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

相关文章

spark shuffle写操作——BypassMergeSortShuffleWriter

创建分区文件writer 每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters 分区writer写入消息 遍历所有消息,每一条消息都使用分区器选择对应分区的writer然后写入 生成分区文件 将分区writer的数据flu…

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册!

Python背记手册是一份非常实用的学习资料,它涵盖了Python语言的基础知识、语法规则、常用函数和模块等内容,对于初学者和有一定基础的Python程序员来说都非常有用。通过背诵这份手册,可以加深对Python语言的理解和记忆,提高编程能…

百度云智能媒体内容分析一体机(MCA)建设

导读 :本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂,采用人工的方式对视频进行分析处理,面临着效率低、成本高的困难。于是,MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术,为用户提供音视…

RFID电子锁在物流货运智能锁控管理的创新方案

物流货运锁控的现实挑战 易损性:传统锁具易受物理破坏,无法抵御恶意撬锁。 低效率:依赖人工操作,开锁速度慢,影响作业效率。 高成本:钥匙的制作、管理和丢失替换成本高昂。 监控缺陷:缺乏实…

笔记本如何录屏?3个方法分享给你

随着科技的飞速发展,录屏功能已不再局限于传统的教育或游戏领域,而是成为了大众都能用得到的创作、分享、记录生活的得力助手。同时,在生活中人们更多地使用到笔记本电脑,笔记本电脑有着其便携性、高效能和丰富软件资源&#xff0…

8.13 矢量图层面要素反转面要素渲染(Inverted polygons Renderer)

前言 本章介绍矢量图层面要素反转面要素(Inverted polygons Renderer)的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 反转面要素(Inverted polygons Renderer) 反转面要素渲染常用于掩膜数据。 反转面要素(Inverted polygons Renderer)是一种渲染方…

python库(2):Passlib库

1 Passlib简介 Passlib库就是一个强大的工具,专门用于密码的安全存储和验证。本文将介绍Passlib库的基本概念、功能和使用方法,帮助更好地理解和应用密码安全技术。 Passlib是一个用于密码加密、哈希和验证的Python库,它提供了多种密码哈希…

adb不插usb线通过wifi调试

说起做手机开发也有好多年了,说来惭愧,我最近才知道安卓手机是可以不插数据线进行开发调试的。起因是公司近期采购了一批安卓一卡通设备,需要对其进行定制开发APP,但是由于我插USB调试发现没有反应。通过询问厂家才知道可以通过WIFI进行调试。…

服务器U盘安装Centos 7时提示Warning:/dev/root does not exist

这是没有找到正确的镜像路径导致的,我们可以在命令行输入ls /dev看一下有哪些盘符 像图中红色圈起来的就是我插入U盘的盘符,大家的输几盘可能做了多个逻辑盘,这种情况下就可以先将U盘拔掉再ls /dev看一下和刚才相比少了那两个盘符&#xff0c…

Linux服务器性能参数指标

【摘要】一个基于 Linux 操作系统的服务器运行的同时,会表征出各种各样参数信息,这些蛛丝马迹往往会帮助快速定位跟踪问题。 这里只是一些简单的工具查看系统的相关参数,当然很多工具也是通过分析加工 /proc、/sys 下的数据来工作的&#xff…

源代码防泄漏的制胜法宝——沙箱

沙箱技术作为现代信息安全领域的一种重要手段,其在源代码防泄密方面的应用愈发受到业界的关注。源代码作为企业或组织的核心资产,一旦泄露,不仅可能导致知识产权的流失,还可能对企业运营造成重大影响。因此,利用沙箱技…

云微客短视频矩阵全域营销,更高效的获客引流方式!

在抖音这样一个拥有海量用户和内容的短视频平台上,单一账号往往难以覆盖我们的客户群体,甚至于每天发布四五条视频,所引发的流量也是微乎其微的。在竞争如此激烈的市场环境中,商家企业无不想方设法追求更高效的获客引流方式&#…

MUNIK解读ISO26262--什么是DFA

我们在学习功能安全过程中,经常会听到很多安全分析方法,有我们熟知的FMEA(Failure Modes Effects Analysis)和FTA(Fault Tree Analysis)还有功能安全产品设计中几乎绕不开的FMEDA(Failure Modes Effects and Diagnostic Analysis),相比于它们…

内存管理(RTOS)

目录 #RTOS内存管理介绍 #堆定义 #栈定义 #RTOS四种堆分配方案 #Heap_1.c #Heap_2.c #Heap_3.c #Heap_4.c #Heap_5.c #stm32cublemx对堆的配置 #配置堆相关函数 #申请内存函数 #钩子函数 前言:本课程参考韦东山老师视频,连接放在最后。 #R…

打包技术 水库生态流量监控调度方法和计算方法

网盘 https://pan.baidu.com/s/1k0sx3rSkoOqQVIS50iwPzA?pwd9vej 一种兼顾蓄水期导流隧洞生态流量泄放和永久堵头完工后隧洞充水排气的方法.pdf 产漂流性卵鱼类自然繁殖的河流生态流量计算方法.pdf 促进鱼类产卵的梯级水库生态调度方法.pdf 反推水库入库流量过程的优化修正方…

从0开始搭建Spring-Cloud微服务项目

文章目录 1. 安装Java开发环境配置环境变量 2. MySQL安装与配置环境变量配置配置MySQLNavicat配置Idea配置 1. 安装Java开发环境 安装Java开发环境主要涉及下载Java开发工具包(JDK)并配置环境变量,以便在系统中正确运行Java程序。 下载JDK …

APP逆向 day12 JNI开发

一.前言 今天和大家讲讲jni开发,为什么要和大家介绍呢,因为jni开发是安卓开发中经常使用的,其作用就是java调用c代码,或者c调用java代码。一般一些难一点的app都是采用这个方式,采用这个方式的好处就是更难逆向&#…

2024机器遗忘(Machine Unlearning)技术分类-思维导图

1 介绍 机器遗忘(Machine Unlearning)是指从机器学习模型中安全地移除或"遗忘"特定的数据点或信息。这个概念源于数据隐私保护的需求,尤其是在欧盟通用数据保护条例(GDPR)等法规中提出的"被遗忘的权利…

6月30日功能测试Day10

3.4.4拼团购测试点 功能位置:营销-----拼团购 后台优惠促销列表管理可以添加拼团,查看拼团活动,启动活动,编辑活动,删除活动。 可以查看拼团活动中已下单的订单以状态 需求分析 功能和添加拼团 商品拼团活动页 3…

【简历】郑州某二本学院:JAVA实习简历指导,基本没有面试机会

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这份简历是一个25届二本同学找JAVA实习的简历,从整体来看,简历版式没有问题,非常清晰。 但是内容特…