MySql(二)之高级使用

MySQL 教程:MySQL IN 语句(高级) 分享三个有趣的网站,或许能提高你的学习兴趣,第三个最好玩!MySQL IN 语句的 基本用途是 将一列与多个值进行比较。MySQL IN 语句还有一些高级用法,它们构成了有趣的用例。考虑示例表 user_table ,其中 5 个用户被分配了不同的权限,如管理员、超级用户等,基于值 1 或 0,| 用户 ID | is_admin | is_superuser | is_staff | is_active | 阅读详情

##概述

本节主要讲解的知识有:

  1. 数据类型的使用。
  2. 主键,字段值唯一,不能为null等设置。
  3. sql语句中的表达式。
  4. 排序。
  5. 分页
  6. 聚合函数。
  7. 分组。
  8. sql注入及防止sql注入的方法。

##数据类型的使用

数据库中的数据类型很多,下面仅仅讲解项目中常用的数据类型。

数据类型分为四大类:整数,小数,字符串,时间。

一,整数

整数类型及占用的字节数如下:

数据类型占用字节数(取值范围)
tinyint(m)1个字节(-128~127)
smallint(m)2个字节(-2的16次方~2的16次方-1)
mediumint(m)3个字节(-2的24次方~2的24次方-1)
int(m)4个字节(-2的32次方~2的32次方-1)
bigint(m)8个字节(-2的64次方~2的64次方-1)

说明:

  1. 选择数据类型的原则是:在满足取值范围的前提下优先选择占用字节数小的。
  2. int数据类型与java中的int取值范围相同,bigint数据类型与java中的long取值范围相同。
  3. 实际开发中一般选择int,如果int不满足要求时再选择bigint。对于仅仅表示类型的整数可以选择binyint。

注意:int数据类型后面可以带参数,如:


create table person (id int(11),name varchar(10));

此时的11并不表示字节的长度,也不表示取值范围。因为int类型以及决定了数据的长度和取值范围。网上说11表示展示长度,但这个又有什么实质意义呢?以后再详细研究。

 

二,小数

小数类型及占用的字节数如下:

数据类型占用字节数(取值范围)
float(n,d)单精度浮点型   4字节
double(n,d)双精度浮点型   8字节

说明:float和double的取值范围分别与java中的float和double对应。

注:float和double后面可以根两个参数,如下:

create table person (id int(11),price double(10,2));

此时10表示总数据位数,2表示小数位数,即整数位数是8.

三,字符串

字符串数据类型如下:

数据类型说明
char(n)固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符

说明:

  1. 最常使用的数据类型是varchar,varchar后面可以指定字符长度,最多是6.5万个。(注:是字符长度,不是字节长度,具体字节长度取决于编码格式)
  2. char的储存和查找效率都高于varchar。
  3. text与varchar对比完全没有优点,text不能设置索引,不能设置默认值。
  4. text的优点是:不能设置长度,此时就没有了具体长度限制。

四,时间类型

时间数据类型如下:

数据类型说明:
date日期,只包含年月日
time时间,只包含时分秒
datetime日期和时间
timestamp日期和时间

最常用的是datetime和timestamp,下面说明这个数据类型的区别。

datetime存入的是时间,没有时区的概念。timestamp是时间戳,同时间戳在不同时区对应不同时间。

datetime和timestamp的时间范围不同。datetime是任意时间范围。timestamp是1970年到2038年。

一般在操作当前时间时使用timestamp,操作历史或者很远的未来时间时使用datetime.

 

##主键,字段值唯一,不能为null等设置

一,主键的设置

在数据库中,通常要选择一个字段或多个字段作为这条数据的唯一标识,一个字段则称为唯一主键,多个字段则称为组合主键。

主键具有唯一性,即主键不能重复。对于组合主键多个字段不能同时重复。

主键的设置是在创建数据库时,示例如下:

create table person (
id int(11) primary key,
name varchar(10),
sex varchar(2),
age int
);

说明:上面sql中使用primary key关键词将id设为表的主键。

设置主键为自增长:既然主键是唯一性,那么需要操作数据时保证主键唯一,如果主键每次都自增长就确保了主键唯一。设置自增长的方法:

create table person (
id int(11) primary key auto_increment,
name varchar(10),
sex varchar(2),
age int
);

##字段值唯一

一个表中只能设置一个主键,或者一组主键,如果其他字段也不能重复则可以使用unique关键字设置。

create table user(
	ID int primary key auto_increment,
	PHONE_NUM  varchar(11) unique
);

说明:保证手机号不能重复。当手机号重复时则插入失败。

