数据库 MySQL总结以及常见命令总结

news2024/12/26 21:24:17

 一、数据库类型

关系型数据库:MYSQL
非关系型数据库:NoSQL、MongoDB、Cassandra、Dynamo

主流关系数据库:
商用数据库,例如:Oracle,SQL Server,DB2等;
开源数据库,例如:MySQL,PostgreSQL等;
桌面数据库,以微软Access为代表,适合桌面应用程序使用;
嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序

2.SQL语言定义了三种操作数据库的能力:
DDL: Data Definition Language
    DDL允许用户定义数据,即创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行
DML: Data Manipulation Language
    DML为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。
DQL: Data Query Language
    DQL允许用户查询数据,这也是通常最频繁的数据库日常操作。

二、关系模型


数据模型:层次模型、网状模型、关系模型
关系数据库是建立在关系模型上的,而关系模型本质上是若干个存储数据的二维表,可以把它们看做很多Excel表。

表的每一行称为记录(Record),记录是一个逻辑意义上的数据;

表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。

字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串''。

和Excel表有所不同的是,关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。

1.主键


主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 。
表中的某一列(或几列)会被定为主键,表示数据唯一性。
比如
1.1.学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
1.2.课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
1.3.成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键 。
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 。
同理 成绩表中的课程号是课程表的外键。

2.外键:

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);


其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)。


3.联合主键


关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。


4.主键和外键的用途


定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二.数据库 mysql sql 之间的关系和区别

Sql是草图  mysql是建筑师 数据是砖块 sql是处理砖块(数据)的工人

SQL书写规则:

1)语句以英文 ;结尾

2)不区分关键字的大小写

3)表名与列名不区分大小写

4) 输入符号的时候只能用英文

5)列名不能加单引号

三、MySQL 和redis区别

1.MySQL的优缺点

优点:

1.体积小、速度快、总体拥有成本低,开源,提供的接口支持多种语言连接操作

2..MySQL 的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySQL ,充分利用CPU资源

3.有一个非常灵活而且安全的权限和口令系统。当客户与MySQL 服务器连接时,他们之间所有的口令传送被加密,而且MySQL 支持主机认证

4.支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改

5.支持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等

缺点:

1.不支持备份

2.不支持自定义数据类型

3.对存储过程和触发器支持不够友好

4.MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变

2.Redis的优缺点

优点:

1.支持多种数据类型 例如set、zset、list、hash、string这五种数据类型,操作方便

2.性能很好,基于纯内存操作,所以读写性能很好,可以达到10w/s的频率

3.支持数据持久化,便于数据备份、恢复,支持简单的事务,操作满足原子性

4.支持主从复制,实现读写分离,分担读的压力

5.可以设置过期时间,过期自动删除,也可以做持久化

缺点:

1.数据存储在内存,主机断电数据就会丢失

2.存储容量受到物理内存的限制,只能用于小数据量的高性能操作

3.用于缓存时,容易出现’缓存雪崩‘,’缓存击穿‘、‘缓存穿透’等问题

4.修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务

3.两者区别

类型上:MySQL是关系型数据库,Redis是非关系型(缓存)数据库

需求上:MySQL和Redis因为需求的不同,一般都是配合使用

作用上:MySQL用于持久化的存储数据到硬盘,功能强大,但是速度较慢

Redis用于存储使用较为频繁的数据到缓存中,读取速度快

数据存放位置 :MySQL数据放在磁盘,Redis数据放在内存

应用场景:MySQL和Redis都需要根据具体业务场景去选型

数据类型:MySQL:字符串、列表、集合

Redis:String、Hash、List、Set、Zset

四、SQL语句 常见语句使用

1.select

例1.

2.

2.where 查询某一列
3.and or not  查询某几列或非哪一列
4.order by  ASC|DESC;
5.insert into

5.1指定列名和要插入的值:

INSERT INTO table_name (column1, column2, column3, ...)

VALUES (value1, value2, value3, ...);

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)

VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

5.2如果要为表的所有列添加值,则无需在 SQL 查询中指定列名。

INSERT INTO table_name

VALUES (value1, value2, value3, ...);
6.NULL

NULL值不同于零值或包含空格的字段。具有NULL值的字段是在创建记录期间留空的字段!

6.1

WHERE column_name IS NULL;

6.2

WHERE column_name IS NOT NULL;
7.update

