MySQL8.0.36-社区版:通用语法(2)

语法格式规范

sql语句可以以单号或者多行为书写,以分号结尾

可以使用空格或者缩进来增加可读性

mysql的sql语句不区分大小写,但是推荐大写关键字

 注释分为单号注释和多行

单号注释:--内容  或者   # 内容

多行注释/*  注释内容 */


sql语句的分类

sql的语句一共分为4类,分别为:

DDL:数据定于语言,用来定于数据库对象(数据库,表,字段)

DML:数据操作语言,用来对数据库中表的内容进行增删改查

DQL:数据查询语言,用来查询数据库中表的内容

DCL:数据控制语言,用来创建数据库用户,控制数据库的访问权限


DDL

查询所有数据库

show databases;

在之前的规范中,mysql的关键字是不区分大小写的

SHOW DATABASES;

这样写也是对的

 创建数据库:create database 库名;

create database a;

这样就创建好了

此外还可以在创建时进行检测,如果有这个数据库则不创建,如果没有这个数据库则创建,这样的话即使数据库有或者没有,那么都不会报错

刚刚上面已经有了a数据库,再创建a数据库那就会报错

create database if not exists a;

这样他没有任何报错,而数据库也没有任何变化

如果要创建指定字符集的数据库,那么可以这样

create database if not exists c default charset utf8mb4;

我创建了一个名为c的数据库他的字符集为utf8mb4

进入数据库:use 库名;

use a;

在数据库中是可以直接切换数据库的,因为我没有b数据库,所以他报错了

 查看当前所在数据库

select database();

当前我是在a数据库

 删除数据库:drop database 库名;

drop database c;

成功删除

如果我们删除不存在的数据库时候,他会报错,要是也想让他有则删除没有也不报错,都不报错可以这样写

drop database if exists c;

这样写的话即使他没有的话也不会报错

 查询库里的表

show tables;

发现什么都没返回,因为我现在在a数据库里,这是刚刚我新建的,他里面现在还没创建任何的表。

切换到“sys”数据库里进行查看一下,这个是mysql默认自带的数据库

这个里面就带有很多的表

创建表:create table 表名 (字段名 类型…… [comment 后面的是注释写不写都行])[comment];

注意:现在先切换回刚刚新建的"a"数据库,不要在系统库中做改动

create table user( id int comment '编号', name varchar(50) comment '名字', age int comment '年龄', gender varchar(1) comment '性别' ) comment '用户表';

里面的int和varchar是数据类型,括号里的50就是50个字符长度,类似c语言中的变量,每个数据都对应着变量,int只能写整形,varchar只能写字符,在mysql的数据类型中远远不止这些下面会讲到

create table user_1(
id int comment '编号',
name varchar(50) comment '名字',
age int comment '年龄',
gender varchar(1) comment '性别' 
)comment '用户表';

这样写也是可以的,这样写和上面那样是一个样子,只不过下面这个可读性更高,更易理解

我这创建了两个表他俩的内容都是一样的

 查看表结构:describe 表名; 或者  desc 表名;  这俩都是一样的

desc user;

可以看到表的字段信息,但是不够详细下面展示一个可以看到详细信息的命令

详细查看表结构:show create table 表名;

show create table user;

可以详细的看到,表的字段以及注释,还有没讲过的ENGINE=InnoDB 引擎(后面会讲)

以及字符集等信息

添加字段:alter table 表名 add 新的字段名 数据类型 [comment 注释];

现在我一共有4个字段也就4个表头,如果我想再加一个字段的话可以这样

alter table user add new_id int comment '新的身份标识';

comment的注释信息可以加或者不加都行

修改字段和字段类型

如果现在我某个字段的类型是int我想把他修改成char或者是varchar修改成int可以这样

修改字段类型:alter table 表名 modify 字段名 新类型;

我现在把第一个字段id修改成char类型的可以这样

alter table user modify id char(10);

改字段名和类型:alter table 表名 change 旧的字段名 新的字段名 类型 [comment 注释];

现在把字段名字和类型一起改了

alter table user change id old_id int ;

成功修改

删除字段:alter table 表名 drop 指定的字段名;

将某个指定的字段删除

这样就删除成功了

 修改表名:alter table 表名 rename to 新表名;

alter table user rename to new_user;

