系统编程-数据库

数据库

目录

数据库

引入

1、先安装数据库

2、数据库设置密码

3、数据库的进入和退出(前提 你的密码更改过了)

数据库的基本操作

1、显示所有的数据库

2、创建数据库

3、删除数据库

4、选择数据库

在数据库中对表进行操作

1、查看当前数据库中的表

2、在数据库中进行表的创建

3、对表进行数据的插入

4、查找表中的数据

5、对表中的数据进行更新操作

6、对表中的数据进行删除

7、查看表的信息指令

8、alter 指令

1、对表头的数据类型进行更改

2、对表进行新列的添加

在程序中如何对数据库进行操作

1、初始化数据库对象

2、对数据库进行连接操作

3、获取数据库操作失败的信息函数

4、运行数据库指令函数

5、在程序中获取表的数据

6、获取结果的行数和列数

7、对保存的结果进行取一行内容函数

8、对保存的结果进行取一列内容函数

9、对保存的结果进行释放操作

10、关闭数据库连接


引入

数据库是什么东西?
数据库是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.

-- 对比文件存储的优势:查找数据快

数据库中的关系:
最外面的是数据库
数据库中包含多张表
表上使用来存放数据

-- 一些术语:

alt text

具体看 MySQL WHERE 子句 | 菜鸟教程MySQL WHERE 子句 我们知道从 MySQL 表中使用 SELECT 语句来读取数据。 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。WHERE 子句用于在 MySQL 中过滤查询结果,只返回满足特定条件的行。 语法 以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法: SELECT column1, column2, ... FROM table_..icon-default.png?t=N7T8https://www.runoob.com/mysql/mysql-where-clause.html

1、先安装数据库

  • 1、服务器的安装:sudo apt-get install mysql-server

  • 2、客户端的安装:sudo apt-get install mysql-client

  • 3、开发包的安装:sudo apt-get install libmysqlclient-dev

  • 3、安装结果检测:sudo netstat -tap | grep mysql

2、数据库设置密码

第一次进入数据库
安装好之后在终端上输入
sudo mysql 进入数据库
有如下显示表示数据库安装成功

alt text

alt text

mysql 的提示符 用来输入指令的地方

  • !!!!注意输入的指令必须要以分号结尾;

-- 然后进行密码的修改

alter user 'root'@'localhost' identified with mysql_native_password by '新密码';
那么修改 root 用户密码为 1 的命令是:
alter user 'root'@'localhost' identified with mysql_native_password by '1';

alt text

-- 出现 Query OK 表示该指令执行成功 我们的密码设置为了 1

3、数据库的进入和退出(前提 你的密码更改过了)

  • 1、退出数据库 

    alt text

  • 2、进入的数据库方式就改变了

使用指令 mysql -u root -p 

alt text

数据库的基本操作

-- ctrl + L为清屏操作

1、显示所有的数据库

  • 指令: show databases;

alt text

2、创建数据库

  • 指令:create database xxx;
  • xxx 为库名

alt text

3、删除数据库

  • 指令: drop database 数据库名;

alt text

4、选择数据库

-- 我们在对数据库进行操作之前必须要先进行选择,执行了这个指令之后,之后的指令都是对这个数据库的操作

  • 指令: use 数据库名;

alt text

在数据库中对表进行操作

1、查看当前数据库中的表

  • 指令: show tables;

-- 数据库中有表会显示出来 否则会显示 empty

alt text

2、在数据库中进行表的创建

创建一个表需要表名 表头名 以及数据类型
表名和表头是我们根据需要来选择的
首先我们需要了解表中的数据类型

  • 基本的存放值的数据类型

int 整型 4 个字节
float 单精度浮点型 4 个字节
double 双精度浮点型 8 个字节

  • 用来存放日期的类型 

    alt text

  • 用来存放字符串的数据类型

char 字符型 0~255 字节
char(n) 为可以存储 n 个字符 等同于 char [n]

-- 创建表的指令

create table 表名(表头 1 数据类型,表头 2 数据类型,.....);
比如我需要一个表用来存放 名字 年龄 性别
create table stu(name char(30),age int,sex char(10)); 

alt text

3、对表进行数据的插入

  • 指令:insert into 表名 values(数据 1,数据 2,数据 3);

插入一组完整的数据
数据为字符需要用单引号引起来
insert into 表名 values(‘小明’,9,’man‘);
insert into 表名(表头 1,表头 2,...) values(对应表头的数据);
插入指定的数据内容

alt text

4、查找表中的数据

  • 指令:select * from 表名(where 语句);
  • 显示表中的所有的数据

alt text

  • 只显示对应的列数据
    select 表头 1,表头 2... from 表名 (where 语句);

alt text

  • 条件判断语句 where

