31. 数据库基础

news/2024/10/9 2:08:07/文章来源:https://www.cnblogs.com/hbutmeng/p/18447532

1. 数据库基础知识

1.1 关系型数据库与非关系型数据库

1.2 关系型数据库的结构

库 Database

库,也称数据库,用于组织、存储和管理数据

类比于文件夹

表 Table

表,是数据库中基本的数据存储单位,由行(Row)和列(Column)组成

类比于excel文件

记录 Record

记录,是表中的一行的所有数据

例如:在一个订单表中,每一条记录可能代表一个订单所有信息,包含订单号、订单日期、订单金额等。

表头 Header

表头,是表格中列的名称

可以看作是数据的结构化信息,帮助用户理解和操作数据

表单 Form

严格来说不直接属于数据库结构的一部分,但表单是一种常用的界面元素,用于收集并展示数据。

表单可以用于输入、修改或查询数据库中的数据。

表单通常包含多个字段,每个字段对应数据库表中的一个列。用户通过填写表单并提交,可以将数据填写到数据库中或更新现有数据。

2. SQL语句基础概念

2.1 SQL语句规范

SQL语句不区分大小写,为了提高代码的可读性,建议采用统一的书写规范。

关键字大写:SELECT, FROM, WHERE, JOIN。

表名、列名小写,用双引号括起来以确保大小写的敏感性。

字符串与日期:字符串与日期类型的数据应使用单引号'  '括起来,单词之间用英文半角空格隔开。

SQL语句可单行或多行书写,默认以英文半角分号 ; 结尾,关键词不能跨多行

单行注释:--或#

多行注释:

/*

注释内容

*/

2.2 SQL语句类型

根据用途,SQL语句可以分为几种主要类型:

1. 数据查询语言 (DQL Data Query Language)
用于从一个或多个表中检索数据。
主要命令是 SELECT。

2. 数据定义语言 (DDL Data Definition Language)
用于定义或改变数据库结构。
常用命令包括:
CREATE:创建数据库、表、视图等。
ALTER:修改现有数据库对象的结构。
DROP:删除数据库对象。
TRUNCATE:清除表中的所有数据但保留表结构。
RENAME:重命名数据库对象(某些数据库系统可能使用不同的语法)。

3. 数据操纵语言 (DML Data Manipulation Language)
用于添加、更新和删除数据库中的数据。
常用命令包括:
INSERT:向表中插入新记录。
UPDATE:更新表中的现有记录。
DELETE:从表中删除记录。
MERGE:在某些数据库中,用于基于条件更新或插入数据。

4. 事务控制语言 (TCL Transaction Control Language)
用于管理事务,确保数据的一致性和完整性。
常用命令包括:
COMMIT:提交当前事务,使更改永久化。
ROLLBACK:撤销当前事务,恢复到事务开始前的状态。
SAVEPOINT:设置保存点,允许部分回滚事务。
SET TRANSACTION:设置事务的特性(如只读、隔离级别等)。

5. 数据控制语言 (DCL Data Control Language)
用于控制数据库访问权限。
常用命令包括:
GRANT:授予用户特定权限。
REVOKE:撤销用户的特定权限。

6. 其他命令
还有一些其他的命令不属于上述分类,例如:
EXPLAIN:显示查询计划,帮助优化查询性能。
SHOW:显示数据库信息,如表结构、索引等。
USE:选择当前工作的数据库。
BEGIN 或 START TRANSACTION:开始一个新的事务。

2.3 常用命令

3. SQL语句操作库、表、数据

3.1 操作数据库(文件夹级别)---对库的增删改查

[1]创建数据库

方法一:create database 数据库名称;

方法二:create database if not exists 数据库名称;    

    --数据库不存在则创建,存在则忽略

方法三:create database if not exists 数据库名称 charset 字符编码名称;

    --latin1:西欧语言字符集

    --utf8mb4(当前中文默认):完整的utf-8编码,支持所有Unicode字符,包括表情符号,一个字符最多占4个字节

       --gbk:简体中文字符集

 [2]查看数据库

系统自带的数据库:

 查看所有数据库:

show databases;

 模糊查询,查看名称中包含指定字符的数据库:

show databases like "%obj%";

 查看数据库的建库SQL语句:

 show create database 数据库名称;

示例:

show create database test01;

 show create database test02;

  show create database test03;

[3]修改数据库

修改数据库默认的编码集:

alter database 数据库名称 charset "utf8mb4";

举例:将test03的字符集由gbk改为utf8mb4

 [4]删除数据库

以下MySQL自带的数据库不能删除

drop database [if exists] 数据库名称;    --中括号里的内容表示可选

3.2 操作数据库中的表(文件级别)---对表的增删改查

[1]操作表之前的操作:进入到指定库、查看所在的库

use 库名称;    --进入到指定库

 注意:进入到指定数据库后无法退回到之前刚登录的状态,但可以通过use进行切换

