当前位置: 首页 > news >正文

数据库MySQL

目录

常用数据类型

元素

创建表

插入记录

简单查询

修改数据

删除数据

删除表

常用字段约束

别名

字段别名

表别名

消除重复记录

模糊查询

范围查询

空判断

排序

聚合函数

分组

分组后的数据筛选

数据分页显示

连接查询

自关联

子查询

MySQL内置函数

存储过程

定义

创建存储过程

调用存储过程

删除存储过程

视图

创建视图

使用视图

删除视图

事务

定义

事务命令

索引

创建索引

调用索引

查看索引

删除索引

优缺点


常用数据类型

1.整数:(1)有符号:int      (2)无符号:int unsigned2.小整数:(1)有符号:tinyint (-128,127)      (2)无符号:tinyint unsigned (0,255)3.小数:decimal(m,n)表示共有m位数,其中小数占n位4.字符串:varchar5.日期:datetime,例如‘2024-01-01 12:29:59’

元素

1.数据库 - database2.表 - table3.字段(列)- field4.记录(行)- record

创建表

CREATE TABLE 表名(字段名 数据类型,···
);

插入记录

INSERT INTO 表名 VALUES(···);--按字段顺序写入
INSERT INTO 表名 (字段1,···) VALUES (值1,···);--按指定字段写入

简单查询

SELECT * FROM 表名;--查询所有字段
SELECT 字段1,字段2,··· FROM 表名;--查询指定字段

修改数据

UPDATE 表名 SET 字段1=值1,字段2=值2,··· WHERE 条件;

删除数据

DELETE FROM 表名 WHERE 条件;
TRUNCATE TABLE 表名;

DELETE和TRUNCATE的区别:

1.速度上:TRUNCATE>DELETE

2.删除部分数据用DELETE

3.保留表而删除所有数据,自增长字段从1开始,用TRUNCATE。对于DELETE而言,删除数据之后再插入记录,自增长字段会从删除前的顺序继续增长,不会重新开始。

删除表

DROP TABLE 表名;--删除表
DROP TABLE IF EXISTS 表名;--如果存在该表,则删除

常用字段约束

1.主键:Primary Key,自增长:auto-increment

2.非空:not null

3.唯一:unique

4.默认值:default

CREATE TABLE 表名(字段名 数据类型 约束,···
);

别名

字段别名

SELECT card AS 身份证,name AS 姓名,sex AS 性别 FROM students;
--其中AS可省略

表别名

SELECT * FROM students AS stu;--其中AS可省略

消除重复记录

使用distinct可以消除重复记录。

SELECT DISTINCT sex FROM students;--消除性别重复的记录

模糊查询

1.使用like实现模糊查询

2.%:任意多个任意字符

3._:一个任意字符

SELECT * FROM students WHERE name like "张%";--查询姓张的记录
SELECT * FROM students WHERE name like "_阳_";--查询叫做某阳某的记录

范围查询

1.in:非连续的范围

2.between ··· and ···:连续的范围

SELECT * FROM students WHERE age in (20,30,40);--查询年龄为20或30或40的记录
SELECT * FROM students WHERE age BETWEEN 20 AND 40;--查询年龄为20到40之间的记录

空判断

1.is null:为空

2.is not null:不为空

null与‘’意义不同:1.null代表什么都没有

                             2.‘’代表长度为0的字符串

排序

1.使用ORDER BY实现排序,其中ASC代表升序,DESC代表降序,省略不写默认为ASC。

2.ORDER BY与WHERE结合使用时,WHERE要写在前面。

SELECT * FROM students WHERE sex = '女' ORDER BY age DESC;
--查询性别为女的记录,按年龄从大到小的顺序排列

聚合函数

注意:聚合函数不能在WHERE条件中使用

1.count(*):总记录数

2.max(字段):最大值

3.min(字段):最小值

4.sum(字段):求和

2.avg(字段):求平均值,若字段中有null,则忽略不计

SELECT count(*) FROM students;--查询学生总数
SELECT max(age) FROM students;--查询年龄最大值
SELECT min(age) FROM students;--查询年龄最小值
SELECT sum(age) FROM students;--查询年龄总和
SELECT avg(age) FROM students;--查询年龄平均值

分组

1.使用GROUP BY实现分组。

2.分组的目的是配合聚合函数,聚合函数会对每一组的数据分别进行统计。

SELECT sex,count(*) FROM students GROUP BY sex;--查询各种性别的人数
SELECT age,count(*) FROM students GROUP BY age;--查询各种年龄的人数

分组后的数据筛选

1.使用HAVING实现筛选。

2.HAVING必须跟在GROUP BY之后使用,不能独立出现。

3.HAVING之后可以使用聚合函数。

SELECT sex,count(*) FROM students GROUP BY sex HAVING sex = '男';
--查询男生总人数

数据分页显示

1.获取部分行

SELECT * FROM students limit start,count;
--从start开始,获取count条数据
--start默认从0开始
--limit总是出现在SELECT语句的最后

2.分页

--已知:每页显示m条数据
--查询第n页的数据
SELECT * FROM students limit (n - 1) * m,m;

连接查询

 

