Linux与数据库
1.1. 数据库概念属于C/S结构数据库 是存放数据的仓库它是一个按数据结构来存储和管理数据的计算机软件系统。数据库管理系统 是数据库系统的核心组成部分主要完成对数据库的操作与管理功能例如实现数据 的存储查询修改删除及数据库用户的管理权限管理等。RDBMS : 关系数据库管理系统Relational Database Management System。SQL : 结构化查询语言(Structured Query Language). mysql数据库是一种C/S模型即客户端和服务端模型客户单通过用户名密码登录连接服务器。连 接成功后才可以进行数据库的操作增删改查)。数据库是一个C/S结构包含服务器端和客户端我们在安装的时候apt install mysql-server安装的是服务器端其实它自己默认也会安装客户端目前的数据库都是CS结构数据库的服务器端和客户端是通过tcp连接的mysql的端口是3306。面试问题IP地址根据部署来决定。如下图所示C/S结构概述C/S结构Client/Server Structure是一种分布式计算架构将任务分解为客户端Client和服务器端Server两部分。客户端负责用户交互和界面展示服务器端处理核心逻辑与数据存储。两者通过网络协议如HTTP、TCP/IP通信实现资源共享与功能协同。1.2MySql的安装及设置在ubuntu发行版本上使用apt命令安装mysql可以使用apt工具安装:apt install mysql-server1.3查看数据库的状态service mysql status1.4查看数据库的端口netstat -natp二.使用MYSQL1.登录mysql -uroot -p密码注意;如果是第一次登录直接使用可以直接回车进入数据库可以修改自己的密码ALTER user rootlocalhost IDENTIFIED WITH mysql_native_password BY 自己更改的密码;在数据库中可以按照我们所学的sql语法来进行使用2.数据库语法查看数据库show databases;显示数据库版本号select version();显示时间select now();创建数据库create database 数据库名选择数据库use 数据库名数据库内部操作查看数据库中的所有表show tables(字段 类型 约束, 字段 类型 约束 );创建表创建表时需要指定各个字段的类型常见类型如下数值类型(部分字符串部分类型如下char(N) 是定长无论存多少字符都占 N 个字符的存储空间不足补空格varchar(N) 是变长实际存多少字符就占多少空间额外加 1-2 字节记录长度。日期类型约束主键 primary key : 物理上存储的顺序非空 not null : 此字段不允许填写空值唯一unique: 此字段的值不允许重复默认default: 当不填写此值时会使用默认值。如果填写时以填写的值为准外键foreign key : 对关系字段进行约束当为关系字段填写值时会到关联的表中查询此值是否存在如果存在则写成功如果不存在则写失败。 虽然外键约束可以保证数据的有效性但是在进行 数据的crud(增加修改删除查询)时都会降低数据库的性能。auto_increment 表示自动增长。现在让我们利用我们所学的知识创建一个数据库,并向其添加学生信息的表,查看表select * from 表名desc表名可以查看表的结构也就是各个字段的信息修改表名字修改表的名字使用 alter table 原表名 rename [to] 新表名; 其中to可以省略修改表字段信息修改表--添加字段alter table 原表名 add 列名 类型;修改字段-- 重新命名alter table 原表名 change 原字段名 新字段名 类型;修改字段-- 不改名字alter table 表名 modify 列名 类型 约束插入数据insert into 表名 values (...);更新数据删除数据删除表drop table 表名排序-- 按年龄升序排列 SELECT * FROM student ORDER BY age; -- 按年龄降序排列 SELECT * FROM student ORDER BY age DESC; -- 多字段排序年龄升序身高降序 SELECT * FROM student WHERE age BETWEEN 18 AND 24 ORDER BY age ASC, height DESC;聚合函数常用函数COUNT(),MAX(),MIN(),SUM(),AVG()-- 统计男生人数修正原示例中的错误写法 SELECT COUNT(*) FROM student WHERE gender 男; -- 计算平均年龄并保留两位小数 SELECT ROUND(AVG(age), 2) FROM student;条件查询比较运算符, , , , , !-- 查询年龄大于18岁的学生 SELECT * FROM student WHERE age 18; -- 查询年龄等于18岁的学生 SELECT * FROM student WHERE age 18;逻辑运算符AND, OR, NOT-- 18到24岁之间的学生 SELECT * FROM student WHERE age 18 AND age 24; -- 18岁以上或身高180及以上 SELECT * FROM student WHERE age 18 OR height 180; -- 非18岁以上的男生 SELECT * FROM student WHERE NOT (age 18 AND gender 男);模糊查询LIKE%匹配任意字符_匹配单个字符-- 查询姓名以“小”开头 SELECT name FROM student WHERE name LIKE 小%; -- 查询姓名包含“小”字修正原示例中的笔误 SELECT name FROM student WHERE name LIKE %小%; -- 查询两个字符的名字 SELECT name FROM student WHERE name LIKE __;范围查询-- 不连续范围IN SELECT name FROM student WHERE age IN (18, 20, 24); -- 连续范围BETWEEN SELECT name FROM student WHERE age BETWEEN 18 AND 24; -- 空值判断 SELECT * FROM student WHERE addr IS NULL;分组查询GROUP BY基本分组与聚合-- 按性别分组统计人数 SELECT gender, COUNT(*) FROM student GROUP BY gender; -- 按性别分组显示组内人名 SELECT gender, GROUP_CONCAT(name) FROM student GROUP BY gender;分页LIMIT与OFFSET-- 每页10条数据查询第3页跳过前20条 SELECT * FROM student LIMIT 10 OFFSET 20; -- 简写方式 SELECT * FROM student LIMIT 20, 10;连接查询JOIN内连接INNER JOIN-- 查询学生及其班级信息 SELECT s.name, c.class_name FROM student s INNER JOIN class c ON s.cls_id c.id;左连接-- 查询所有学生及班级信息包含无班级的学生 SELECT s.name, c.class_name FROM student s LEFT JOIN class c ON s.cls_id c.id;子查询标量子查询-- 查询年龄大于平均年龄的学生 SELECT * FROM student WHERE age (SELECT AVG(age) FROM student);IN子查询-- 查询在班级1或2的学生 SELECT * FROM student WHERE cls_id IN (SELECT id FROM class WHERE id IN (1, 2));三.C/C链接数据库在连接之前需要确保已经安装了c/c开发库如果没有安装可以在管理员模式下输入:apt install libmysqlclient-dev链接数据库的头文件如下#includemysql/mysql.h当使用了一些访问mysql有关的接口在需要链接的时候需要指定库名及在编译后加 -lmysqlclient3.1初始化链接MYSQL *mysql_init(MYSQL* mysql);该方法用来初始化一个连接句柄如果参数为空则返回一个指向新分配的连接句柄的指针。如果传递一个已有的结构它将被重新初始化出错时返回为NULL。3.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_init方法初始化后返回的指针。host是主机名或者连接的服务器 IP 地址也可以使用localhost或127.0.0.1或 或NULL 。user是用户名数据库中添加的用户管理员是root 。passwd是用户的密码。db是数据库的名字。port默认是3306也可直接写 0意味着使用 mysql 默认端口。unix_socket一般为NULL表示不使用 unix 套接字或者管道。clientflag标志位一般给 0 。返回值失败为NULL成功与第一个参数值相同。3.3关闭链接void mysql_close(MYSQL* mysql);3.4执行sql语句int mysql_query(MYSQL* mysql,const char* p);3.5提取结果集MYSQL_RES *mysql_store_result(MYSQL *mysql); // 一次性提取所有数据 //MYSQL_RES *mysql_use_result(MYSQL *mysql); // 一次提取一行数据3.6获取结果集中有多少行uint64_t mysql_num_rows(MYSQL_RES *res);只有执行了mysql_store_result()之后才可以调用该方法获取结果集中的行数。如果没有返回行则为 0 。3.7取出结果集中的一行记录MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);释放内存void mysql_free_result(MYSQL_RES *result);小练习int main() { MYSQL my; MYSQL *use mysql_init(NULL); if (NULL use) { exit(1); } if (mysql_real_connect(use, 127.0.0.1, root, 111111, sq_2414, 3306, NULL, 0) NULL) { printf(connect ERROR); printf(%s,mysql_error(use)); exit(1); } printf(succeed\n); char sql[128] {0}; // for(int i0;i10000;i){ sprintf(sql,insert into stu values (3,XIAO,%d),i); if (mysql_query(use, sql) ! 0) { mysql_ping(use); printf(QERROR\n); printf(%s, mysql_error(use)); // printf(%s,mysql_error(use)); } } exit(1); } // mysql_close(use);

相关新闻

Axmol Engine渲染后端全解析:Metal、OpenGL到WebGL的跨平台实现

Axmol Engine渲染后端全解析:Metal、OpenGL到WebGL的跨平台实现

Axmol Engine渲染后端全解析:Metal、OpenGL到WebGL的跨平台实现 【免费下载链接】axmol 项目地址: https://gitcode.com/gh_mirrors/ad/adxe Axmol Engine是一款功能强大的跨平台游戏引擎,其渲染后端设计实现了对Metal、OpenGL和WebGL等多种图形…

2026/7/4 5:06:07 阅读更多 →
TerraGoat多云挑战:Azure环境下的15个高危配置错误深度剖析

TerraGoat多云挑战:Azure环境下的15个高危配置错误深度剖析

TerraGoat多云挑战:Azure环境下的15个高危配置错误深度剖析 【免费下载链接】terragoat TerraGoat is Bridgecrews "Vulnerable by Design" Terraform repository. TerraGoat is a learning and training project that demonstrates how common configura…

2026/7/5 0:51:28 阅读更多 →
Web制作网站

Web制作网站

主页:<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>主页</title></head><body><h1>你好&#xff01; 来到我的网站</h1><p><a href"login.html" ta…

2026/7/3 16:27:16 阅读更多 →

最新新闻

RSA 私钥计算 解题 writeup

RSA 私钥计算 解题 writeup

题目来源&#xff1a;CryptoHack - Public-Key Cryptography 公钥密码学模块 难度&#xff1a;20 分 15714 次解题 26 个解决方案 知识标签&#xff1a;RSA、模乘法逆元、欧拉函数、扩展欧几里得算法一、题目背景题目给出了 RSA 中的两个素数和公钥指数&#xff1a;p 857504…

2026/7/6 13:32:28 阅读更多 →
机器学习项目的完整流程:从原始数据到模型预测

机器学习项目的完整流程:从原始数据到模型预测

学完 AI、机器学习、训练集、指标和过拟合之后&#xff0c;下一步要把这些概念放进一个完整项目里。 很多初学者一上来就问&#xff1a;模型用什么&#xff1f;参数怎么调&#xff1f;准确率为什么不高&#xff1f;但真正做项目时&#xff0c;模型只是中间一环。一个项目能不能…

2026/7/6 13:30:26 阅读更多 →
GitLab CI Include 关键字完全指南:4种方式模块化编排你的流水线

GitLab CI Include 关键字完全指南:4种方式模块化编排你的流水线

GitLab CI Include 关键字完全指南&#xff1a;4种方式模块化编排你的流水线&#x1f4c8; Include 工作流程图一、核心概念&#xff1a;Include 的本质是"配置拼接"1. 处理时机2. 合并策略3. 嵌套限制二、方式一&#xff1a;include:local —— 引用同仓库文件场景示…

2026/7/6 13:28:26 阅读更多 →
Travis CI Matrix 多环境测试终极指南:15个版本组合并行构建的秘籍

Travis CI Matrix 多环境测试终极指南:15个版本组合并行构建的秘籍

Travis CI Matrix 多环境测试终极指南&#xff1a;15个版本组合并行构建的秘籍&#x1f4c8; Matrix 矩阵构建流程图一、核心概念&#xff1a;Matrix 的本质是什么&#xff1f;二、实战一&#xff1a;Node.js 多版本 多操作系统的前端测试场景描述三、实战二&#xff1a;Pytho…

2026/7/6 13:28:26 阅读更多 →
Selenium自动化测试中ChromeDriver通信失败排查与优化指南

Selenium自动化测试中ChromeDriver通信失败排查与优化指南

1. 项目概述&#xff1a;当Selenium启动浏览器时&#xff0c;那个令人头疼的“请求发送失败”异常如果你正在用Selenium做自动化测试&#xff0c;尤其是处理那些需要稳定运行数小时甚至数天的任务&#xff0c;那么你很可能遇到过这个让人瞬间血压升高的错误信息&#xff1a;“E…

2026/7/6 13:28:26 阅读更多 →
DVWA从入门到精通(十一):XSS (Stored)(存储型XSS)

DVWA从入门到精通(十一):XSS (Stored)(存储型XSS)

摘要&#xff1a;本文是《DVWA从入门到精通》系列的第十一篇&#xff0c;带你全面掌握XSS (Stored)&#xff08;存储型XSS&#xff09;模块的攻防全流程。从存储型XSS的核心原理出发&#xff0c;逐步讲解Low、Medium、High三个级别的攻击手法与源码分析&#xff0c;并深入探讨I…

2026/7/6 13:26:21 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性&#xff1a;5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域&#xff0c;单元测试是保证代码质量的重要环节。当应用涉及数据库操作时&#xff0c;测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南&#xff1a;用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南&#xff1a;告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1a;下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