Linux下MySQL基本操作介绍

本文指导读者通过简单步骤安装MySQL,介绍如何使用命令行进行数据库操作,包括创建、修改和查询数据,以及关键函数如mysql_init和mysql_real_connect的使用。实例展示了如何连接数据库并展示表内容。
摘要由CSDN通过智能技术生成

一、安装MySQL

最快速的方法:

sudo apt update
sudo apt install mysql-server -y

第一行更新系统,第二行安装MySQL。

某些版本在安装后要开启root权限才能登录。开启和退出的方法:

//开启root
sudo su
//关闭root,有多种方式
ctrl+d
su user    //user为系统用户名

二、使用MySQL

mysql -u root -p    //进入MySQL
quit                //退出
create database hhh;//新建数据库
drop database hhh; //删除数据库
show databases;//显示数据库
use  database    //database为选择的数据库名称
show tables    //显示数据库内的表的列表
select * from table    //显示table的内容,*为通配符
insert into table values(123, 'hhh');    向表table中插入数据
update table set user = 123 where passwd = 'hhh'; //更新table中passwd的值为hhh的user值的数据
delete from table where user = 123;    //删除table中user等于123的行
delete from table;    //删除table中所有数据,但不删除表
//创建表
CREATE TABLE user(
        username char(50) NULL,
        passwd char(50) NULL
    )ENGINE=InnoDB;

三、C API

MySQL *mysql_init(MYSQL *mysql);

这个函数用来分配或者初始化一个MYSQL对象,用于连接mysql服务端。如果传入的参数是NULL指针,将自动为你分配一个MYSQL对象,如果这个MYSQL对象是自动分配的,那么在调用mysql_close的时候,会释放这个对象。

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 client_flag)

mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。

如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。出错调用mysql_error()函数显示出错信息,或使用mysql_errno()函数获取出错号。

int mysql_query(MYSQL *mysql,const char *query);

执行查询命令,query表示执行的SQL语句。

MYSQL_RES *mysql_store_result(MYSQL *mysql);

一次性获得整个查询结果。整个函数从服务器数据库中获得所有的行,并保存在客户端中。

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)

对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

当 mysql_fetch_row( ) 执行后返回一个二级指针,也可以理解为指针字符串数组,此函数执行完后会返回下一个字符串数组的地址,如果下一个字符串数组地址不存在,则返回NULL。

相关结构体

typedef struct st_mysql_res {

  my_ulonglong row_count;                       // 结果集的行数

  unsigned intfield_count, current_field;       // 结果集的列数,当前列

  MYSQL_FIELD*fields;                           // 结果集的列信息

  MYSQL_DATA*data;                              // 结果集的数据

  MYSQL_ROWS*data_cursor;                       // 结果集的光标

  MEM_ROOTfield_alloc;                          // 内存结构

  MYSQL_ROWrow;                                 // 非缓冲的时候用到

  MYSQL_ROWcurrent_row;                         //mysql_store_result时会用到。当前行

  unsigned long *lengths;                       //每列的长度

  MYSQL*handle;                                 // mysql_use_result会用。

  my_booleof;                                   //是否为行尾

} MYSQL_RES;

typedef char **MYSQL_ROW;            /* 返回的每一行的值,全部用字符串来表示*/
typedef struct st_mysql_rows {
  struct st_mysql_rows *next;/* list of rows */
  MYSQL_ROW data;
} MYSQL_ROWS;                  //mysql的数据的链表节点,可见mysql的结果集是链表结构

typedef struct st_mysql_field {
  char *name;                  /* Name of column */
  char *table;                 /* Table of column if column was a field */
  char *def;                   /* Default value (set by mysql_list_fields) */
  enum enum_field_types type;  /* Type of field. Se mysql_com.h for types */
  unsigned int length;         /* Width of column */
  unsigned int max_length;     /* Max width of selected set */
  unsigned int flags;          /* Div flags */
  unsigned int decimals;       /* Number of decimals in field */
} MYSQL_FIELD;  //列信息的结构

四、应用

要操作mysql数据库的话首先要连接已经建立的database,然后选择table,通过 mysql_store_result( ) 把 table 的内容选出来放到句柄,通过 mysql_num_fields( ) 统计 table 的字段,通过 mysql_fetch_field( ) 获得字段,最后通过  mysql_fetch_row( ) 获得每一行的内容并打印。

MariaDB [library]> select * from adminInfo;
+------+--------+----------+------------+---------------+---------+------+---------+
| Name | Gender | IdNumber | Phone      | Email         | Account | Code | AdminId |
+------+--------+----------+------------+---------------+---------+------+---------+
| turf | male   |     4406 | 2147483647 | 242324@qq.com | turf    | 123  |       1 |
+------+--------+----------+------------+---------------+---------+------+---------+
#include <stdio.h>
#include <stdlib.h>
#include <mariadb/mysql.h>
#include <string.h>
 
int main(int argc, char** argv)
{
	MYSQL conn;
	MYSQL_RES res; 
	MYSQL_ROW row;	// typedef char** MYSQL_ROW
	char tableName[30];
	char query[1024];
	unsigned short numFields;
	char column[30][40];
	//1.初始化
	mysql_init(&conn);
 
	//2.连接数据库
	if(!mysql_real_connect(&conn, "localhost", "root", "123456", "library", 0, NULL, 0))
	{
		fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(&conn));
		return -1;
	}
	//3.选择 table
	strcpy(tableName, "adminInfo");
		sprintf(query, "select * from %s", tableName);
	mysql_query(&conn, query);
 
	//4.取出 table 选择的内容
	res = *mysql_store_result(&conn);
	printf("%s\n", &res);
 
	//5.统计 table 字段
	numFields = mysql_num_fields(&res);
	printf("%d\n", numFields);
 
	//6.保存字段
	for(int i = 0; i < numFields; ++i)
	{
		strcpy(column[i], mysql_fetch_field(&res)->name);
		// printf("%s\n", column[i]);
	}
 
	//7.打印每一行的内容
	while( (row = mysql_fetch_row(&res)) != NULL )
	{
		for(int j=0; j<numFields; j++)
		{
			printf("%s = %s\t\n", column[j], row[j]);
		}
	}
 
	return 0;
}

 结果如下

 
8
Name = turf	
Gender = male	
IdNumber = 4406	
Phone = 2147483647	
Email = 242324@qq.com	
Account = turf	
Code = 123	
AdminId = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值