系统编程-数据库

news2024/11/13 23:49:25

数据库

目录

数据库

引入

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.coloradmin.cn/o/2101500.html

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

相关文章

Spring框架——springweb(一篇包会)

目录 一、Springweb概述 1.SpringWeb特点 2.SpringWeb组件 3.SpringWeb运行流程 二、搭建Springweb 1.导入框架所需的包 2.配置 DispatcherServlet 3.开启SpringWeb注解 4.处理器类搭建 5.请求处理 &#xff08;1&#xff09;接收请求RequestMapping &#xff08;2&…

大疆上云API基于源码部署

文章目录 大疆上云API基于源码部署1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Redis的安装…

Visual Studio Code大大提升工作效率小技巧~~~

Visual Studio Code &#xff08; VS Code &#xff09;是一个知名且评价很高的代码编辑器&#xff0c;具有大量功能和扩展以增强开发体验。使用 VS Code 的主要好处之一是它的灵活性&#xff0c;允许开发人员根据他们的特定需求对其进行自定义。 此外&#xff0c;VS Code 轻巧…

(十五)SpringCloudAlibaba-Sentinel持久化到Nacos

前言 在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中; 传送门(Sentinel数据持久化到文件)https://blog.csdn.net/weixin_45876411/article/details/140742963 默认情况下 Sentinel 只能接收到 Nacos 推送的消息&#xff0c;但…

JNPF低代码:可视化如何赋能企业的转型之路

在数字化转型的浪潮中&#xff0c;企业面临着前所未有的挑战与机遇。传统的软件开发方式往往耗时长、成本高&#xff0c;且难以快速适应市场变化。低代码开发平台的出现&#xff0c;为企业的数字化转型提供了新的思路和工具。其中&#xff0c;JNPF低代码平台以其独特的可视化特…

LDR6023:革新手机转接器体验,快充与OTG并存的科技杰作

在智能设备日益普及的今天&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着功能的不断增加&#xff0c;手机对于电力和数据传输的需求也日益提升。为了应对这一挑战&#xff0c;深圳市乐得瑞科技有限公司凭借其深厚的科技积累和创新精神&#xf…

嵌入式系统------ARM

目录 一.c语言回顾 1.特殊符号 &#xff08;1&#xff09;const &#xff08;2&#xff09;static &#xff08;3&#xff09;extern 2.内存的结构 &#xff08;1&#xff09;kernel&#xff1a;内核 &#xff08;2&#xff09;栈区 &#xff08;3&#xff09;堆区 &#xff08…

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap

ConcurrentMap ConcurrentMap 是 Java 并发包中提供的一个接口&#xff0c;它继承了 java.util.Map 接口&#xff0c;专门用于支持高并发环境下的线程安全操作。ConcurrentMap 提供了一系列线程安全的方法&#xff0c;旨在解决在多线程环境下使用普通 Map 类型&#xff08;如 …

用ChatGPT三分钟写一个完美的PPT,彻底告别繁琐的制作过程

用AI或ChatGPT来制作PPT的方式多得很&#xff01; 下面就用超级简单的语言&#xff0c;一步步教你怎么搞定&#xff0c;三分钟内保准搞定你的PPT。 所有需要的方法和工具都在这里&#xff01; 很简单&#xff0c;只要你输入一个标题&#xff0c;AI就能完成PPT的制作。 如果…

文件 fd

目录 1. 建立共识原理2. 回忆 C 文件接口2.1 当前工作路径2.2 w / a 方式写入2.3 默认打开的三个文件流 3. 认识文件系统调用3.1 O_WRONLY|O_CREAT 写时创建3.2 O_TRUNC 截断长度&#xff08;也即全覆盖式写入&#xff09;3.3 O_APPEND 追加 4. 浅谈文件访问的本质4.1 简证 1. …

高级算法设计与分析 学习笔记 2 希尔排序 线性时间内的排序——计数排序,基数排序,桶排序

