Linux——MySql数据库

一、数据库的有关概念

1.数据库

存放数据的仓库,由存放数据的文件和管理数据的软件两部分构成。

2.数据库管理系统

主要完成对数据库的操作与管理功能。比如:对数据的增删改查,对数据库用户的管理,权限管理等。

3.mysql

mysql数据库是一种C/S(客户端和服务端)模型,需要先启动服务器(mysqld),然后客户端(mysql)要通过用户名密码登录连接到服务器(使用TCP建立连接),连接成功后才能对数据进行操作。mysql使用的端口是3306。

二、数据库的基本操作

1.数据库服务的启动与停止(管理员权限)

(1)启动服务器 service mysql start

(2)重启服务器 service mysql restart

(3)停止服务器 service mysql stop

(4)查看服务状态 service mysql status

2.登录命令

mysql -u用户名 -h主机地址(省略代表本机) -p密码

3.退出数据库

exit/quit/ctr+d

4.查看所有数据库

show databases;

5.显示数据库的版本

select version();

6.显示时间

select now();

7.创建数据库

create database 数据库名

8.选择使用数据库

use 数据库名

9.查看当前使用的数据库

select database()

10.删除数据库

drop database 数据库名

11.查看数据库中的所有表

show tables;

12.创建表

create table 数据库表的名字(字段 类型 约束)

eg: create table student( id int primary key not null,name varchar(30));

13.查看表中的数据

查看所有数据:select * from 表名

查看部分数据: select 字段 from 表名 where 字段=值

14.插入数据

insert into 表名 values(字段1的值,字段2的值..........)

15.更新数据

update 表名 set 字段=值 where 字段=值

16.删除数据

删除全部行:delete from 表名

删除指定行:delete from 表名 where 字段=值

17.删除表

drop table 表名

三、使用C语言连接mysql数据库

1.前提

已安装c/c++的开发库

2.步骤

①初始化连接句柄

②连接数据库

③执行sql语句

④关闭连接

3.代码理解

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<mysql/mysql.h>
#include<string.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","2408_db",3306,NULL,0);
    if(mysql==NULL)
    {
        printf("连接失败\n");
        exit(1);
    }
    printf("连接成功\n");
    //插入语句
    //char* sql="insert into student values(1002,'小顾',20)";
    //修改语句
    //char* sql="update student set age=25 where id=1001";
    //删除语句
    //char* sql="delete from student where id=1002";

    //查询
    char* sql="select name from student where id =1001";

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

    //获取查询到数据的结果集
    MYSQL* r=mysql_store_result(mysql);
    if(r==NULL)
    {
        printf("获取结果集失败\n");
        exit(1);
    }
    //获取结果集中有多少条记录
    int num=mysql_num_rows(r);
    if(num==0)
    {
        printf("0条记录\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[1]  第二列 row[2]
    for(int j=0;j<count;j++)
    {
        printf("%s  ",row[j]);//以字符串的形式打印出来是因为服务器响应客户端时,使用TCP协议以send发送数据
    }
    printf("\n");
   }

    //释放结果集
    mysql_free_result(r);
    //关闭连接句柄
    mysql_close(mysql);
    exit(0);
}

四、事务

1.事务的定义

事务是数据库管理系统中的一个操作序列,这些操作作为一个整体要么全部成功,要么全部失败。

2.事务的基本特性(ACID)

(1)原子性:事务中所有操作要么全部完成,要么全部不做。

(2)一致性:事务执行前后,数据库必须保持一致状态。

(3)隔离性:多个事务并发执行时,相互之间的操作不会互相干扰,表现为一个事务的中间状态对其他事务是不可见的。

(4)持久性:一旦事务提交,其结果是永久性的,即使系统崩溃也不会丢失。

3.事务的隔离级别

(1)读未提交 :事务可以读取未提交事务的更改,可能出现脏读。

(2)读已提交:事务只能读取已提交事务的更改,避免脏读,但可能出现不可重复读。

(3)可重复读 :在一个事务内多次读取同一数据保证一致,避免不可重复读,但可能出现幻读。

(4)串行化 :最高隔离级别,通过强制事务串行执行,完全避免幻读,但性能较低。

五、索引

1.索引的定义

索引(Index)是数据库中用来加快数据查询速度的一种数据结构。它类似于书籍的目录,帮助数据库快速定位到需要的数据行,而不必扫描整个表。

2.索引的作用

(1)提升查询效率

(2)加快数据检索速度

3.索引的缺点

(1)增加写操作(插入、更新、删除)的成本,因为每次操作都要维护索引。

(2)占用存储空间。

六、视图

1.视图的定义

视图是数据库中的一种虚拟表,本身不存放数据,数据来源于基本表。

2.使用视图的原因

(1)简化复杂查询:将复杂的多表联结或筛选条件封装在视图中,调用方便。

(2)提升安全性:只暴露部分数据,隐藏敏感信息,控制用户权限。

(3)提供数据抽象:隐藏底层表结构,减少应用与数据库的耦合。

相关推荐
GJCTYU9 分钟前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech202512 分钟前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风14 分钟前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
是阿建吖!21 分钟前
【Linux | 网络】网络基础
linux·网络
mmoyula21 分钟前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发
weixin_4786897629 分钟前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
阿杆42 分钟前
😡同事查日志太慢,我现场教他一套 grep 组合拳!
linux·后端
墨小傲1 小时前
基于Linux下的vscode c/c++开发环境搭建详细教程
linux·c语言·vscode
cui_win1 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_timestamps
linux·网络·tcp/ip
czhc11400756631 小时前
Linux 77 FTP
linux·运维·服务器