7. 数据库MySQL

news/2024/11/19 20:46:01/

本文介绍了数据库mysql的安装配置过程,以及通过VsCode调用数据库实现一些功能

一、安装

如果之前安装过,或者安装失败。清除MySQL缓存并重新安装:运行以下命令以清除所有MySQL缓存文件,并重新安装它们

sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/mysql
sudo dpkg --configure -a
sudo apt-get update
sudo apt-get install mysql-server-5.7

接下来配置mysql允许远程连接。
MySQL默认只允许本地登录,如果要开启远程连接需要修改MySQL配置文件

1、修改mysqld.cnf配置文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

打开之后修改bind-address地址为0.0.0.0
在这里插入图片描述
之后重启

sudo /etc/init.d/mysql restart

2、创建远程登录的用户

mysql -u root -p
show databases;
use mysql;
show tables;
select Host,User from user where User='root';

在这里插入图片描述
创建admin用户,并指定该用户可以从任何主机(% 代表通配符,表示所有主机)连接到 MySQL 数据库服务器

create user 'admin'@'%' identified by '123456';
select Host,User from user;

在这里插入图片描述

3、为需要远程登录的用户赋予权限

允许任何ip地址(%表示允许任何ip地址)的电脑用admin帐户和密码(123456)来访问这个mysql server。

grant all privileges on *.* to 'admin'@'%';

二、使用

安装MySQLWorkbench,即可通过SQL操作数据库

create database MING_DB;  #创建数据库
# drop database MING_DB;	#删除数据库
show databases;
use MING_DB;	#使用数据库
create table TBL_USER(	#创建TBL_USER表
U_ID int primary key auto_increment,
U_NAME varchar(32),
U_GENDER	varchar(32)
);
show tables;	#使用table

在这里插入图片描述

三、

为了通过vscode等开工具来使用数据库,需要安装mysql开发工具

sudo apt-get install libmysqlclient-dev

接下来实现数据的数据插入、查询、删除、存储。
注意对于删除,mysql一般只允许对主键删除,即delete from TBL_USER where U_ID='2';
若要对于针对其他标签的删除,可利用一个存储过程。

#sql
DELIMITER $$
create procedure PROC_DELETE_USER(in UNAME varchar(32))
BEGIN
set sql_safe_updates=0;
delete from TBL_USER where U_NAME=UNAME;
set sql_safe_updates=1;
END$$
CALL PROC_DELETE_USER('qin');

这段 MySQL 代码定义了一个名为 PROC_DELETE_USER 的存储过程,该存储过程接收一个参数 UNAME,用于指定要删除的用户的用户名。该存储过程执行以下操作:

  • 将 SQL 安全更新设置为 0,以便允许执行不安全的 DELETE 操作。
  • 删除 TBL_USER 表中 U_NAME 字段值等于传递给存储过程的参数 UNAME 的记录。
  • 将 SQL 安全更新设置回 1,以便禁止执行不安全的 SQL 语句。
  • 最后一行代码是调用该存储过程,并将字符串 ‘qin’ 作为参数传递给它。也就是说,该代码将会删除 TBL_USER 表中 U_NAME 字段值为 ‘qin’ 的记录。