update语句用于修改表中已有的记录。

UPDATE Customers

SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'

WHERE CustomerID = 1;    where必须指定否则整个表都会更新
8. DELETE

DELETE 语句用于删除表中已有的记录。

       8.1.以下 SQL 语句从"Customers"表中删除客户"Alfreds Futterkiste":

DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';

       8.2 删除所有行不删除表

DELETE FROM Customers;  
9. LIMIT

LIMIT 子句用于指定要返回的记录数。

     以下 SQL 语句从"客户"表中选择前三个记录,其中地区为"德国"

SELECT * FROM Customers

WHERE Country='Germany'

LIMIT 3;
10. MIN()

MIN()函数返回所选列的最小值。MAX()函数返回所选列的最大值。

SELECT MIN(Price)/ MAX(Price)  AS SmallestPrice

FROM Products;
11. COUNT()、AVG() 和 SUM() 函数

COUNT() 函数返回符合指定条件的行数。AVG() 函数返回数值列的平均值 SUM() 函数返回数值列的总和。

SELECT COUNT/AVG/SUM(ProductID)
FROM Products;
12. LIKE 运算符

LIKE 运算符在 WHERE 子句中用于搜索列中的指定模式。

LINK与通配符连用

       以下 SQL 语句选择 CustomerName 以"a"开头的所有客户:

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%';

       以下 SQL 语句选择 CustomerName 第二个位置有"r"的所有客户:

SELECT * FROM Customers

WHERE CustomerName LIKE '_r%';
13.IN 运算符

IN 运算符允许您在 WHERE 子句中指定多个值。

以下 SQL 语句选择位于"德国"、"法国"或"英国"的所有客户:

实例

SELECT * FROM Customers

WHERE Country IN/NOT IN ('Germany', 'France', 'UK');
14. BETWEEN AND运算符

BETWEEN AND运算符选择给定范围内的值。 这些值可以是数字、文本或日期。

以下 SQL 语句选择价格在 10 20 之间的所有产品:

SELECT * FROM Products
WHERE Price NOT BETWEEN/ BETWEEN 10 AND 20;

BETWEEN 与 IN 示例

以下 SQL 语句选择价格在 10 到 20 之间的所有产品。此外; 不显示 CategoryID 为 1、2 或 3 的产品:

SELECT * FROM Products

WHERE Price BETWEEN 10 AND 20

AND CategoryID NOT IN (1,2,3);
15. AS

AS别名用于为表或表中的列提供临时名称。

以下 SQL 语句创建两个别名,一个用于 CustomerID 列,一个用于 CustomerName 列:

SELECT CustomerID AS ID, CustomerName AS Customer

FROM Customers;
16. JOIN 连接表

连接表子句用于根据它们之间的相关列组合来自两个或多个表的行。

INNER JOIN:返回两个表中值匹配的记录

LEFT JOIN:返回左表所有记录,右表匹配记录

RIGHT JOIN:返回右表的所有记录,以及左表的匹配记录

CROSS JOIN:返回两个表中的所有记录

17.自连接   

其实自连接,就是说相当于是两张表,以第一张表的mgr为主,去匹配与它对应的第二张表的id

18. UNION 运算符

UNION 运算符用于组合两个或多个 SELECT 语句的结果集。

以下 SQL 语句从"客户""供应商"表中返回城市(仅不同的值):

SELECT City FROM Customers

UNION

SELECT City FROM Suppliers

ORDER BY City;
19.     GROUP BY 语句

GROUP BY 语句将具有相同值的行分组为汇总行,例如"查找每个地区的客户数量"。

         GROUP BY 语句通常与聚合函数(COUNT()、MAX(), MIN(), SUM(), AVG()) 按一列或多列对结果集进行分组。

下面的 SQL 语句列出了每个地区的客户数量:

SELECT COUNT(CustomerID), Country

FROM Customers

GROUP BY Country;
20.HAVING

HAVING仅在使用GROUP BY子句生成高级报告的输出时才有用。

Having 和where区别?

having与where的区别:

having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having后面可以使用聚合函数

where后面不可以使用聚合

以下 SQL 语句列出了每个地区的客户数量,从高到低排序(仅包括客户超过 5 个的地区):

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

from>where>group(含聚合)>having>order>select。

21. EXISTS和NOT EXISTS

