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

mysql

SQL基础

NOSQL和SQL的区别?

SQL数据库,指关系型数据库 - 主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。

关系型数据库存储结构化数据。这些数据逻辑上以行列二维表的形式存在,每一列代表数据的一种属性,每一行代表一个数据实体。

NoSQL指非关系型数据库 ,主要代表:MongoDB,Redis。NoSQL 数据库逻辑上提供了不同于二维表的存储方式,存储方式可以是JSON文档、哈希表或者其他方式。

数据库三大范式是什么?

第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

第三范式(3NF):在2NF基础上,任何非主属性 (opens new window)不依赖于其它非主属性(在2NF基础上消除传递依赖

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

MySQL 怎么连表查询?

数据库有以下几种联表查询类型:

内连接 (INNER JOIN)

左外连接 (LEFT JOIN)

右外连接 (RIGHT JOIN)

1. 内连接 (INNER JOIN)

内连接返回两个表中有匹配关系的行。示例:

2. 左外连接 (LEFT JOIN)

左外连接返回左表中的所有行,即使在右表中没有匹配的行。未匹配的右表列会包含NULL。示例:

3. 右外连接 (RIGHT JOIN)

右外连接返回右表中的所有行,即使左表中没有匹配的行。未匹配的左表列会包含NULL。示例:

内连接:

内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来。

外连接:

外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的

数据。外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件

的记录。

右外连接:可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条

件的记录

MySQL如何避免重复插入数据?

方式一:使用UNIQUE约束

在表的相关列上添加UNIQUE约束,确保每个值在该列中唯一。例如:

方式二:使用INSERT ... ON DUPLICATE KEY UPDATE

这种语句允许在插入记录时处理重复键的情况。如果插入的记录与现有记录冲突,可以选择更新现有记录:

方式三:使用INSERT IGNORE: 该语句会在插入记录时忽略那些因重复键而导致的插入错误。例如:

CHAR 和 VARCHAR有什么区别?

CHAR是固定长度的字符串类型,定义时需要指定固定长度,存储时会在末尾补足空格。CHAR适合存储长度固定的数据,如固定长度的代码、状态等,存储空间固定,对于短字符串效率较高。

VARCHAR是可变长度的字符串类型,定义时需要指定最大长度,实际存储时根据实际长度占用存储空间。VARCHAR适合存储长度可变的数据,如用户输入的文本、备注等,节约存储空间。

Text数据类型可以无限大吗?

MySQL 3 种text类型的最大长度如下:

TEXT:65,535 bytes ~64kb

MEDIUMTEXT:16,777,215 bytes ~16Mb

LONGTEXT:4,294,967,295 bytes ~4Gb

说一下外键约束

外键约束的作用是维护表与表之间的关系,确保数据的完整性和一致性。让我们举一个简单的例子:

假设你有两个表,一个是学生表,另一个是课程表,这两个表之间有一个关系,即一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在这种情况下,我们可以在学生表中定义一个指向课程表的外键,如下所示:

CREATE TABLE students (

  id INT PRIMARY KEY,

  name VARCHAR(50),

  course_id INT,

  FOREIGN KEY (course_id) REFERENCES courses(id)

);

这里,students表中的course_id字段是一个外键,它指向courses表中的id字段。这个外键约束确保了每个学生所选的课程在courses表中都存在,从而维护了数据的完整性和一致性。

MySQL的关键字in和exist

在MySQL中,IN 和 EXISTS 都是用来处理子查询的关键词,但它们在功能、性能和使用场景上有各自的特点和区别。

IN关键字

IN 用于检查左边的表达式是否存在于右边的列表或子查询的结果集中。如果存在,则IN 返回TRUE,否则返回FALSE。

语法结构:

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1, value2, ...);

EXISTS关键字

EXISTS 用于判断子查询是否至少能返回一行数据。它不关心子查询返回什么数据,只关心是否有结果。如果子查询有结果,则EXISTS 返回TRUE,否则返回FALSE。

SELECT column_name(s)

FROM table_name

