2025-04-16
Redis基础
2025-04-16 ~ 2025-04-16

Redis 专题

0 Redis是什么?

  1. 是一个完全开源免费的key-value内存数据库
  2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets

Redis数据库

​ 通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求。在使用缓存的时候,redis比memcached具有更多的优势,并且支持更多的数据类型,把redis当作一个中间存储系统,用来处理高并发的数据库操作

2025-04-16
事务
2025-04-16 ~ 2025-04-16

一、事务定义

  • 事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行转账业务,该业务就是一个最小的工作单元)
  • 一个完整的业务需要批量的DML(insert、update、delete)语句共同完成
  • 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不通

二、转账操作理解事务

关于银行账户转账操作,账户转账是一个完整的业务,最小的单元,不可再分———也就是说银行账户转账是一个事务

2025-04-16
数据库其他知识点
2025-04-16 ~ 2025-04-16

基础

0 数据库设计范式

目前关系数据库有六种范式:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF,又称巴斯-科德范式(BCNF))
  • 第四范式 (4NF)
  • 第五范式(5NF,又称完美范式)

最常接触到的是前三个范式 第一范式(1NF):是对属性的 原子性 的要求,要求属性具有原子性,不可再分解; 第二范式(2NF):2NF是对记录的 唯一性 ,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖; 第三范式(3NF,又称巴斯-科德范式(BCNF)):3NF是对字段的 冗余性 ,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

2025-04-05
数据库八股文背诵版
2025-04-05 ~ 2025-04-05

主键:

主关键字(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表的主键可以由多个关键字共同组成,并且主关键字的列不能包含空值,主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。

2025-04-05
数据库索引主键和唯一索引有什么区别
2025-04-05 ~ 2025-04-05

定义和约束

  • 主键索引(Primary Key)‌:主键是一种特殊的唯一索引,用于唯一标识表中的每一行数据。主键列的值必须唯一且不能为空(NULL)。每个表只能有一个主键。
  • 唯一索引(Unique Index)‌:唯一索引确保某列或某几列的值唯一,但允许有空值(NULL)。一个表可以有多个唯一索引。

性能差异

  • 查询性能‌:唯一索引在查询时的扫描速度较快,因为它可以快速找到唯一值的列。主键索引和自增主键的性能相近,但略逊于唯一索引。
  • ‌插入性能‌:在插入数据时,主键索引和自增主键的性能相近,因为它们都需要生成唯一值。唯一索引的插入性能较差,因为它需要检查新插入的数据是否重复。

使用场景

  • 主键索引‌:适用于那些不容易更改的唯一标识,如自动递增列、身份证号等。主键不允许空值,且一个表只能有一个主键。‌
  • 唯一索引‌:适用于需要保证某列或多列数据唯一性的场景,但允许空值。例如,商品库存数量、用户邮箱等字段可以设置为唯一索引,以确保数据的唯一性。

物理存储特性

  • 主键索引‌:通常是聚簇索引,意味着表中的数据实际上按主键的顺序存储。这可能在某些情况下提供更快的查询性能,特别是当查询涉及到表中的大量数据时。
  • ‌唯一索引‌:通常是非聚簇索引,数据和索引分开存储。
2023-11-26
Mariadb Grant命令
2023-11-26 ~ 2023-11-26
1
2
3
4
5
6
7
8
$ mysql -u root -p
# Create the keystone database:

MariaDB [(none)]> CREATE DATABASE keystone;
# Grant proper access to the keystone database:

GRANT ALL PRIVILEGES ON yong.* TO 'yong'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON yong.* TO 'yong'@'%' IDENTIFIED BY '123456';
2023-06-18
mysql巡检脚本
2023-06-18 ~ 2023-06-18
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
# MySQL巡检脚本
# 设置MySQL用户名和密码(请将它们设置为适当的值)
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
# 获取MySQL版本信息
MYSQL_VERSION=$(mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SELECT VERSION();" | awk 'NR==2{print $1}')
# 获取MySQL运行状态信息
STATUS=$(systemctl status mysql.service)
# 获取MySQL进程列表
PROCESS_LIST=$(mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SHOW PROCESSLIST;" | awk '{print $1,$2,$3,$4,$5,$6}')
# 检查MySQL是否在运行
if [[ "$STATUS" =~ "active (running)" ]]; then
  MYSQL_RUNNING="YES"
else
  MYSQL_RUNNING="NO"
fi

# 检查MySQL进程是否存在
if [[ -z "$PROCESS_LIST" ]]; then
  MYSQL_PROCESS="NO"
else
  MYSQL_PROCESS="YES"
fi

# 生成报告

echo "MySQL巡检报告"
echo "----------------"
echo "MySQL版本: $MYSQL_VERSION"
echo "MySQL运行状态: $MYSQL_RUNNING"
echo "MySQL进程存在: $MYSQL_PROCESS"
echo ""
echo "MySQL进程列表"
echo "----------------"
echo "$PROCESS_LIST"