成功的将user表改为了new_user表

删除表

删除表有两种办法

1.将表带数据全部删除

drop table if exists user_1;

这个是将user_1的表删除,如果没有的话也不报错

2.删除表内容

truncate table new_user;

这个是删除表然后重新创建一样结构的表,也就是只删除内容不会删除表结构

注意:上面两种办法都会导致数据的丢失


 DML

dml主要是对数据的增删改操作,关键字分别为

添加数据insert

修改数据update

删除数据delete

在开始之前先去练习一下创表创库,先去创建一个名为mymysql的数据库在里面创建一个名为mysql的表 表头分别为id,name,age

插入数据

插入数据一共有四种办法

insert into 表名(字段名1,字段名2,…) values (值1,值2,…);
# 在指定的表内指定的字段插入对应的数据
insert into 表名 values (值1,值2,…);
# 给表内所有字段插入数据
insert into 表名(字段名1,字段名2,…) values (值1,值2,…),(值1,值2,…),(值1,值2,…);
# 在指定的表内指定的字段插入多个对应的数据
insert into 表名 values (值1,值2,…),(值1,值2,…),(值1,值2,…);
# 给表内所有字段插入多个数据

注意:

插入数据时,指定的字段要与值一 一对应

字符串和日期类型的数据要使用引号

插入数据的大小必须在指定的范围以内才行

INSERT INTO mymysql.mysql (id,name,age) values(1,'张三',11)

上面这句意思是给mymysql库下的mysql表插入内容,id为1,name为张三age为11

INSERT INTO mymysql.mysql values(2,'李四',13)

上面这个意思是给对应着的id为2name为李四age为13

INSERT INTO mymysql.mysql(id,age) values(2,13),(3,14),(52,113),(42,123);

意思是给id和age的字段插入多行内容那么name没有对应的那就是null空的

INSERT INTO mymysql.mysql(name) values("a1"),("a2"),("a3"),("a4");

再给对应name的字段插入多个内容那他的其他字段内容就是空

INSERT INTO mymysql.mysql values(1,"b1",1),(2,"b2",2),(3,"b3",3),(4,"b4",4);

这样一下就插入了多行数据了

修改数据:update 表名  set 字段1=值1 ,字段2=值2,…… [ where 条件];

将表内指定的数据进行修改 ,如果没有where的话那么整个表内容被匹配上的内容,那就全被修改,如果有where只会去修改where匹配上的内容

--现在我要求修改id为1的,让他name变成aaa

update mymysql.mysql set name='aaa' where id = 1;

只要是被匹配上的就都被修改了

现在我要让a3的age变成100

update mymysql.mysql set age = 100 where name = 'a3';

现在我要让所有的age都变成50

update mymysql.mysql set age = 50;

这样就修改成功了

删除语句:delete from 表名 [where 条件];

delete的条件可以有也可以没有,如果没有的话那他会把整个表中的数据删除

delete不能删除某一个字段内容,只会把整个字段对应的内容删除,如果需要删除可以使用update改为null

--现在我要把整个名为aaa的内容删除掉

delete from mymysql.mysql where name = "aaa" ;

发现没有aaa的数据了

我现在再把整个表中的数据全部删除掉

delete from mysql;

整个表的内容就没了


DQL

我这里随便找了个练习的模板

create table student (s_id int,s_name varchar(8),s_birth date,s_sex varchar(4));insert into student values
(1,'赵雷','1990-01-01','男'),
(2,'钱电','1990-12-21','男'),
(3,'孙风','1990-05-20','男'),
(4,'李云','1990-08-06','男'),
(5,'周梅','1991-12-01','女'),
(6,'吴兰','1992-03-01','女'),
(7,'郑竹','1989-07-01','女'),
(8,'王菊','1990-01-20','女');

指定字符查询:select 字段1,字段2,…  from 表名;

我现在要查询他们的名字还有性别

select s_name,s_sex from student;

现在查询的就是指定的内容

查询所有字段:select 字段1,字段2,…  from 表名; 或 select *  from 表名; 

select * from student;

这样也可以直接查询出来全部的内容,而在实际开发中,不应该写某些通配符去描述,这样可能会误导或者难以理解,应该去遵守开发规范

select s_id,s_name,s_birth,s_sex from student;