where 后面添加需要的条件
表头 条件符号 指定的值
条件符号: = 找相等的值,>,<,!= 不相等值
需要判断多个条件使用 and 可以与一下,还有or或

alt text

5、对表中的数据进行更新操作

  • 指令:update 表名 set 表头 1= 新值,表头 2=新值 (where 语句);

alt text

6、对表中的数据进行删除

  • 指令:delete from 表名 where 语句

alt text

7、查看表的信息指令

  • 指令: show columns from 表名;

alt text

8、alter 指令

  • 可以实现对表的数据类型的更改
  • 对表进行表头的增加和删除
1、对表头的数据类型进行更改
  • 指令: alter table 表名 modify column 表头 新数据类型;

alt text

2、对表进行新列的添加
  • 指令:ALTER TABLE 表名 ADD COLUMN 新表头 数据类型;

alt text

在程序中如何对数据库进行操作

-- !!!perror 函数无法获取 mysql 相关函数的执行失败和成功

-- 头文件

  • #include "mysql/mysql.h"

1、初始化数据库对象

-- 在程序中所有数据库操作都需要基于一个 MYSQL 类型的变量

-- 通过该函数可以对其进行初始化操作

  • MYSQL *mysql_init(MYSQL *mysql)

-- 函数的作用:

  • 对数据库对象进行初始化

-- 函数的参数:

  • mysql:指针指向要进行初始化对象的地址

-- 函数的返回值:

  • 成功 返回初始化好的对象的地址
  • 失败 返回 NULL

2、对数据库进行连接操作

  • MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag)

-- 函数的作用:

  • 根据传入的参数对指定的数据库进行连接

-- 函数的参数:

MYSQL *mysql:填写初始化好的数据库对象
char *host:“localhost” 连接到的数据库的主机名
char *user:“root” 用户名
char *passwd:“1” 密码
char *db:“数据库名” 填写要连接的数据库名
int port:0
*unix_socket:NULL
long clientflag:0

-- 函数的返回值:

  • 成功返回 数据库对象的地址
  • 失败返回 NULL

3、获取数据库操作失败的信息函数

-- 效果等同于 perror();

-- 函数原型:

  • const char *mysql_error(MYSQL *mysql)

-- 函数的参数:

  • MYSQL *mysql:填写数据库对象的地址

-- 函数的返回值:

  • 如果刚刚的数据库操作失败了 返回错误信息字符串的首地址
  • 如果成功返回 空字符串

alt text

4、运行数据库指令函数

-- 函数原型

  • int mysql_query(MYSQL *mysql, const char *q)

-- 函数的作用

  • 根据第二个参数填写指令对数据库进行操作

-- 函数的参数:

  • MYSQL *mysql:数据库对象
  • char *q:填写字符串 运行字符串中所写的指令

-- 函数的返回值:

  • 成功返回 0

  • 失败返回 非零

  • 操作的数据的过程中可以使用sprintf 函数来组合我们想要的数据库指令

通过scanf输入数据,那怎么写在语句中呢?
用sprintf -- 将字符串变成我们想要的格式,作用:格式化字符串

alt text

alt text

5、在程序中获取表的数据

  • 1、你需要通过 mysql_query 来运行一下select 查找语句 (插入、更新、删除无法使用)
  • 2、将刚刚运行的结果用下面这个函数进行保存方便我们进行数据的查找 -- 函数原型 -MYSQL_RES *mysql_store_result(MYSQL *mysql)

-- 函数的作用:

  • 保存刚刚运行的 select 指令的结果

-- 函数的参数:

  • MYSQL *mysql:数据库对象

-- 函数的返回值:

  • 成功返回一个 MYSQL_RES 类型的地址,这个地址中有我们的一些数据
  • 失败返回 NULL

alt text

6、获取结果的行数和列数

-- 获取行数

-- 函数原型

  • uint64_t mysql_num_rows(MYSQL_RES *res)

-- 函数的作用

  • 通过该函数可以获取结果的行数

-- 函数的参数:

  • res:填写 mysql_store_result 的返回值

-- 函数的返回值: 成功返回 结果的行数 >=0 失败返回 -1

-- 获取列数

-- 函数原型

  • uint64_t mysql_num_fields(MYSQL_RES *res)

-- 函数的作用

  • 通过该函数可以获取结果的列数

-- 函数的参数:

  • res:填写 mysql_store_result 的返回值

-- 函数的返回值: 成功返回 结果的列数 >=0 失败返回 -1

alt text

7、对保存的结果进行取一行内容函数

-- 函数原型

  • MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

-- 函数的作用

  • 从保存的结果中取一行内容出来

-- 函数的参数

  • MYSQL_RES *result:填写 mysql_store_result 的返回值

