MySQL数据库

目录

关系型与非关系型数据库

MySQL数据库

使用范围

MySQL演变

MySQL安装

Windows下安装

Linux(Ubuntu)下安装

MySQL开发配置(Windows VS2019下)

MySQL数据库连接


关系型与非关系型数据库

关系型数据库是一种基于关系模型的数据库管理系统(DBMS)。在关系型数据库中,数据被组织成表(Table),每个表由行(Row)和列(Column)组成。行表示具体的数据记录,列表示数据的属性或字段。

关系型数据库的特点包括:

  1. 结构化数据:关系型数据库中的数据以结构化的方式存储,每个表都有固定的列和数据类型,使得数据具有一定的规范性和一致性。

  2. 数据之间的关系:不同的表可以通过主键和外键建立关系,以实现数据之间的关联和引用。这种关系可以用于查询和处理数据,实现数据的一致性和完整性。

  3. SQL语言支持:关系型数据库使用结构化查询语言(SQL)进行数据管理和操作。SQL是一种标准化的语言,可以用于创建、查询、更新和删除数据库中的数据。

  4. ACID事务:关系型数据库支持ACID(原子性、一致性、隔离性和持久性)事务,确保数据的完整性和一致性。

  5. 数据库管理系统:关系型数据库通常由一个数据库管理系统(DBMS)来管理和操作。常见的关系型数据库管理系统包括Oracle、MySQL、Microsoft SQL Server、PostgreSQL等。

关系型数据库在许多应用领域具有广泛的应用,特别是对于需要高度结构化、规范化和数据一致性的应用场景,如企业级应用、电子商务、金融系统等。然而,随着非关系型数据库(NoSQL)的兴起,针对大数据、高并发和分布式环境等特殊需求,开发人员也可以选择其他类型的数据库来满足不同的业务需求。

非关系型数据库(NoSQL)是一类与传统关系型数据库不同的数据库管理系统(DBMS)。它们不使用传统的表格结构和SQL语言,而是使用其他数据模型和查询语言,以满足不同类型的数据存储和处理需求。

非关系型数据库的特点包括:

  1. 数据模型多样性:非关系型数据库支持多种数据模型,如键值对(Key-Value)、文档型(Document)、列族型(Column Family)和图形(Graph),每种模型都适用于不同的数据存储和查询需求。

  2. 高可扩展性:非关系型数据库通常具有良好的可扩展性,可以在分布式环境中进行水平扩展,以适应大规模数据和高并发访问。

  3. 灵活的数据结构:与关系型数据库的固定列结构不同,非关系型数据库允许存储不同结构或半结构化的数据,无需事先定义表结构。

  4. 高性能和低延迟:非关系型数据库通常采用高性能的存储引擎和并行计算方式,以实现快速的数据存取和查询。

  5. 弱一致性:非关系型数据库中的数据一致性要求相对较低,通常采用最终一致性(Eventual Consistency)的策略,以提高系统的可用性和性能。

常见的非关系型数据库包括MongoDB、Cassandra、Redis、Elasticsearch和Neo4j等。它们在不同的应用场景下具有广泛的应用,如大数据分析、实时数据处理、内容管理、社交网络和推荐系统等。

MySQL数据库

MySQL是一种开源的关系型数据库管理系统(RDBMS),广泛用于各种应用程序和网站开发中。MySQL具有以下特点和功能:

  1. 可靠性和稳定性:MySQL经过广泛的测试和使用,被认为是一种可靠且稳定的数据库系统。它具有良好的数据持久性,支持事务处理和ACID属性,确保数据的一致性和可靠性。

  2. 跨平台支持:MySQL可以运行在多个操作系统上,包括Windows、Linux、macOS等,具有良好的跨平台性能。

  3. 高性能:MySQL被设计为高性能的数据库系统,具有高效的查询处理和数据访问能力。它支持索引、查询优化和缓存等机制,以提高查询速度和响应时间。

  4. 容易使用:MySQL提供了简单易用的命令行界面和图形化界面工具,使得数据库的管理和操作变得简单和方便。它支持标准的SQL语言,具有良好的兼容性。

  5. 扩展性:MySQL支持水平和垂直的扩展,可以通过集群、分片和复制等方式来处理大规模数据和高并发访问。

  6. 安全性:MySQL提供了多种安全机制,包括用户认证、权限管理、数据加密和网络安全等,以保护数据库的安全性和隐私。

  7. 社区支持:MySQL是一个开源的数据库系统,拥有庞大的开发者社区。这意味着用户可以获得广泛的文档、教程和支持,以解决问题和优化数据库性能。

