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)提供数据抽象:隐藏底层表结构,减少应用与数据库的耦合。

相关推荐
Zfox_40 分钟前
Redis:Hash数据类型
服务器·数据库·redis·缓存·微服务·哈希算法
陈丹阳(滁州学院)3 小时前
若依添加添加监听容器配置(删除键,键过期)
数据库·oracle
远方16094 小时前
14-Oracle 23ai Vector Search 向量索引和混合索引-实操
数据库·ai·oracle
apocelipes4 小时前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
GUIQU.5 小时前
【Oracle】数据仓库
数据库·oracle
努力学习的小廉5 小时前
深入了解linux系统—— 进程池
linux·运维·服务器
恰薯条的屑海鸥5 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
咖啡啡不加糖5 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
曼汐 .5 小时前
数据库管理与高可用-MySQL高可用
数据库·mysql
秃头菜狗5 小时前
各个主要目录的功能 / Linux 常见指令
linux·运维·服务器