select database();    --查看所在的库

 [2] 创建表

 语法:

create table 表名(列名1 数据类型[(最多字符个数)]  [约束条件],列名2 数据类型[(最多字符个数)]  [约束条件],...列名n 数据类型[(最多字符个数)]  [约束条件]
);

列名和数据类型必填,中括号里的内容选填。

列名不可重复。

 

常见数据类型:

int:整数  括号内的参数默认为11,是显示宽度,不影响存储大小,不推荐使用

    有符号 INT
    位数: 32 位  4个字节
    最小值: -2,147,483,648 (-2^31)
    最大值: 2,147,483,647 (2^31 - 1)
    无符号 INT
    位数: 32 位  4个字节
    最小值: 0
    最大值: 4,294,967,295 (2^32 - 1)

varchar(n):变长字符串,n是字符串的最大长度  1~255
text:长文本
date:日期
datetime:日期和时间
decimal(m, n):小数,m是总位数,n是小数点后的位数

常见约束条件:

not null:不能为空值
primary key:主键,列(或列组合的)唯一标识,每个表可以有一个主键
unique:列的值必须唯一
default value:列的默认值
auto_increment:自增,通常用于主键,自动生成唯一的数字;一般与主键配合使用
check:检查约束,确保列中的值满足特定条件;MySQL 8.0.16之前的版本要使用触发器才能实现check的约束功能
foreign key:外键,用于在两个表之间建立连接,确保参照完整性

主键写法一:

create table product1(id int auto_increment primary key,name varchar(10) not null,unique(name),price decimal(10, 2),stock int default 20
);

主键写法二:

create table product2( id int auto_increment,name varchar(10) not null,unique(name),price decimal(10, 2),stock int default 20,primary key(id)
);

id是主键,且自增

name不允许为空,且必须唯一

price为小数

stock库存为整型,默认值是20

[3]查看表

show tables;   --查看库下所有的表

 show create table 表名;  --查看创建表的SQL语句

查看表结构的两种方法:

describe 表名;

desc 表名;  

[4] 修改表

修改表中的列:

alter table 表名 modify 列名 数据类型;  

  --modify只能修改列的数据类型,不能修改列名

 alter table 表名 change 原列名 新列名 数据类型;

  --change既可以修改列的数据类型,又可以修改列名

 修改表名:

alter table 原表名 rename 新表名;

 添加列:

alter table 表名 add 列名 数据类型;  --默认在表的结尾添加列

alter table 表名 add 列名 数据类型 after 指定列名;   --在指定列的后面添加列

 alter table 表名 add 列名 数据类型 first;  --在列的最前面添加列

删除表中的列:

alter table 表名 drop 列名;

 [5] 删除表

drop table 表名;

  --执行该命令MySQL不会给出任何提示确认的信息,一旦删除无法恢复,建议先备份后删除,或者重命名表代替删除操作

 [6] 以绝对路径的形式操作不同的库

create table test02.teacher(id int);  --在test01库中操作test02库新建一个表

 [7] 重置表信息

TRUNCATE table 表名;

保留表的结构,将表的记录以及表的状态回滚

3.3 操作表中的数据---对数据的增删改查

[1] 增加数据

增加一行数据:

insert  into  表名  (列1, 列2, 列3, ...)  values  (值1, 值2, 值3, ...);    

以上可以不向所有的列中都传入数据,如果向所有列中传入数据,可以简写为:insert  into  表名  values  (值1, 值2, 值3, ...);

增加多行数据:

insert  into  表名  (列1, 列2, 列3, ...)  values  (值1, 值2, 值3, ...),  (值1, 值2, 值3, ...),  (值1, 值2, 值3, ...);

 [2] 查询数据

查询表中全部数据:

select * from 表名;

 查看指定列的数据:

select 列1,列2,... from 表名;

 [3] 修改数据

update 表名 set 列名=新值 where 筛选条件;

举例:将name为toy的stock改为21

[4] 删除数据

delete from 表名 where 筛选条件;    ---会删除所有符合条件的数据

删除stock为60的一行数据(记录):

delete from t1 where stock=60;

 删除id大于1的记录:

delete from t1 where id>1;

4. 存储引擎

4.1 概念

存储引擎是用于处理不同表类型的数据存储、索引、数据检索的技术,不同的存储引擎提供了不同的存储机制、索引类型、锁定级别和事务支持。

数据库使用存储引擎进行创建、查询、更新和删除数据等操作。

4.2 MySQL中常见的存储引擎

[1]InnoDB

是MySQL5.5及以后版本的默认存储引擎

支持事务处理、行级锁定、外键约束以及崩溃恢复等高级功能。

[2]MyISAM

是MySQL5.5以前版本的默认存储引擎

不支持事务处理

插入数据速度较快

[3]MEMORY

MEMORY存储引擎将数据存储在内存中

访问速度极快

数据在数据库重启后会丢失

[4]Blackhole