查询出来结果起别名:select 字段名 as '别名',字段名  as '别名' from student;

select s_id as '编号',s_name as '名字',s_birth as '出生日期',s_sex  as '性别' from student;

 没有as也可以的

select s_id as '编号',s_name '名字',s_birth  '出生日期',s_sex '性别' from student;

可以看到有没有别名都是一样的

去重查询:select distinct 要去重的字段 from 表名; 

select distinct s_sex from student;

直接就去掉重复了

条件查询

条件查询需要在末尾加上where,where后面就是条件查询,条件可以是比较运算符,可以是逻辑运算符

where后面加上的判断条件可以是如上的

条件查询-等于

要在这个表中,查询一个条件,id为6的信息

 select * from student where s_id = 6;

条件查询-小于

查询id号小于6的数据

select * from student where s_id < 6;

条件查询-小于等于

select * from student where s_id <= 6;

 条件查询-查询空的值

现在我们临时加一个数据

insert into student values (7,"张三",null,男 );

我们再用select查出来

select * from student where  s_birth is null;

这样就查出来了

条件查询-有信息的值

刚刚是查询空的,现在是查询有的

select * from student where  s_birth is not null;

现在出生日期为空的就没了

条件查询-不等于

 查询s_id不等于1的数据

select * from student where s_id != 1;

或者

select * from student where s_id <> 1;

都是正确的

条件查询-逻辑与

现在我要查询一个s_id号3到6的数据

select * from student where s_id >= 3 and s_id <= 6;
select * from student where s_id >= 3 && s_id <= 6;
select * from student where s_id between 3 and 6;

between后面是最小值,and后面是最大值

 条件查询-或

查找条件难或女

select * from student where s_sex = '男' or s_sex = '女';
select * from student where s_sex in ('男','女');

条件查询-模糊查询

现在我要查询两个名字的人

select * from student where s_name like '__';

如果要是查询1个字符的呢

没有就对了,因为这些数据里没有一个字的

条件查询-模糊查询

我要查询一个出生日期为1结尾的

select * from student where s_birth like '%1';

 

聚合函数

都是作用于表中某一列的

所有的null值是不参与聚合函数的运算的

聚合函数-count

现在我们统计一下一共有多少个用户

select count(*) from student;

 

我们这样算是9个,如果去计算出生年月的个数

发现是8个,因为null他不参与运算

聚合函数-平均数

我们这里就来求一下id的平均数

select avg(s_id) from student;

 

函数聚合-最小值

求id里面的最小值

select min(s_id) from student;

聚合函数-最大值

在id里面找最大值

select max(s_id) from student;

 

聚合函数-求和

我现在要在id从2到6之间的用户id之和 

select sum(s_id) from student where s_id  between 2 and 6;

求出来是20

分组查询

 在表中查询一下男女一共有几人

select s_sex,count(*) from student group by s_sex;

排序查询

语法:select 字段 from 表名 order 字段1 排序方式1 , 字段2 排序方式2;

他的排序方式默认分为两种:升序asc(默认),降序desc 

我着准备了一张表,如果你没有的话可以去网上搜索一下练习案例

排序查询-升序查询

现在我要以他们的出生日期进行升序排序

他默认是就是升序的所以可以用以下两条命令

select * from student order by s_birth;

select * from student order by s_birth asc;

都是一样的

排序查询-降序查询 

同样我还要以出生日期作为降序排序

select * from student order by s_birth desc;

排序查询-多语句查询

我发现了出生日期有重复的,所以我现在要让当出生日期重复了,就让id来进行升序

select * from student order by s_birth ,s_id asc;

 

如果当出生时间一样,让id降序,也是一样的,就改个排序规则就行

select * from student order by s_birth ,s_id desc;

分页查询

语法:select 字段 from 表名 limit 起始索引,查询记录数;

起始索引的值是从0开始的,起始索引=(查询页码-1)* 每页显示记录数。

查询记录数就是每页展示的内容数量,如果有10个展示的数据,那查询记录数就是10

分页查询在各个数据都有不同的表现,mysql是limit

如果查询的第一页数据,起始索引可以省略,直接简写位limit 10

分页查询

还拿上面这个表来分页展示,我一章表上2个内容,那么我的第一章表的起始索引就是0,查询记录就是2

select * from student limit 0 ,2;