##字段值不能为null

create table user(
	ID int primary key auto_increment,
	USERNAME varchar(100) not null unique,
	GENDER   char(1) not null,
);

说明:使用not null设置字段值不能为null。

##给字段设置默认值

create table person (
id int(11) primary key auto_increment,
name varchar(10) default '',
sex varchar(2) default 'nan',
age int default 0
);

 

##sql语句中的表达式

在做查找,修改,删除操作时往往需要where条件,在条件语句中需要有大于,小于,and,or等运算符,带有运算符的sql语句称为表达式。

表达式分为算法表达式和逻辑表达式。具体如下:

注:in后面的元素不能超过1000个。当元素太多时in的效率会很低,可以使用exist语句替代。

一,like的详细使用

like是模糊查询的关键词。使用情况有如下三种:

--必须以张三开头
select * from person where name like '张三%';
--必须以张三结尾
select * from person where name like '%张三';
--必须包含张三,且张与三紧挨着
select * from person where name like '%张三%';
--必须包含张三,且张在三的前面
select * from person where name like '%张%三%';
--必须以张三开头,且只能包含三个字
select * from person where name like '张三_';

 

##排序

排序的关键词是order by。使用示例如下:

select * from person order by age

得到结果样式如下:

此时我们看出,以age排序后,age依次增大。

默认的排序是升序。降叙排列使用关键词desc,如下:

select * from person order by age desc

结果样式如下:

注:升序排序也可以加关键词asc,是ascending的缩写,但关键词asc常常省略不写。降叙desc是Descending单词的缩写。

注:排序可以同时指定两个关键词,如下:

select * from person order by age desc,name asc

说明:

  1. 两个关键词以第一个为准,第一个字段相同时则按第二个排序。
  2. 不同字段需要分别指定升序还是降序。

##分页

分页使用关键词limit。示例如下:

select * from person limit 1,2

结果如下:

说明:

  1. 1的意思是从1开始,但不包括1。2的意思是取两条。所以此时取出的是第2和第3条数据。
  2. 如果limit2,3则取出的是第3,第4和第5条。
  3. 第一个数可以省略。limit 2 表示从0开始,取出两条,即第1和第2条。

注:分页与排序同时使用时,必须先排序,后分页,如下:

select * from person order by age limit 1,2

##聚合函数

sql语句中提供了一些聚合函数,如下:sum()求和,count()统计数量,max()求最大值,avg()求平均值.具体使用如下:

1,sum()求和

--一般使用
select sum(age) from person ;
--添加where条件
select sum(age) from person WHERE id > 2;

注:sum的意思是求和,即通过select age  from person语句得到的所有age相加之和。sum方法和可以这么使用:

select sum(1) from person

注:这个意思是使用select 1 from person语句获取的所有数据相加,此时person有4条数据,sum(1)就是4,这种方式可以统计数量。

2,count()统计

--
select count(*) from person
--
select count(1) from person
--
select count('a') from person
--
select count(age) from person
--使用where条件
select count(*) from person where id >2

注:count的意思是统计数据,即是通过select * from person得到的数据的个数。所以count的小括号内可以放任意值。

注:统计数量是最好用count(1)。

3,max()获取最大值

select max(age) from person 

注:max的意思与sum类似,获取所有age,然后取最大值。sql语句后台同样可以添加where条件语句。

4,min()获取最小值

select min(age) from person 

5,avg()获取平均值

select avg(age) from person 

##分组

一,基本使用

分组使用关键词order by

原表数据如下:

分组sql语句如下:

select age from person group by age

查询结果如下:

说明:原表中有两个age是16,通过age分组只得到一个16.

 

注:group by后面可以跟多个字段,如下:

select name,age from person group by name,age

说明:此时name和age同时相同时才会被分为一组。

二,分组求和

分组的作用:分组常常与聚合函数一起使用,比如获取各个年龄的人数,如下:

select age ,count(1) from person group by age

sql执行结果如下:

说明:此时可以看到各个年龄的人数。

三,分组统计

需求:统计表中年龄的个数,即有几个年龄数。sql如下:

select count(1) from (select age from person group by age) temp

这是一种多表操作,先使用select age from person group by age得到一个临时表,然后再查数量。

四,分组获取最大值

需求:统计各个年龄的最大id。sql如下:

select max(id),age from person group by age

 

五,分组最易范错误

如下面语句:

select name,age from person group by age

执行会报下面异常:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xia.person.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

说明:异常意思是说name不是分组的列。表中guoxiang,zhaomin的age都是16,所以不可能获取到一个name,但可以这么用:

select max(name),age from person group by age

六,having的使用

where不能与group by一起使用,所以此时出现了having。用法示例如下:

--
select age from person group by age having age >2
--
select count(1), age from person group by age having count(1) >1
--
select age from person group by age having count(1) >1

说明:having后面并不是所有字段都可以作为判断条件,必须是可以放在select 和from之间的字段才能作为判断条件。

 

##sql注入

持续完善中。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

MySQL高级部分( 二: MySQL架构、引擎、索引) MySQL高级 二: MySQL架构、引擎、索引、事务MySQL架构MySQL 的完整架构图各层介绍连接层服务层引擎层物理文件存储层MySQL引擎概述MyISAMInnoDB索引事务 MySQL架构 MySQL 的完整架构图 各层介绍 连接层 服务层 引擎层 物理文件存储层 MySQL引擎 概述 MyISAM InnoDB 索引 事务 ..................... 阅读详情

相关推荐

西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控

本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。

weixin_29271263的博客 246

数据库Int/binyint/···类型通过hibernate/mybatis转换报错

一、 今天在使用hibernate获取数据库数据的时候,突然发现,我使用的tinyint类型转换到页面上成了long类型了,直接导致了我的项目报错,因为我反复确认了数据库的类型没有定义错误,所以,我把目光聚焦到了框架上 1、首先就是找到源头,在封装方法中调用了creatQuery,错误肯定不会再这里,该方法使用了createEntityQuery方法,所以继续向后看 2、可以看到...

MrLi_IT的博客 529

算法之动态规划(DP)求解完全背包问题

算法之动态规划(DP)求解01背包问题 上面这篇文章主要讲解了01背包问题和动态规划算法,如果你不了解动态规划算法,建议先浏览一下这篇文章熟悉一下,因为,本文的算法思想是基于这篇文章的。 1、什么是完全背包问题? **01背包问题:**有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品只能取1次放入背包中,背包所有物品权重和最大是多少? 完全背包: 有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品可以取无限次放入背包中,背包所有物品权重和

PRML_MAN的博客 2万+

MySQL高级操作

目录 一、数据库设计之三范式 二、外键SQL语句的编写 三、分组和聚合函数的组合使用 1. 数据准备 2. SQL语句编写 四、将查询结果插入到其他表中 1. 创建商品分类表 2. 把goods表中的商品分类添加到商品分类表 五、使用连接更新表中某个字段数据 六、创建表并给某个字段添加数据(类似与四、五的整合) 1. 创建品牌表 2. 更新goods表中的品牌信息 七、修改goods表结构 八、远程登录MySQL数据库 1. 注释掉bind-address 2. 将mysql

qq_52262831的博客 6719

Stata:手动安装ivreghdfe包的完整指南与常见问题解决

本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。

weixin_29251131的博客 929

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 416

MySQL高级语句运用

通常完成一个逻辑功能需要多条 SQL 语句,而且各个语句之间很可能传递参数,所以,编写逻辑功能相对来说稍微复杂些,而存储过程可以把这些 SQL 语句包含到一个独立的单元中,使外界看不到复杂的 SQL 语句,只需要简单调用即可达到目的。通常完成一个逻辑功能需要多条 SQL 语句,而且各个语句之间很可能传递参数,所以,编写逻辑功能相对来说稍微复杂些,而存储过程可以把这些 SQL 语句包含到一个独立的单元中,使外界看不到复杂的 SQL 语句,只需要简单调用即可达到目的。

A_Xiao_CaiJI的博客 2351

NMS非极大值抑制算法原理

NMS非极大值抑制算法

pywin 3501

MySql高级使用

MySQL高级索引什么是索引索引优势劣势索引的结构btree 结构B+TREE 结构MySQL中的B+Tree索引分类索引语法创建索引查看索引索引设计原则视图视图概述创建或者修改视图存储过程和函数创建存储过程调用存储过程查看存储过程删除存储过程语法变量if条件判断传递参数case结构 MySQL高级使用主要有以下几个方面,索引,视图,存储过程、触发器,sql优化等大体内容今天主要说的是索引,视图,存储过程这三个方面。 索引 什么是索引 百度百科对其的定义是: 索引是一种单独的、物理的对数据库表中一列或多列的

星韵月光的博客 1099

保姆级教程:QGC地面站Vehicle Setup全模块配置详解(从固件升级到安全设置)

本文提供QGC地面站Vehicle Setup全模块配置的保姆级教程,涵盖从固件升级到安全设置的完整流程。详细解析二次开发环境准备、传感器校准、飞行模式配置等关键步骤,帮助用户快速掌握无人机配置技巧,确保飞行安全与性能优化。