希尔排序&#xff08;比较排序&#xff09; 要选定一个步长&#xff08;比如4&#xff09;&#xff0c;那么0&#xff0c;4&#xff0c;8……它们是一组&#xff0c;1&#xff0c;5&#xff0c;9……他们是一组。分组排完之后再换成2步长&#xff0c;最后改成1&#xff0c;就行…

牛心包瓣类医用生物瓣膜厚度无损检测

关键字&#xff1a;牛心包瓣膜&#xff0c;牛心包瓣叶&#xff0c;生物瓣膜&#xff0c;生物心脏膜&#xff0c;测厚仪&#xff0c;瓣膜生产&#xff0c;瓣膜检测设备&#xff0c; 牛心包瓣叶的厚度和轮廓所需的高精度取决于多个因素&#xff0c;包括瓣膜的制造标准、临床应用需…

百度飞将 paddle ,实现贝叶斯神经网络 bayesue neure network bnn,aistudio公开项目 复现效果不好

论文复现赛&#xff1a;贝叶斯神经网络 - 飞桨AI Studio星河社区 https://github.com/hrdwsong/BayesianCNN-Paddle 论文复现&#xff1a;Weight Uncertainty in Neural Networks 本项目复现时遇到一个比较大的问题&#xff0c;用pytorch顺利跑通源代码后&#xff0c;修改至pad…

【每日一练】python之tkinter的Label标签基础用法

""" 什么是tkinter窗口&#xff1f;tkinter是python中一个标准的库&#xff0c;用于创建图形界面&#xff08;GUI&#xff09;应用程序&#xff0c;它提供了一组工具和组件&#xff0c;使开发者能够在Python中创建窗口、按钮、标签、文本框、菜单等各种界面元素…

基于协同过滤的电影推荐系统

推荐系统已经成为当今互联网平台不可或缺的一部分&#xff0c;尤其是在电影、音乐和电子商务等领域。本文将带您深入探讨如何利用协同过滤算法&#xff0c;构建一个功能齐全的电影推荐系统。我们将结合Python、Django框架以及协同过滤算法&#xff0c;逐步实现这一目标。 完整…

Go父类调用子类方法(虚函数调用)

前言 在Go语言中&#xff0c;支持组合而不是继承。网上都说可以通过接口和结构体内嵌来模拟面向对象编程中的子类和父类关系。但给的例子或写法感觉都不是很好&#xff0c;难以达到我的目的&#xff08;比如通过模板模式实现代码的重用等&#xff09;。因此调查了一下实现方式…

内裤洗衣机需要一人一台吗?快来围观2024年五大好货集合

随着市面上的内衣抑菌产品越来越多&#xff0c;内衣洗衣机的质量也是参差不齐&#xff0c;一些网红跨界品牌内衣洗衣机的用料和做工品质较差&#xff0c;使用过程中出现清洗不干净和稳定性不足等问题。那么选购内衣洗衣机需要注意什么呢&#xff1f;我作为一名小家电测评博主&a…

pikachu文件包含漏洞靶场(本地文件包含+远程文件包含关卡)

本地文件包含 1.来到关卡随便点击一个提交 可以发现这里可以读取文件 这是1.txt内容 能读取到上一级文件那么也就可以读取本地文件 上传一个jpg文件 拿去连就ok了 远程包含 包含写木马的文件 该文件内容如下&#xff0c;其作用是在fi_remote.php文件的同级目录下新建一个文…

Java 基于微信小程序的小区服务管理系统,附源码

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

【赵渝强老师】MongoDB的WiredTiger存储引擎

WiredTiger提供文档级别&#xff08;Document-Level&#xff09;的并发控制&#xff0c;检查点&#xff08;CheckPoint&#xff09;&#xff0c;数据压缩和本地数据加密&#xff08; Native Encryption&#xff09;等功能。从MongoDB 3.2 版本开始&#xff0c;WiredTiger成为Mo…