当前位置: 首页 > article >正文

linux-mysql

1.安装软件mysql-->apt install mysql-server要是失败了先使用命令apt update。安装完成后使用命令查看是否安装成功service mysql status-->显示数据库信息   service mysql stop-->停止数据库      service mysql start-->开始数据库  service mysql restzrt-->重启数据库

2.mysql是c/s(服务器/客户端)结构,有个服务器端和多个客户端,服务器与客户端连接是tcp连接,其中mysql的端口是3306,上述命令安装的是服务器端。

3.\c可以退出mysql中的语句

4.mysql  清屏  ctrl+l

5.c语言连接数据库(见数据库的资料)以下为连接的测试:(具体参数见资料)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<mysql/mysql.h>

int main()
{
    MYSQL mysql_con;//定义mysql的连接句柄
    MYSQL * mysql=mysql_init(&mysql_con);//初始化连接句柄
    if(mysql==NULL)
    {
        printf("init err\n");
        exit(1);
    }

    mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","day1",3306,NULL,0);//连接数据库,这里的mysql与函数里面的mysql和上面初始化的Mysql是一个
    if(mysql==NULL)
    {
        printf("连接失败\n");
        exit(1);
    }
    printf("连接成功\n");

    char*sql="insert into Student values(31051224,'田',20)";//添加数据 执行sql语句
    if(mysql_query(mysql,sql)!=0)//将sql语句添加到mysql中
    {
        printf("query err\n");
    }

    mysql_close(mysql);//关闭连接句柄
    exit(0);
}

6.c语言连接数据库后进行增删查改操作(具体参数看资料)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mysql/mysql.h>

int main()
{
    //创建连接句柄,并初始化
    MYSQL mysql_con;
    MYSQL* mysql = mysql_init(&mysql_con);
    if ( mysql == NULL )
    {
        printf("init err\n");
        exit(1);
    }

    //连接数据库服务器
    mysql = mysql_real_connect(mysql,"127.0.0.1","root","111111","day1",3306,NULL,0);
    if( mysql == NULL )
    {
        printf("连接失败\n");
        exit(1);
    }
    printf("连接成功\n");

    //char*sql="insert into Student values(31051286,'王',22)";//插入
    //char *sql="update Student set age=66 where id=31051223";//修改
    //char *sql="delete from Student where id=31051223";//删除
    //char*sql="select * from Student";//查询
    char*sql="select name from Student where id=31051266";//查询

     //执行sql语句
    int n = mysql_query(mysql,sql);
    if( n != 0 )
    {
        printf("执行sql语句失败\n");
        exit(1);
    }
    printf("执行sql语句成功\n");

//-------------------------------查询
    //获取结果集-->查询
    MYSQL_RES *r = mysql_store_result(mysql);
    if ( r == NULL )
    {
        printf("获取结果集失败\n");
    }

    //获取结果集有多少条记录-->查询
    int num = mysql_num_rows(r);
    if ( num == 0 )
    {
        printf("没有记录\n");
        mysql_free_result(r);
        exit(1);
    } 

    //打印有多少记录(行)-->查询
    printf("共查到%d条记录\n",num);

    //获取结果集有多少列-->查询
    int count = mysql_field_count(mysql);

    //打印有多少列-->查询
    printf("每条记录有%d列\n",count);

    //循环打印记录
    for(int i = 0; i < num; i++ )//行
    {
        //提取一行记录
        MYSQL_ROW row = mysql_fetch_row(r);
        //第一列 row[0], 第二列 row[1]-->拿到的是字符串
        for(int j = 0; j < count; j++ )//列
        {
            printf("%s   ",row[j]);
        }
        printf("\n");
    }

    //释放结果集
    mysql_free_result(r);
//-------------------------------

    //关闭连接句柄
    mysql_close(mysql);
    exit(0);
}

7.mysql-->事务(sql语句的集合,这些操作要么都执行,要么都不执行)(一条语句就是一个事物,要执行多条事物语句用begin开始,见资料):例子:转账的例子

事务的四大特性(ACID):

原子性:原子性是指事务中的所有操作要么全部完成,要么全部不完成。事务是一个不可分割的最小单位,不能部分执行。

 一致性:一致性是指事务执行前后,数据库的状态必须保持一致。事务必须将数据库从一个合法的状态转换到另一个合法的状态。如果事务违反了数据库的完整性约束(如主键约束、外键约束等),则事务会被撤销。-->举例:假设一个订单表要求订单金额必须大于 0。如果一个事务试图插入一个金额为负的订单,那么这个事务会被拒绝,以保持数据库的一致性。

隔离性:隔离性是指多个事务并发执行时,每个事务都应独立于其他事务,就好像它们是顺序执行的一样。隔离性确保了事务之间的操作不会相互干扰。举例: 假设两个事务同时对同一个账户进行操作:事务 1:从账户 A 减去 100 元。事务 2:从账户 A 减去 200 元。如果没有隔离性,可能会出现以下情况:事务 1 读取账户 A 的金额为 1000 元。事务 2 读取账户 A 的金额为 1000 元。事务 1 减去 100 元,账户 A 的金额变为 900 元。事务 2 减去 200 元,账户 A 的金额变为 800 元。但实际上,账户 A 的金额应该为 700 元。隔离性确保了事务之间的操作不会相互干扰,避免了这种错误。

持久性:指一旦事务提交,其对数据库的更改将永久生效,即使系统发生故障也不会丢失。

隔离级别

READ UNCOMMITTED 未提交读

READ COMMITTED 提交读

REPEATABLE READ 可重复读 (默认):多次查询的结果一致:幻读

SERIALIZABLE 可串行化(一个一个搞,不能同时进行)

8.视图(有3个问题,见资料)

9.索引(见资料)能不能给每一列都加上索引:不太好,因为索引底层是B+树,当每次插入数据时,都要修改数据从而改变索引B+树,很耗时间。

10.mysql底层实现:


http://www.kler.cn/a/576143.html

相关文章:

  • C语言【进阶篇】之结构体 —— 从基础声明到复杂应用的进阶之路
  • 论文阅读笔记:TopoFR: A Closer Look at Topology Alignment on Face Recognition
  • CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现
  • 图像生成-ICCV2019-SinGAN: Learning a Generative Model from a Single Natural Image
  • 小米安全攻防工程师面试题解析
  • 第6章 定时器计数器
  • 代码随想录算法营Day59 | 寻找存在的路径, 冗余连接,冗余连接II
  • 用DeepSeek学Android开发:Android初学者遇到的常见问题有哪些?如何解决?
  • 分类学习(加入半监督学习)
  • c# 修改邮件附件名称
  • Flask 打包为exe 文件
  • git如何解除远程仓库 改变远程仓库地址
  • fastapi+angular就业管理系统
  • 慕慕手记项目日记 2025-3-7 项目基本环境搭建
  • 如何用FFmpeg高效拉流(避坑指南)
  • 捣鼓180天,我写了一个相册小程序
  • Zypher Network :基于零知识证明方案为 AI 赋予可信框架
  • leetcode麻烦又易忘记题目
  • Python Flask框架学习汇编
  • ReferenceError: assignment to undeclared variable xxx