EXISTS和NOT EXISTS子句的返回值是一个BOOL值

1.首先执行一次外部查询

2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。

3.使用子查询的结果来确定外部查询的结果集。 如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。

如果内层子查询有行返回,则返回ture,进行外层当前行语句的执行.

如果内层子查询无行返回,则返回flase,进行外层当前行语句的执行,当然不会执行,返回为空

以下 SQL 语句返回 TRUE 并列出产品价格低于 20 的供应商:

SELECT SupplierName

FROM Suppliers

WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
22.ANY ALL
23. INSERT INTO SELECT 语句

INSERT INTO SELECT 语句从一个表中复制数据并将其插入到另一个表中。

以下SQL语句将"Suppliers"复制到"Customers"(未填充数据的列,将包含NULL):

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
24. CASE 语句

CASE 语句遍历条件并在满足第一个条件时返回一个值(如 if-then-else 语句)

以下 SQL 遍历条件并在满足第一个条件时返回一个值:

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;
25. NULL 函数
26. 注释

       单行注释以--开头。

任何介于 -- 和行尾之间的文本都将被忽略(不会被执行)。

27.运算符 + - * / %  位运算符 & | ^  与 或 异或   比较运算符

  五、表指令

1.打开已存在的数据库 USE db_name;

2.查看当前用户已打开的数据库 SELECT DATABASE();

3.创建数据表

语法:CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,……);  (列之间用逗号分割)

CREATE TABLE user(username VARCHAR(20),age INT,salary DOUBLE(8,2));

4.查看数据库表 SHOW TABLES;

5.查看数据表结构 DESC user;

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

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

相关文章

音乐的数字未来:虚拟演唱会与TikTok的巅峰融合

在数字时代&#xff0c;音乐产业正在经历着革命性的变革。虚拟演唱会与TikTok的融合正引领着音乐的数字未来&#xff0c;为艺术家、粉丝和创作者带来了前所未有的互动性和娱乐体验。本文将深入探讨这一巅峰融合&#xff0c;以揭示音乐产业的新前景。 虚拟演唱会的崛起 虚拟演唱…

【机器学习】支持向量机(实战)

支持向量机&#xff08;实战&#xff09; 目录 一、准备工作&#xff08;设置 jupyter notebook 中的字体大小样式等&#xff09;二、线性支持向量机&#xff08;核函数为线性核&#xff09;三、数据标准化的影响四、软间隔五、非线性支持向量机5.1 手动升维5.2 对比试验&#…

MySQL的索引原理

文章目录 什么是索引&#xff1f;索引的工作原理创建和管理索引索引类型最佳实践总结 &#x1f389;欢迎来到数据结构学习专栏~MySQL的索引原理 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;数据结…

MyBatis篇---第五篇

系列文章目录 文章目录 系列文章目录一、MyBatis 中见过什么设计模式&#xff1f;二、MyBatis 中比如 UserMapper.java 是接口&#xff0c;为什么没有实现类还能调用&#xff1f; 一、MyBatis 中见过什么设计模式&#xff1f; 二、MyBatis 中比如 UserMapper.java 是接口&#…

在10.24这个特殊的日子里,带你详细解读1024!

目录 1.前言 2.重识1024 3.庆祝1024 致谢 1.前言 作为一名程序员&#xff0c;我想大家对于1024这个数字并不陌生。因为 1024 是 2 的 10 次方&#xff0c;与计算机科学紧密相关&#xff0c;所以 10 月 24 日也被称为“程序员节”&#xff0c;这是一个属于每一个程序员…

黔院长 | 邀您一同共筑养生健康项目!

黔院长&#xff0c;作为一家有百年技术传承并致力于打造大健康产业的企业&#xff0c;为更好的践行“为健康而生&#xff0c;助天下无疾”的初心和使命&#xff0c;更好的让健康事业造福百姓&#xff0c;让更多的人能够从这份事业当中获益&#xff0c;现面向全国火热招商&#…

【JAVA学习笔记】35 - 类变量

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/static_ 一、类变量的引出 有一群小孩在玩堆雪人&#xff0c;不时有新的小孩加入&#xff0c;请问如何直到现在共有多少人在玩&#xff0c;编写程序解决 package com.yin…

docker版本的Jenkins安装与更新技巧