WHERE EXISTS (SELECT column_name FROM another_table WHERE condition);

区别与选择:

性能差异:在很多情况下,EXISTS 的性能优于 IN,特别是当子查询的表很大时。这是因为EXISTS 一旦找到匹配项就会立即停止查询,而IN可能会扫描整个子查询结果集。

使用场景:如果子查询结果集较小且不频繁变动,IN 可能更直观易懂。而当子查询涉及外部查询的每一行判断,并且子查询的效率较高时,EXISTS 更为合适。

NULL值处理:IN 能够正确处理子查询中包含NULL值的情况,而EXISTS 不受子查询结果中NULL值的影响,因为它关注的是行的存在性,而不是具体值

mysql中的一些基本函数,你知道哪些?

一、字符串函数

CONCAT(str1, str2, ...):连接多个字符串,返回一个合并后的字符串。LENGTH(str):返回字符串的长度(字符数)。

SELECT LENGTH('Hello') AS StringLength;

SUBSTRING(str, pos, len):从指定位置开始,截取指定长度的子字符串。

REPLACE(str, from_str, to_str):将字符串中的某部分替换为另一个字符串。

二、数值函数

ABS(num):返回数字的绝对值。

POWER(num, exponent):返回指定数字的指定幂次方。

三、日期和时间函数

NOW():返回当前日期和时间。

CURDATE():返回当前日期。

四、聚合函数

COUNT(column):计算指定列中的非NULL值的个数。

SUM(column):计算指定列的总和。

AVG(column):计算指定列的平均值。

MAX(column):返回指定列的最大值。

MIN(column):返回指定列的最小值。

SQL查询语句的执行顺序怎么样的?

先from 再where 再groupby 再having 再select 再orderby 再limit

-- 在所有的查询结果中,返回前5行记录。

SELECT prod_name FROM products LIMIT 5;

-- 在所有的查询结果中,从第5行开始,返回5行记录。

SELECT prod_name FROM products LIMIT 5,5;

谈谈你对SQL注入的理解

SQL注入的原理是将SQL代码伪装到输入参数中,传递到服务器解析并执行的一种攻击手法

WHERE和HAVING有什么区别?

WHERE是一个约束声明,使用WHERE约束来自数据库的数据,WHERE是在结果返回之前起作用的, WHERE中不能使用聚合函数。

HAVING是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在HAVING中可以使用聚合函数。另一方面,HAVING子句中不能使用除了分组字段和聚合函数之外的其他字段。

http://www.xdnf.cn/news/709.html

相关文章:

  • QSS【QT】
  • 常见超低噪声 LDO,ADM7150、LP5907、SGN2036、TPL910
  • 力扣刷题 - 203.移除链表元素
  • 4.20刷题记录(单调栈)
  • 基于springboot的商城
  • 积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法
  • 力扣算法ing(61 / 100)
  • 5.1 掌握函数定义与参数传递的奥秘
  • 【Qt】信号和槽
  • [安全实战]逆向工程核心名词详解
  • DAY6:从执行计划到索引优化的完整指南
  • React基础知识(补充中)
  • PyTorch基础学习系列一
  • 安卓手机怎样配置数据加速
  • Java File 类详解
  • 从事计算机视觉需要掌握哪些知识
  • 微信小程序通过mqtt控制esp32
  • Map遍历
  • Linux 进程概念补充 (自用)
  • 【数据结构】红黑树
  • 2181、合并零之间的节点
  • 右起第2个LED灯的闪烁(STC89C52单片机)
  • HTTP 1.0 和 2.0 的区别
  • (done) 吴恩达版提示词工程 1. 引言 (Base LLM 和 Instruction Tuned LLM)
  • ESP32开发之任务创建
  • 用P0口实现流水灯效果(STC89C52单片机)
  • JavaScript解密实战指南:从基础到进阶技巧
  • 硬件电路(24)-NE555振荡电路
  • 六、小白如何用Pygame制作一款跑酷类游戏(静态障碍物和金币的添加)
  • c++通讯录管理系统