黑洞引擎,接受所有数据写入请求,但不实际存储任何数据

用于测试或主从复制配置中的日志记录

4.3 查看所有引擎

show engines;

4.4 查看不同存储引擎存储数据的异同

[1] 使用不同的存储引擎建表

[2] 表的文件

[3] 表文件的作用

InnoDB:

.frm:存储了表的定义信息,包括列名、类型等。

.ibd:存储表的数据和索引

MyISAM:

.frm:存储了表的定义信息,包括列名、类型等。

.MYD:存储表的数据

.MYI:存储表的索引

MEMORY:

.frm:存储了表的定义信息,包括列名、类型等。

没有数据文件,数据存储在内存中,重启数据库后数据会丢失。

Blackhole :

.frm:存储了表的定义信息,包括列名、类型等。

[4] 表中依次存入数据

[5] 查看数据

Blackhole存储引擎创建的表中没有存入数据

memory存储引擎创建的表在数据库重启后数据丢失

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KeyShot基础操作2 - 材质篇

介绍了KeyShot的材质相关的内容:上材质、材质参数、贴图类型、映射类型、材质节点图等。​这部分基础操作,只是介绍KeyShot的操作方法,望知晓。 后续也会再更新材质、打光的案例,同时也会提供对应的工程文件。上材质基础操作 材质的通用参数 材质类型 纹理类型 多层材质 贴…

创建进程,设计信号量同步机制,实现多线程同步 - C语言版

环境:Windows11 编译器:Visual Studio 2019相关头文件: #include <windows.h> #include <stdio.h>相关函数:睡眠等待函数:Sleep(int millisecond); 睡眠等待一定时间,会造成OS重新调度其它的线程运行Sleep(10); //当前线程睡眠10毫秒后重新执行创建进程Cre…

古典+ezRSA

​ 古典密码在线工具:https://ctf.bugku.com/tools.html 一键解码工具库:随波逐流,在github上下载即可 注:古典密码只需做个了解,因为很多都是靠工具实现的,多刷题有个印象,遇到题能看出像什么密码就好。 Base家族 在密码学领域,"base" 通常指的是一种编码方…

【专题】2024年母婴行业发展趋势洞察报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37818 在当今消费市场中,母婴领域正经历着深刻的变革。随着需求日益多元化,母婴用户的消费习惯和选购考量因素发生了显著变化。 分龄分层产品逐渐成为主流,这背后是用户对个性化解决方案的追求以及对孩子成长各方面的细致关注。同时,母婴…

Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器

Serilog支持通过App.config和Web.config中的01、应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法,以设置最低日志级别、为事件添加额外属性以及控制日志输出。 Serilog 主要通过代码进行配置,设置支持旨在作为补充功能。虽然不是全面的,但大多…

【视频讲解】Python量子计算聚类Q-means:量子k-means算法分析电路数据实现可视化

全文链接:https://tecdat.cn/?p=37821 原文出处:拓端数据部落公众号 分析师:Yifan Zhang 量子计算在近期已然成为一个频繁出现的热门概念。尽管它在大众认知以及互联网社区中备受瞩目,热度极高,然而就其实际能力而言,当前仍然存在诸多局限。 量子计算作为一个全新的领域…

每日打卡

今天连接phoenix,版本是5.1.3-hbase-2.5,主要连接dbeaver,idea老是报错。

20222417 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 (1).掌握反汇编与十六进制编程器 (2).能正确修改机器指令改变程序执行流程 (3).能正确构造payload进行bof攻击 2.实验过程 (1).直接修改程序机器指令,改变程序执行流程 将pwn1文件放入共享文件夹,后续在kali中使用,再将文件复制到实验文件夹share路径…

第一课 php基础语法 变量 函数

php语法<?php// 代码段   ?> php输出方法:echo 和 print不同点:echo-能够输出一个以上的字符串,英文逗号隔开print-只能输出一个字符串,并始终返回1echo 比 print 稍快,并且开销低 注释注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读(让别人…

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引,进入 Docker rpm 包下载的地址,根据自己系统的架构和具体版本选择对应的路径这里我使用 https://download.docker.com/linux/centos/7/x86_64/stable 版本,根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包最终使用 yum 命令安装下载…

02 Vue默认项目说明

1. node_modules pnpm 安装的第三方依赖 2. public 公共资源,存放网页图标等 3. src 开发代码存放位置 3.1 项目入口文件 main.ts import { createApp } from vue // 引入vue import ./style.css // 引入默认样式 import App from ./App.vue // 引入页面 App.VuecreateApp(App…

解构UI设计

解构UI设计 第一章 界面类型 1.1 闪屏页 又称为启动页,就是APP启动在进入功能主界面前用户看到的页面。 闪屏页决定了用户对App的第一印象。 闪屏页显示的时间很短,通常只有1秒。 闪屏页分为品牌宣传型、节日关怀型和活动推广型3种类型。 1.1.1 品牌宣传型 App的闪屏页是为体…