因为jenkins/jenkins镜像默认带的jenkins版本比较低&#xff0c;导致安装完以后&#xff0c;很多插件因为版本问题无法安装。以下是最权威&#xff0c;最方便的安装教程。 1. 创建本地挂载目录 mkdir -p /mnt/dockerdata/jenkins/home/2. 修改挂载目录权限 chown -R 1000:10…

PaddleX场景实战:PP-TS在电压预测场景上的应用

时间序列是按照时间发生的先后顺序进行排列的数据点序列&#xff0c;简称时序。时间序列预测即运用历史的多维数据进行统计分析&#xff0c;推测出事物未来的发展趋势。时间序列预测是最常见的时序问题之一&#xff0c;在很多行业都有其应用&#xff0c;且通常时序预测效果对业…

js如何解决跨域问题?

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;js如何解决跨域问题? 目录 前言&#xff1a;跨域问题的本质 详解&#xff1a;跨域问题的原因和限制 跨域问题的限制包括&#xff1a; 用法&#xff1a;解决跨域问题的方法 1. JSONP&#xff08;J…

(完全解决)如何输入一个图的邻接矩阵(每两个点的亲密度矩阵affinity),然后使用sklearn进行谱聚类

文章目录 背景输入点直接输入邻接矩阵 背景 网上倒是有一些关于使用sklearn进行谱聚类的教程&#xff0c;但是这些教程的输入都是一些点的集合&#xff0c;然后根据谱聚类的原理&#xff0c;其会每两个点计算一次亲密度&#xff08;可以认为两个点距离越大&#xff0c;亲密度越…

程序员节1024

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

期 货 分 仓,资 管 分 仓,跟单软件都有哪些特点?

期货分仓软件是一种用于期货交易的软件系统。通过该系统&#xff0c;机构可以在一个主账户中同时使用多个子账户操作多个期货合约&#xff0c;并且可以设置不同资金量的用户不同的开仓比例。 由于目前国内的期货市场对于国际市场的品种还处于不规范阶段&#xff1a;一方面是保证…

怎么去除视频水印?

当今社交媒体环境中&#xff0c;许多用户面临着怎么去除视频水印的挑战尤其是短视频领域的从业者&#xff0c;这些水印不仅影响了视频的美观度也限制了素材的流动性&#xff0c;为了解决这一问题许多人开始积极寻找有效的方法来去除水印&#xff0c;以便更灵活地使用视频内容&a…

经典卷积神经网络 - AlexNet

AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络。当时&#xff0c;AlexNet在 ImageNet 大规模视觉识别竞赛中取得了优异的成绩&#xff0c;把深度学习模型在比赛中的正确率提升到一个前所未有的高度…

基于springboot实现广场舞团平台系统项目【项目源码+论文说明】计算机毕业设计

基于SPRINGBOOT实现广场舞团平台系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&am…

38.红黑树(王道第7章查找补充知识)

目录 一. 红黑树的定义 二. 红黑树的性质 三. 红黑树的插入 四. 红黑树的删除(略) 一. 红黑树的定义 红黑树是二叉排序树-左子树结点值≤根结点值≤右子树结点值。 与普通BST相比&#xff0c;有以下要求&#xff1a; ①每个结点或是红色&#xff0c;或是黑色的②根节点是…

探索C++赋值运算符重载的内部机制:手把手教你精通

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 前一篇博客中我们已经了解并学习了初始化和清理模块中的构造函数与析构函数&#xff0c;还有拷贝复制中的拷贝复制函数&#xff0c;它们都是类与对象中重要的成员&#xff0c;今天我们要…

构建实时视频聊天应用:使用WebRTC和Netty的完整指南

构建实时视频聊天应用&#xff1a;使用WebRTC和Netty的完整指南 使用WebRTC和Netty构建实时视频聊天应用准备工作步骤1&#xff1a;创建Netty服务器步骤2&#xff1a;创建WebRTC前端应用步骤3&#xff1a;处理WebRTC连接步骤4&#xff1a;处理Netty服务器端步骤5&#xff1a;运…

光流法动目标检测

目录 前言 一、效果展示 二、光流法介绍 三、代码展示 总结 前言 动目标检测是计算机视觉领域的一个热门研究方向。传统的方法主要基于背景建模&#xff0c;但这些方法对于光照变化、遮挡和噪声敏感。因此&#xff0c;研究人员一直在寻找更加鲁棒和有效的技术来解决这一问题。…