最后编译指令为gcc -o mysql mysql.c -I/usr/include/mysql/ -lmysqlclient
先看一下关键函数

  • MYSQL mysql:定义一个MYSQL类型的结构体变量,并通过调用mysql_init()函数对其进行初始化,调用mysql_error()函数来获取有关错误信息
  • mysql_real_connect():用于连接到MySQL服务器,返回0,不成功。它需要以下参数:
    1、MYSQL类型的结构体指针,该结构体已由mysql_init()初始化。
    2、MySQL服务器所在主机名或IP地址。
    3、登录MySQL服务器时使用的用户名。
    4、登录MySQL服务器时使用的密码。
    5、要连接的数据库名称。
    6、端口号(默认为3306)。
    7、规定 socket 8、规定不同的连接选项
  • mysql_real_query():用于向MySQL服务器发送SQL查询或更新语句,返回非0,表示不成功。它需要以下参数:
    1、MYSQL类型的结构体指针,该结构体已由mysql_init()初始化。
    2、要执行的SQL查询或更新语句。
    3、SQL查询或更新语句的长度(如果为0,则将自动计算)。
  • MYSQL_RES *res=mysql_store_result(&mysql):用于从上一次查询中检索所有结果集。当您使用SELECT语句从数据库检索数据时,结果将返回到客户端,并存储在MYSQL_RES结构中。使用mysql_store_result():函数将整个结果集存储在内存中,并返回一个指向此结果集的MYSQL_RES*指针。这使得我们可以轻松地遍历和操作结果集。
  • int rows=mysql_num_rows(res)用于获取查询结果集中行的数量。
  • mysql_fetch_row():用于从查询结果集中获取下一行数据。
  • int rows=mysql_num_rows(res):用于获取查询结果集中行的数量
  • mysql_fetch_row():用于从查询结果集中获取下一行数据