-- 函数的返回值:

  • 通过该函数从数据库中取出来的数据全部是字符串类型,所有数据都是字符串类型,例如name = 'pp'。->"pp"
  • 成功 返回一个二级指针 通过取下标的方式可以获取数据的首地址
    -- 相当于指针数组,数组里面存的是字符串的首地址
  • 失败 返回 NULL

-- 循环遍历就是获取每一行的数据 

alt text

8、对保存的结果进行取一列内容函数

-- 函数原型

  • MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)

-- 函数的作用

  • 从保存的结果中取一列内容出来

-- 函数的参数

  • MYSQL_RES *result:填写 mysql_store_result 的返回值

-- 函数的返回值:

  • 成功 返回一个 MYSQL_FIELD 类型的指针
  • 失败 返回 NULL

-- 获取表头 

alt text

9、对保存的结果进行释放操作

-- 保存的运行结果需要进行释放操作,不然会一直占用空间

  • void mysql_free_result(MYSQL_RES *result)

-- 函数的参数:

  • MYSQL_RES *result:填写保存的结果的指针

10、关闭数据库连接

  • void mysql_close(MYSQL *mysql)

-- 函数的参数:

  • MYSQL *mysql:填写数据库对象的地址

-- 链接库

alt text

alt text

连接到指定的数据库

-- 与perror一样,如果没有错误信息就不会打印

-- 再次创建同样的表,就会执行失败

-- 通过scanf输入数据,那怎么写在语句中呢, 用sprintf -- 将字符串变成我们想要的格式,作用:格式化字符串

-- 查看表中的数据 -- select * from 表名

-- 是保存运行结果(上一个指令运行的结果,所以这个函数之前一定要有指令运行)

要想在程序中获取表的数据 -- 先运行mysql_query("select * from 表名") 然后将运行的结果进行保存(这个函数不适用。。。) -- mysql_store_result() -- 将查询结果保存到结果集中,返回结果集指针


-- mysql_num_rows() -- 获取结果集中的行数(不算表头)

-- mysql_num_fields() -- 获取结果集中的列数

-- mysql_field_name() -- 获取结果集中指定列的列名


-- mysql_fetch_row() -- 从结果集中获取一行数据,返回一个指针数组

-- mysql_fetch_array() -- 从结果集中获取一行数据,返回一个关联数组

-- mysql_fetch_assoc() -- 从结果集中获取一行数据,返回一个关联数组

-- mysql_fetch_object() -- 从结果集中获取一行数据,返回一个对象

-- mysql_fetch_field() -- 获取结果集中指定列的信息,返回一个对象

-- mysql_fetch_row() -- 从结果集中获取一行数据,返回一个指针数组

-- mysql_free_result() -- 释放结果集

-- mysql_close() -- 关闭数据库连接

-- mysql_error() -- 获取最后一次执行的错误信息

--

-- 更新数据的前提是不是要先知道表中的数据

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

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

相关文章

如何在算家云搭建Qwen2(智能对话)

一、Qwen2简介 Qwen2 是由阿里云通义千问团队研发的新一代大型语言模型系列&#xff0c;它在多个方面实现了技术的飞跃和性能的显著提升。以下是对 Qwen2 的详细介绍&#xff1a; GitHub - QwenLM/Qwen2: Qwen2 is the large language model series developed by Qwen team, …

GD32 Flash读写与存储数据操作,亲测可用

这里写自定义目录标题 联系作者请加一、GD32 Flash特性二、Flash读写操作1. Flash读取操作2. Flash写入操作三、注意事项四、其他方法联系作者请加 如有技术问题及项目需求请加作者微信! 一、GD32 Flash特性 存储空间划分:GD32的Flash存储空间通常分为主存储块和信息块。主存…

SpringBoot学习(5)(springboot整合mybatis)

目录 1、整合mybatis基本介绍 &#xff08;1&#xff09;spring整合mybatis &#xff08;2&#xff09;springboot整合mybatis 2、案例&#xff08;根据用户id&#xff0c;返回用户所有信息&#xff09; &#xff08;1&#xff09;新建数据库连接、数据库、表。插入值 &a…

探索MongoDB的Python之钥:pymongo的魔力

文章目录 探索MongoDB的Python之钥&#xff1a;pymongo的魔力背景&#xff1a;为什么选择pymongo&#xff1f;简介&#xff1a;pymongo是什么&#xff1f;安装&#xff1a;如何将pymongo纳入你的项目&#xff1f;基础用法&#xff1a;五个核心函数介绍1. 连接到MongoDB2. 选择数…

【Spring Boot 3】【Web】自定义过滤器

【Spring Boot 3】【Web】自定义过滤器 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费…