weixin_28726671的博客 387

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3804

MySQL数据库高级操作(图文详解)

MySQL数据库高级操作(图文详解)

zhaoshuangjian 1082

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入LCGA局部曲率引导注意力,保持局部稳定性的同时突出关键几何区域,含多种创新改进,促进YOLO26所有任务高效涨点

🔥本文提出LCGA(局部曲率引导注意力)模块,通过引入曲率信息改进YOLO26网络模型。LCGA在局部窗口内利用深度卷积构造曲率代理,调制标准窗口注意力,使模型更关注道路、边界等曲线型结构,提升遥感图像超分辨率中的几何保真度。相比普通注意力,LCGA能精准聚焦关键几何区域,减少边缘断裂和轮廓偏移,同时保持较低计算开销。实验表明LCGA显著提升性能,在UCMerced数据集上PSNR提升0.2148dB。文章提供了三种改进方案。

Ai缝合怪、助力小伙伴高效发论文 227

mysql高级篇二:索引的使用

文章目录索引的使用验证索引提升查询效率索引的使用准备环境避免索引失效查看索引使用情况 索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。 验证索引提升查询效率 在我们准备的表结构tb_item 中, 一共存储了 300 万记录; A. 根据ID查询 select * from tb_item where id = 1999\G; 查询速度很快, 接近0s , 主要的原因是因为id为主键, 有索引; 2). 根据 title 进行精

qq_49723651的博客 342

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74825172的博客 1458

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL高级(二)--索引(什么是索引,分类,结构,什么时候建立,Explain使用)

MySQL高级(二)--索引(什么是索引,分类,结构,什么时候建立,Explain使用)一、索引概述二、索引的分类三、索引的结构四、建立索引的条件五、性能分析---explain 一、索引概述 1.索引就是帮助MySQL高效获取数据的数据结构。可以简单理解为排好序的快速查找数据结构。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据节后,就是索引。下图就是一种可能的索引方式示例: 解释下:左边是数据表,一共

weixin_44387195的博客 252

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python高级之操作Mysql

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。执行以上代码,如果没有产生错误,表明安装成功。来连接使用 MySQL,本章节为大家介绍使用。

m0_74824574的博客 219

MySQL高级篇

MySQL高级篇

写代码的渣渣苏 2万+

MySQL高级SQL语句

MySQL高级SQL语句MySQL高级SQL语句函数数学函数聚合函数字符串函数 MySQL高级SQL语句 use kgc; create table location (Region char(20),store_name char(20)); insert into location values ('East','Boston') ; insert into location values ('East','New York'); insert into location values ('west',

weixin_55609814的博客 2万+

MySQL高级(二)

1. Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服务和工具组件 SQL Interface : SQL接口组件 Parser : 查询分析器组件 Optimizer : ...

zengdongwen的博客 2755

MySQL 04 高级查询(二)

MySQL 04 高级查询(二) 文章目录MySQL 04 高级查询(二)一、学习目标二、子查询替换表连接三、IN子查询3.1.子查询返回多个结果示例:3.2.IN子查询示例13.3.in子查询示例2四、NOT IN 子查询五、EXISTS子查询六、NOT EXISTS子查询七、子查询小结八、子查询注意事项九、本章总结 一、学习目标 掌握IN子查询的用法 掌握EXISTS子查询 掌握子查询的使用原则和注意事项 能够使用SQL进行综合查询 二、子查询替换表连接 问题: 查询在“2020-01-02

云哥的博客 5520

MySQL高级进阶

MySQL高级   Cent OS7     下载地址       https://www.centos.org/download/ 1.进入官网,找到下载, 下面个ios镜像都可以择 2.使用链接下载cent os ios centos7安装GUI图形界面  &nb

Java肖帝的博客 4436

MySQL高级查询(二)

MySQL高级查询(二) EXISTS子查询 在执行CREATE或DROP语句前,可以使用EXISTS语句判断该数据库对象是否存在,返回值是true或者false。 例: 如果存在数据表temp,则先删除它,然后再重新创建 DROP TABLE IF EXISTS temp; 除以上用法之外,EXISTS也可以作为WHERE语句的子查询,其基本语法如下 SELECT ... FROM 表名 WHERE EXISTS(子查询); EXISTS关键字后面的参数是任意的子查询,如果该子查询有返回行,则EXIS

qq_45504065的博客 438
上一篇: MySql(一)之使用入门
下一篇: MySql(三)之多表查询
fightingXia
博客等级 码龄10年 174粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值