#include<stdio.h>
#include<string.h>
#include <mysql.h>#define MING_DB_IP           "192.168.42.128"
#define MING_DB_PORT         3306
#define MING_DB_USENAME      "admin"
#define MING_DB_PASSWORD     "123456"
#define MING_DB_DEFAULTDB    "MING_DB"#define SQL_INSERT_TRL_USER     "insert TBL_USER(U_NAME,U_GENDER) values('zxm','women');"
#define SQL_SELECT_TBL_USER     "select * from TBL_USER;"
#define SQL_DELETE_TBL_USER     "CALL PROC_DELETE_USER('zxm')"
//查询
int ming_mysql_select(MYSQL *handle){//发送sql语句-->selectif(mysql_real_query(handle,SQL_SELECT_TBL_USER,strlen(SQL_SELECT_TBL_USER))){//不等于0,不成功printf("mysql_real_query:%s\n",mysql_error(handle));return -1;}//存储结果//mysql_store_result()用于从上一次查询中检索所有结果集MYSQL_RES *res=mysql_store_result(handle);if (res==NULL){printf("mysql_store_result:%s\n",mysql_error(handle));return -2;}//判断结果行数和列数//mysql_num_rows()用于获取查询结果集中行的数量int rows=mysql_num_rows(res);printf("rows:%d\n",rows);int fields=mysql_num_fields(res);printf("fields:%d\n",fields);//抓取数据MYSQL_ROW row;//mysql_fetch_row()用于从查询结果集中获取下一行数据while ((row=mysql_fetch_row(res))){int i=0;for (i=0;i<fields;i++){printf("%s\t",row[i]);}printf("\n");}mysql_free_result(res);return 0;
}int main(){//定义一个MYSQL类型的结构体变量,并通过调用mysql_init()函数对其进行初始化//调用mysql_error()函数来获取有关错误信息MYSQL mysql;if (mysql_init(&mysql)==NULL){printf("mysql_init:%s\n",mysql_error(&mysql));return -1;}//mysql_real_connect()用于连接到MySQL服务器.它需要以下参数:/*1、MYSQL类型的结构体指针,该结构体已由mysql_init()初始化。2、MySQL服务器所在主机名或IP地址。3、登录MySQL服务器时使用的用户名。4、登录MySQL服务器时使用的密码。5、要连接的数据库名称。6、端口号(默认为3306)。7、规定 socket    8、规定不同的连接选项*/if(!mysql_real_connect(&mysql,MING_DB_IP,MING_DB_USENAME,MING_DB_PASSWORD,MING_DB_DEFAULTDB,MING_DB_PORT,NULL,0)){    //等于0,不成功printf("mysql_real_connect:%s\n",mysql_error(&mysql));return -2;}printf("case:mysql insert \n");
#if 1/*mysql_real_query()用于向MySQL服务器发送SQL查询或更新语句。它需要以下参数:1、MYSQL类型的结构体指针,该结构体已由mysql_init()初始化。2、要执行的SQL查询或更新语句。3、SQL查询或更新语句的长度(如果为0,则将自动计算)。*/if(mysql_real_query(&mysql,SQL_INSERT_TRL_USER,strlen(SQL_INSERT_TRL_USER))){//不等于0,不成功printf("mysql_real_query:%s\n",mysql_error(&mysql));return -3;}#endif//输出表的结果ming_mysql_select(&mysql);printf("case:mysql delete \n");
#if 1/*mysql_real_query()用于向MySQL服务器发送SQL查询或更新语句。它需要以下参数:1、MYSQL类型的结构体指针,该结构体已由mysql_init()初始化。2、要执行的SQL查询或更新语句。3、SQL查询或更新语句的长度(如果为0,则将自动计算)。*/if(mysql_real_query(&mysql,SQL_DELETE_TBL_USER,strlen(SQL_DELETE_TBL_USER))){//不等于0,不成功printf("mysql_real_query:%s\n",mysql_error(&mysql));return -3;}#endif//输出表的结果ming_mysql_select(&mysql);//关闭mysql_close(&mysql);return 0;}

http://www.ppmy.cn/news/127779.html

相关文章

go语言命令行工具cobra

go语言命令行工具cobra 1、Cobra 介绍 Cobra 是关于 golang 的一个命令行解析库&#xff0c;用它能够快速创建功能强大的 cli 应用程序和命令行工具。 cobra既是一个用于创建强大现代CLI应用程序的库&#xff0c;也是一个生成应用程序和命令文件的程序。cobra被用在很多 go…

笔记本键盘鼠标怎么和台式机共享

网页下载软件&#xff0c;按照步骤走&#xff0c;完美解决问题&#xff0c;两台机器互通有无。但是必须在有网络的情况下 https://www.microsoft.com/en-us/download/details.aspx?id35460 两台Windows电脑之间的键鼠共享&#xff1a;使用微软的软件Mouse without Borders即…

RK987三模机械键盘win和alt键互换

fn加s 切换window fn加a 切换mac fn加win 是锁住/解锁 win键

Unity 鼠键操作

using System.Collections; using System.Collections.Generic; using UnityEngine;public class KeyTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//鼠标的点击//按下鼠标 0左键 1…

2台电脑共享一套键盘鼠标

###分享一款共享鼠标和键盘的软件&#xff0c;即两台电脑使用同一个鼠标和键盘&#xff01;Synergy是一款跨平台的键盘鼠标共享软件&#xff0c;日前我们提供了Synergy 和Synergy 64位的Win版本、Synergy Mac版&#xff0c;Synergy 能够让使用者仅用一套键盘鼠标&#xff0c;就…

鼠标垫怎么洗,如何清洗电脑鼠标垫

如何清洗鼠标垫呢&#xff1f;现在谁家里都有电脑了&#xff0c;工作的时候&#xff0c;大家也几乎天天都接触电脑&#xff0c;电脑的使用有一个非常不起眼的配件&#xff0c;但是却是不可缺少的&#xff0c;也是我们每天都要接触到的&#xff0c;那就是鼠标垫了。今天主要跟大…

一套键盘鼠标跨电脑切换使用

身为一名涉猎领域广泛的码农&#xff0c;工作间中往往会出现同时使用超过一台电脑的场景&#xff0c;笔记本台式机基本是常态&#xff0c;甚至会出现WinMAC或者WinLINUX这样的跨平台同时操作需求。那么最令人烦恼的莫过于切换使用电脑时需要来回切换键鼠&#xff0c;如果可以用…

Python操控键盘鼠标

Python操控键盘鼠标 操控键盘操控鼠标 操控键盘 import pyautogui #typewrite()无法输入中文内容&#xff0c;中英文混合的只能输入英文 #interval设置文本输入速度&#xff0c;默认值为0 pyautogui.typewrite(你好&#xff0c;world!,interval0.5)操控鼠标 import pyautogui…