【数据分享】2000-2022年我国省市县三级的逐日O3数据(免费获取\excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据、2013-2022年的省市县三级的逐日SO2数据、2008-2022年我国省市县三级的逐日NO2数据和2000-2022年我国省市县三级…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库&#xff1a; 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错&#xff1a;ModuleNotFoundError: No module named ‘ten…

基于tesseract实现文档OCR识别

导入环境 导入必要的库 numpy: 用于处理数值计算。 argparse: 用于处理命令行参数。 cv2: OpenCV库&#xff0c;用于图像处理。 import numpy as np import argparse import cv2设置命令行参数 ap argparse.ArgumentParser() ap.add_argument("-i", "--imag…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…

长效静态代理IP推荐:天启代理IP的优势与应用

在如今这个互联网的时代&#xff0c;代理IP已成为许多网络活动的必备工具。相比动态代理IP&#xff0c;长效静态代理IP以其稳定性和长时间有效性&#xff0c;成为了许多用户的首选。今天&#xff0c;我们将深入探讨长效静态代理IP的优势&#xff0c;并重点推荐天启代理IP。 什…

Docker compose 安装 ELK

1. 简介 方案概述 我们使用 Filebeat 作为日志收集器&#xff0c;接入到 Redis 队列&#xff0c;然后消费队列中的日志数据流转到 Logstash 中进行解析处理&#xff0c;最后输出到 Elasticsearch 中&#xff0c;再由 Kibana 展示到页面上。我们采用 Elasticsearch 3 节点集群…

web前端-网页

一、网页 1.网页 网站是指在因特网上根据一定的规则&#xff0c;使用 HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”&#xff0c;通常是 HTML格式的文件&#xff0c;它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声…

婚宴时扫码查桌号

如何通过关键词查询信息&#xff1f; 在婚宴这一喜庆的时刻&#xff0c;确保每位宾客都能迅速找到自己的座位是至关重要的。为了使这一过程更加流畅和高效&#xff0c;我们特别引入了扫码查桌号服务。以下是详细的操作指南&#xff0c;帮助您快速掌握如何使用此服务&#xff0c…

缓存:浅谈双写导致的数据一致性问题

从理论上来说&#xff0c;给缓存设置过期时间&#xff0c;是保证最终一致性的解决方案。这种方案下&#xff0c;我们对存入缓存的数据设置过期时间&#xff0c;所有的写操作以数据库为准&#xff0c;对缓存操作只是尽最大努力更新即可。也就是说如果数据库写成功&#xff0c;缓…

C++11新增特性:列表初始化(std::initializer_list) decltype、auto、nullptr、范围for

C11新增特性&#xff1a;列表初始化&#xff08;std::initializer_list&#xff09;& decltype、auto、nullptr、范围for 一、C11新增统一初始化方式1.1 新增方式1.2 初始化容器底层原理&#xff08;std::initializer_list&#xff09; 二、新增声明2.1 decltype2.3 auto &…

网络安全服务基础Windows--第10节-FTP主动与被动模式

概述 将某台计算机中的⽂件通过⽹络传送到可能相距很远的另⼀台计算机中&#xff0c;是⼀项基本的⽹络应⽤&#xff0c;即⽂件传送。 ⽂件传送协议FTP &#xff08;File Transfer Protocol&#xff09;是因特⽹上使⽤得最⼴泛的⽂件传送协议。 FTP是⼀个⽼早的⽹络协议&…

VMware 虚拟化平台部分问题和优化措施汇总

本文整理记录了VMware 虚拟化平台部分问题和优化措施。 1、vCLS虚拟机无法启动&#xff1a; 修改办法&#xff0c;参照本人下文&#xff1a; vCLS报错处理&#xff08;缺少功能“MWAIT”&#xff0c;没有与虚拟机兼容的主机&#xff09; 2、优化存储卷的路径选择策略 ESXi…

可以进行非机动车违停、人员聚集、临街摆摊、垃圾满溢、烟雾火情等城市治理场景的智能识别的智慧城管开源了

智慧城管视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 基于深度学习技…

Redis 篇-深入了解查询缓存与缓存所带来的问题(读写不一致、缓存穿透、缓存雪崩、缓存击穿)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 本章目录 1.0 什么是缓存 2.0 项目中具体如何添加缓存 3.0 添加缓存后所带来的问题 3.1 读写不一致问题 3.1.1 缓存更新策略 3.1.2 具体实现缓存与数据库的双写一致 3.2 缓存穿…

vue2———组件

一个简单的组件 组件进行注册并使用 结果&#xff1a; 在进行对组件的学习时遇见一些问题&#xff1a; 1、组件的命名 解决方法&#xff1a; 组件的命名 Vue.js 组件的命名遵循一些最佳实践&#xff0c;这些实践有助于保持代码的清晰和一致性。 多单词命名&#xff1a;Vue 官…