MySQL被广泛应用于Web应用程序、企业级应用、电子商务、社交媒体等各种场景。它是一种成熟且可靠的数据库解决方案,具有良好的性能、易用性和扩展性。

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

MySQL数据库_第1张图片

使用范围

小型、中型、大型网站

MySQL数据库_第2张图片

C/S架构的系统

MySQL数据库_第3张图片

分布式系统软件

MySQL数据库_第4张图片

 集群系统软件

MySQL数据库_第5张图片

大规模集群软件系统

MySQL数据库_第6张图片

MySQL演变

简单应用

MySQL数据库_第7张图片

数据量比较小;数据索引比较少、也比较小;访问强度比较低

垂直拆分

MySQL数据库_第8张图片

有一定的读写并发量;数据量达到一定规模;数据索引达到一定复杂程度

主从结构

MySQL数据库_第9张图片

极高的读取压力;一定程度的写入压力

水平拆分

MySQL数据库_第10张图片

极高的读取写入能力;数据容量极大

云计算

MySQL数据库_第11张图片

无限的读取写入能力;无限的容量

MySQL安装

Windows下安装

首先下载安装器:MySQL :: Download MySQL Installer

MySQL数据库_第12张图片

推荐大家下载离线版本,虽然下载的时候慢,但是安装的时候不容易卡死或者失败

点击Download之后,看到下面的页面

MySQL数据库_第13张图片

选择图中的链接点击,直接下载,可以不用注册或者登录

这里我们下载的是社区版。和商业版虽然有差距,但是差距不大,初学者基本可以忽略。

下载完成后可以看到 .msi文件,双击进行安装

MySQL数据库_第14张图片

MySQL数据库_第15张图片

MySQL数据库_第16张图片

MySQL数据库_第17张图片

点击执行(Execute)按钮

MySQL数据库_第18张图片

安装后进入下一步

MySQL数据库_第19张图片

选择好各个项目之后,就会开始进行安装

服务器配置的时候如下:

MySQL数据库_第20张图片

点击Next后

我们选择开发模式,如下图

MySQL数据库_第21张图片

MySQL数据库_第22张图片

注意,这里要选择下面,否则编程的时候可能会出现不兼容的意外情况

新版的用户远程登录的时候,密码认证过程和老版不一样

所以最好兼容老版

账号密码记得设置,并保存

否则找回是不可能找回的,只能重置

MySQL数据库_第23张图片

Root密码不要太简单,可以复杂一点,养成好习惯

我这里设置的是FengPan12#$56

MySQL数据库_第24张图片

然后设置服务,并设置开机启动如上图

MySQL数据库_第25张图片

指定端口,并打开防火墙,如上图

MySQL数据库_第26张图片

MySQL数据库_第27张图片

MySQL数据库_第28张图片

MySQL数据库_第29张图片

右键点击“我的电脑”-“属性”-“高级”-“环境变量”-“系统变量”-双击“Path”-将mysql的路径“C:\Program Files\MySQL\MySQL Server 8.0\bin”添加进去-“确定”添加完毕之后,再到DOS下进行测试:

MySQL数据库_第30张图片

MySQL数据库_第31张图片

MySQL数据库_第32张图片

输入mysql -u root -p你的密码

MySQL数据库_第33张图片

Linux(Ubuntu)下安装

执行:sudo apt-get install mysql-server安装服务器(yum)

MySQL数据库_第34张图片

执行:sudo apt install mysql-client安装客户端(用于验证服务器是否安装成功)

MySQL数据库_第35张图片

执行:sudo apt install libmysqlclient-dev安装开发环境(用于后续开发编程用)

MySQL数据库_第36张图片

打开/etc/mysql/mysql.conf.d/mysqld.cnf

MySQL数据库_第37张图片

使用vim进行修改保存后

执行命令:

mysqld --initialize

执行service mysql restart命令,重启mysql

登录测试

首次安装后,root密码默认是空的

可以通过下面的命令来设置密码

mysqladmin -u root password “123456”

先测试本地的登录

MySQL数据库_第38张图片

看到上面的界面,则表示本地登录成功

MySQL开发配置(Windows VS2019下)

MySQL开发头文件和库文件,在安装目录下找到lib和include目录,如下图

MySQL数据库_第39张图片

记录下include和lib的绝对路径,如果是Linux环境,则一般在/usr/include/mysql

在lib下面有这样几个文件:mysqlclient.lib,libmysql.lib,libmysql.dll

这三个文件分成两组:mysqlclient.lib一组;libmysql.lib和libmysql.dll一组

mysqlclient.lib相当于静态库,而libmysql.lib和libmysql.dll相当于动态库引用