第二章就是2,2

select * from student limit 2,2;

第三章就是4.2

select * from student limit 4,2;

这样就查询成功了

 DQL运行顺序

最上面的是最先执行的,依次往下


DCL

 dcl是数据控制语言,用来管理数据库,用户,控制数据库的访问权限

这里我演示以下对用户的管理的一系列方法

查询用户

用户都是在mysql库里的uses表

use mysql;
select * from user;

​​​​​​

我这里使用了图形化工具为了更加方便的演示

可以看到对应的权限,和当前所有的用户

(%就是可以来自任何地方连接,localhost就是只能本地连接)

新建用户

现在我要创建3个用户,分别是zs只能在本地进行登录,ls可以在任意地方进行登录,ww只能在192.168.1.0整个网段进行登录,密码都是1234

create user 'zs'@'localhost' identified by '1234';
create user 'ls'@'%' identified by '1234';
create user 'ww'@'192.168.1.%' identified by '1234';

成功创建了三个不同登录区域的用户,现在我们再到user表里看一下

成功添加3个用户,但是当我们登录进去这些用户的任意一个,就会发现就2个数据库

因为当前我们没有给他们任何权限,所以他其他数据库都看不到

修改用户密码

现在我要把zs整个用户的密码修改为123321

alter user 'zs'@'localhost' identified with mysql_native_password by '123321';

 删除用户

现在我要将ww这个用户给他删掉

drop user 'ww'@'192.168.1.%';

权限控制

mysql主要分为这几类权限

​​​​​​​

权限控制-查询权限

我现在要查询一下ls用户的权限

show grants for 'ls'@'%';

 

USAGE代表只能去登录,没有其他的任何权限

 权限控制-授予权限

 我现在要授予ls的mysql数据库所有表的全部管理权限

grant all on mysql.* to 'ls'@'%';

成功的赋予权限

现在我登录ls看一下

可以看到mysql这个数据库了

权限控制-撤权

现在我要把ls的所有权限撤销

先切换回root用户

revoke all on mysql.* from 'ls'@'%';

 

可以看到权限又没了

撤销成功

 


数据类型

mysql的数据类型非常多,主要分为三类:数值类型,字符串类型,日期时间类型

这些是数值类型,前五种是整形,后五种是浮点 他们占用的空间大小不一样,所以存储数值的范围也不一样

create table a (age int unsigned);

这个就是一个无符号的int整形那么他的范围就是0到4294967295

字符串类型前两个比较常用,定长字符串意思是你定义了10个的长度他就占用10个如果你没写够10个那么他会用空格填补,如果是varchar的话,你虽然定义了10个但是你写了2个字符,他就占用2个字符,这样的对比下char的性能最好,varchar没有char性能好,因为char不需要去计算空间占用,你给多少就是多少。

这个是时间的类型

   

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

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

相关文章

面试算法-175-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

数据结构 -- 数组

本篇文章主要是对数组的实操&#xff0c;所以对数组的概念不在赘述&#xff0c;了解更多数组相关可参照链接 Java数组的概念及使用-CSDN博客 1、DynamicArray类 package com.hh.algorithm.array;import java.util.Arrays; import java.util.Iterator; import java.util.functi…

记录--病理切片图像处理

简介 数字病理切片&#xff0c;也称为全幻灯片成像&#xff08;Whole Slide Imaging&#xff0c;WSI&#xff09;或数字切片扫描&#xff0c;是将传统的玻片病理切片通过高分辨率扫描仪转换为数字图像的技术。这种技术对病理学领域具有革命性的意义&#xff0c;因为它允许病理…

每日OJ题_BFS解决最短路③_力扣127. 单词接龙

目录 ③力扣127. 单词接龙 解析代码 ③力扣127. 单词接龙 127. 单词接龙 难度 困难 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 每一对相邻的单词只差一个字母。…

互联网元搜索引擎SearXNG

最近有个很火的项目叫 FreeAskInternet&#xff0c;其工作原理是&#xff1a; 第一步、用户提出问题第二步、用 SearXNG&#xff08;本地运行&#xff09;在多个搜索引擎上进行搜索第三步、将搜索结果传入 LLM 生成答案 所有进程都在本地运行&#xff0c;适用于需要快速获取信…

Python数据分析与应用 |第4章 使用pandas进行数据预处理 (实训)