--内连接
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段;
--隐式内连接
SELECT * FROM 表1,表2 WHERE 表1.字段 = 表2.字段;
--左连接
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
--右连接
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;

自关联

--同一张表进行关联
SELECT * FROM 表名 别名1 INNER JOIN 表名 别名2 ON 别名1.字段 = 别名2.字段;

子查询

1.SELECT嵌套查询,被嵌套在内部的SELECT语句称为子查询。

2.标量子查询:子查询返回结果只有一行一列。

3.列子查询:子查询返回结果为一列多行。

4.表级子查询:子查询返回结果为多行多列(一张表)。

SELECT * FROM students
WHERE age > (SELECT avg(age) FROM students);--查询年龄大于平均年龄的记录--表级子查询
SELECT * FROM (SELECT * FROM students WHERE sex = '女') stu 
INNER JOIN scores ON stu.studentNo = scores.studentNo;--查询所有女生的成绩

MySQL内置函数

1.拼接字符串:concat(str1,str2,···)

2.计算字符个数:length(str),如果字符串中包含utf-8格式的汉字,一个汉字length返回3

3.截取字符串:(1)left(str,len)返回字符串str左端的len个字符

                         (2)right(str,len)返回字符串str右端的len个字符

                         (3)substring(str,pos,len)返回字符串str的pos位置起的len个字符

其中中文和英文字母个数一致。

4.去除空格:(1)ltrim(str)返回删除左侧空格的字符串str

                     (2)rtrim(str)返回删除右侧空格的字符串str

                     (3)trim(str)返回删除左右两侧空格的字符串str

5.四舍五入:round(n,d),n表示原数字,d表示小数位数,d默认为0

6.随机数:rand(),返回值为0-1.0的浮点数

--常用随机排序
SELECT * FROM students ORDER BY rand();

7.当前日期:current-date()

   当前时间:current-time()

   当前日期+时间:now()

存储过程

定义

存储过程PROCEDURE,也翻译为存储程序,是一条或多条SQL语句的集合。

创建存储过程

CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
SQL语句
END

调用存储过程

CALL 存储过程(参数列表)

删除存储过程

DROP PROCEDURE 存储过程;
DROP PROCEDURE IF EXISTS 存储过程;

视图

创建视图

CREATE VIEW 视图名称 AS SELECT语句;

使用视图

SELECT * FROM 视图名称;
--内容只可查询,不可修改

删除视图

DROP VIEW 视图名称;
DROP VIEW IF EXISTS 视图名称;

事务

定义

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

事务命令

1.开启事务:begin,开启事务后修改或删除记录语句,变更会写到缓存中,而不会立刻生效。

2.回滚事务:rollback,放弃修改。

3.提交事务:commit,将修改的数据写入实际的表中。

索引

创建索引

CREATE INDEX 索引名称 ON 表名(字段名称(长度));
--如果指定字段时字符串,需要指定长度,建议长度与定义字段时的长度一致
--字段类型如果不是字符串,可以不填写字段长度
--对于主键,系统会自动建立索引

调用索引

不需要显式地调用索引的语句,只要WHERE条件后面用到的字段建立索引,那么系统会自动调用,从而加快查询速度。

查看索引

SHOW INDEX FROM 表名;

删除索引

DROP INDEX 索引名称 ON 表名;

优缺点

优:加快查询速度

缺:降低了更新表的速度,因为更新表时还要维护索引

相关文章:

  • 源码到class字节码的编译流程 字节码到内存的Java类加载流程
  • 算法提高模板强连通分量tarjan算法
  • AIoTedge边缘计算+边缘物联网平台
  • sed awk 第二版学习(四)—— 基本 sed 命令
  • Matlab如何配置小波工具(Wavelet Toolbox)
  • C++ STL库的使用总结
  • 【项目】云备份
  • Oracle(122)如何进行控制文件的恢复?
  • Linux rm命令详解使用:掌握安全删除技巧
  • 多输入多输出 | Matlab实现SO-BP蛇群算法优化BP神经网络多输入多输出预测
  • PROTOTYPICAL II - The Practice of FPGA Prototyping for SoC Design
  • 身份证实名认证接口如何用C#实现
  • Ubuntu上安装与配置MySQL‌
  • 基于PHP的丽江旅游管理系统
  • TextCNN:文本卷积神经网络模型
  • 【译】理解JavaScript:new 关键字
  • Angularjs之国际化
  • chrome扩展demo1-小时钟
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • js对象的深浅拷贝
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React 快速上手 - 07 前端路由 react-router
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue学习第二天
  • 和 || 运算
  • 如何在GitHub上创建个人博客
  • 时间复杂度与空间复杂度分析
  • 微服务核心架构梳理
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #Linux(Source Insight安装及工程建立)
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C++)八皇后问题
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (k8s)Kubernetes本地存储接入
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二)fiber的基本认识
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (转载)OpenStack Hacker养成指南
  • (转载)深入super,看Python如何解决钻石继承难题
  • .bat批处理出现中文乱码的情况
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core 项目指定SDK版本
  • .net core开源商城系统源码,支持可视化布局小程序
  • [ JavaScript ] JSON方法
  • [ NOI 2001 ] 食物链
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题