而Linux下:

则是引用/usr/lib/x86_64-linux-gnu/libmysqlclient.a,作为静态库引用

或者引用/usr/lib/x86_64-linux-gnu/libmysqlclient.so,作为动态库引用

创建一个控制台项目并且打开项目属性,并且上面提到的include文件夹复制到项目根目录,以及libmysql.lib和libmysql.dll 都放到根目录

MySQL数据库_第40张图片

设置头文件路径 

MySQL数据库_第41张图片

使用#pragma comment(lib,"libmysql.lib")来导入库

然后在代码中引入头文件 #include 

MySQL数据库_第42张图片

还需要把项目的架构修改为64,因为数据库是64位的

MySQL数据库_第43张图片

编译成功 

MySQL数据库_第44张图片

MySQL数据库连接

连接的过程:

  1. 创建MYSQL对象
  2. 初始化MYSQL对象
  3. 连接数据库
  4. 增删改查超作
  5. 关闭数据库操作

初始化函数

MYSQL* pDB = mysql_init(mysql);

数据库连接函数

MYSQL *STDCALL 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 clientflag);

参数说明:

  •  1. mysql:初始化过的MYSQL对象
  • 2. host:服务器地址[ip、localhost、域名]
  • 3. user:连接服务器所使用的用户
  • 4. passwd:用户对于的密码
  • 5. db:连接服务器时所使用的库,如果为空,则使用默认数据库mysql
  • 6. port:连接服务器所用的端口,默认是3306,具体依据数据库来定
  • 7. unix_socket:unix套接字连接方式,一般是指本地管道或者本地套接字,如果没有设为NULL
  • 8. clientflag:一般情况下为0,除非你知道你要干什么,否则不要使用下面的内容:

 CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS 客户端可以处理过期的密码

CLIENT_COMPRESS 在协议中进行数据压缩

CLIENT_FOUND_ROWS 返回匹配的结果,而非更改的结果

CLIENT_IGNORE_SIGPIPE 抑制管道信号的处理,防止与已有的管道信号处理冲突

CLIENT_IGNORE_SPACE 允许函数名称后面的空格

CLIENT_INTERACTIVE 使用interactive_timeout来设置超时时间,而不是通过wait_timeout函数来得知超时

CLIENT_LOCAL_FILES 允许加载本地数据处理

CLIENT_MULTI_STATEMENTS 告诉服务器客户端可能发送多个statements

CLIENT_NO_SCHEMA 不允许db_name.tbl_name.col_name这样的语法(用于兼容ODBC)

CLIENT_ODBC 没有用了(以前兼容odbc用的)

CLIENT_OPTIONAL_RESULTSET_METADATA 针对高频而短小的查询优化(但是可能导致其他问题)

CLIENT_SSL 使用加密协议。官方不建议使用,最好使用mysql_options() 或者mysql_ssl_set()来替换。

CLIENT_REMEMBER_OPTIONS 这个是为了方便connect失败后,重新连接的时候用的。如果有这个,options设置一次后,如果失败,可以直接使用connect,而不必再次调用options 

返回值:

  • 成功连接时,返回一个MYSQL结构的指针,该指针用于后续的数据库操作。
  • 连接失败时,返回NULL,并可以通过调用mysql_error()函数获取错误信息。

该函数用于建立与MySQL服务器的连接,并返回一个MYSQL结构的指针,该指针用于后续的数据库操作。在连接成功后,可以使用该指针执行各种数据库操作,如查询、插入、更新等。

需要注意的是,mysql_real_connect()函数是MySQL C API中的一个底层函数,通常需要与其他函数结合使用,如mysql_init()函数用于初始化MYSQL结构、mysql_close()函数用于关闭连接等。同时,还需要在连接成功后进行错误处理,并在不需要使用连接时及时释放资源。

#include 
#include 

#pragma comment(lib,"libmysql.lib")

int main()
{
	MYSQL* mysql = new MYSQL();
	//MYSQL mysql;//占用的是栈上的内存
	MYSQL* pDB = mysql_init(mysql);
	if (pDB == NULL) {
		std::cout << "mysql_init failed!" << std::endl;
		return -1;
	}
	pDB = mysql_real_connect(pDB, "localhost", "root", "", "mysql", 3306, NULL, 0);
	std::cout << pDB << std::endl;
	if (pDB) {
		std::string sql = "";
		int ret = mysql_real_query(pDB, sql.c_str(), sql.size());
		if (ret != 0) {
			std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
		}
		mysql_close(pDB);
	}

	delete mysql;
}

你可能感兴趣的:(MySQL,编程,数据库,mysql)