表1-1healthcare-dataset-stroke.xlsx 部分中风患者的基础信息和体检数据 编号性别高血压是否结婚工作类型居住类型体重指数吸烟史中风9046男否是私人城市36.6以前吸烟是51676女否是私营企业农村N/A从不吸烟是31112男否是私人农村32.5从不吸烟是60182女否是私人城市34.4抽烟是…

【LAMMPS学习】八、基础知识(3.2)使用chunks计算系统属性

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

蓝桥杯 — —灵能传输

灵能传输 友情链接&#xff1a;灵能传输 题目&#xff1a; 输入样例&#xff1a; 3 3 5 -2 3 4 0 0 0 0 3 1 2 3输出样例&#xff1a; 3 0 3思路&#xff1a; 题目大意&#xff1a;给出一个数组&#xff0c;每次选择数组中的一个数&#xff08;要求不能是第一个数与最后一个…

大数据几种任务调度工具

文章目录 一、DolphinScheduler概述和部署1、DolphinScheduler简介1.1 概述1.2 核心架构 2、DolphinScheduler部署模式2.1 概述2.2 单机模式2.3 伪集群模式2.4 集群模式 3、DolphinScheduler集群模式部署3.1 集群规划与准备3.2 下载与配置部署脚本3.3 初始化数据库3.4 一键部署…

maven引入外部jar包

将jar包放入文件夹lib包中 pom文件 <dependency><groupId>com.jyx</groupId><artifactId>Spring-xxl</artifactId><version>1.0-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/Spr…

电商技术揭秘二十四:无人仓储与自动化技术

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

华媒舍:7种方式,打造出旅游媒体套餐

现如今&#xff0c;伴随着旅游业发展与繁荣&#xff0c;更多旅游业发展从业人员越来越重视产品营销品牌基本建设&#xff0c;希望可以将自己的度假旅游产品和服务营销推广给更多的潜在用户。而建立一个优秀的旅游业发展媒体套餐内容品牌是吸引目标客户的重要步骤。下面我们就详…

Golang | Leetcode Golang题解之第30题串联所有单词的子串

题目&#xff1a; 题解&#xff1a; func findSubstring(s string, words []string) (ans []int) {ls, m, n : len(s), len(words), len(words[0])for i : 0; i < n && im*n < ls; i {differ : map[string]int{}for j : 0; j < m; j {differ[s[ij*n:i(j1)*n]…

把握零碎时间,开启长期副业兼职之旅!在家也能轻松赚钱!

转眼间&#xff0c;2024年已悄然走过三分之一。这一年&#xff0c;外界环境似乎并不那么友好&#xff0c;但对我而言&#xff0c;我的月收入仍然相对稳定。我找到的副业让我每月能赚到3000元以上&#xff0c;这让我深感庆幸。 现实中&#xff0c;只依赖主业工资的日子确实艰辛…

更改ip地址的几种方式有哪些

在数字化时代&#xff0c;IP地址作为网络设备的标识&#xff0c;对于我们在网络世界中的活动至关重要。然而&#xff0c;出于多种原因&#xff0c;如保护隐私、访问特定网站或进行网络测试&#xff0c;我们可能需要更改IP地址。虎观代理将详细介绍IP地址的更改方法与步骤&#…

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…

反爬虫之代理IP封禁-协采云IP池

反爬虫之代理IP封禁-协采云IP池 1、目标网址2、IP封禁4033、协采云IP池 1、目标网址 aHR0cDovL3d3dy5jY2dwLXRpYW5qaW4uZ292LmNuLw 2、IP封禁403 这个网站对IP的要求很高&#xff0c;短时间请求十几次就会遭关进小黑屋。如下图&#xff1a; 明显是网站进行了反爬处理&…

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错&#xff1a; Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

OpenCV-AMF算法(自适应中值滤波Adaptive Median Filtering)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 AMF&#xff08;Adaptive Median Filter&#xff0c;自适应中值滤波&#xff09;是一种用于图像处理和信号处理的滤波算…

蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

本题链接&#xff1a;蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 题目&#xff1a;​​​​​​​ 样例&#xff1a; 输入 2 3.14 输出 13 思路&#xff1a; 根据题意&#xff0c;结合数据范围&#xff0c;这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与…