常用数据库之mysql的搭建与使用

news2024/11/19 6:17:39

1. 简介

  mysql为关系型数据库,是由瑞典的MySQLAB公司开发的,但是几经辗转,现在是Oracle产品。它是以“客户/服务器”模式实现的,是一个多用户、多线程的小型数据库服务器。而且MySQL是开源数据的,任何人都可以获得该数据库的源代码并修正MySQL的缺陷。

2. 优缺点

优点:

1>功能全面,综合化,追求最大并发效率
2>MySQL 支持大部分关系型数据库应该有的 SQL 功能(有些直接支持,有些间接支持)

缺点:

1>不支持热备份
2>安全系统,复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变
3>没有一种存储过程语言,这是对习惯于企业级数据库的程序员的最大限制。
4>MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费 、Unix或Linux 第三方安装收费。

3. 服务器安装

1)下载安装包:

链接地址:https://dev.mysql.com/downloads/windows/installer/8.0.html

在这里插入图片描述

2)双击下载后的安装包进行安装:

在这里插入图片描述
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/0583fe61c72d4b58a14889725dc9c14e.png)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(注意navicat不支持使用SHA256加密方式,所以客户端采用navicat时,此项选择传统授权方式)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)环境变量设置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)验证是否安装成功:

查询版本号命令:mysql --version

在这里插入图片描述

登录mysql命令:musql -uroot -p123456

在这里插入图片描述

5)设置远程连接:

win+R cmd

#登录
mysql -uroot -ppassword
#选择数据库
use mysql;
#设置远程连接
update user set Host=‘%’ where User=‘root’;
#刷新权限
flush privileges

6)用navicat进行连接,并创建数据库-test:

在这里插入图片描述

4. 错误处理

1)Navicat 连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password’

错误原因:

MySQL新版本(8以上版本)的用户登录账户加密方式是【caching_sha2_password】,Navicat不支持这种用户登录账户加密方式。

解决办法:

#登录
mysql -uroot -ppassword
#选择数据库
use mysql;
#注意:如果是远程连接,请将’localhost’换成’%’
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的数据库密码’;
#刷新权限
FLUSH PRIVILEGES;

2)Driver not loaded错误:

错误原因:

Qt在操作mySql时,会尝试加载对应的插件(即:qsqlmysql.dll 和 qsqlmysqld.dll),但由于这些插件依赖于Mysql的库 (即libmysql.dll),所以当找不到插件或者对应的Mysql库时,就会加载失败。

解决办法:

拷贝mySql安装目录下的libmysql.dll到qt可执行文件目录下,或者拷贝到qt安装目录bin下

5. 使用场景

假设是要满足多用户同一时候访问,或者是站点访问量比较大时使用MYSQL比较合适。

6. 在qt上的简单使用

pro工程文件:QT += sql

main.cpp:

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    /*************************
    * mysql-查看数据库驱动
    **************************/
    qDebug() << QSqlDatabase::drivers();

    /*************************
    * mysql-数据库连接
    **************************/
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  //直接通过MySQL的驱动加载数据库
    db.setHostName("192.168.8.121");                        //数据库服务器IP
    db.setPort(3306);                                       //端口
    db.setDatabaseName("test");                             //数据库名
    db.setUserName("root");                                 //用户名
    db.setPassword("123456");                               //密码
    bool bConnect = db.open();
    if (!bConnect)
    {
        qDebug()<< "Connect mysql server error:" << db.lastError();
        return -1;
    }
    else
        qDebug()<< "Connect mysql server success";

    QSqlQuery query;
    //创建表
    bool bCreateTab = query.exec("create table persion(id int primary key auto_increment, "
                    "name varchar(255), sex int, age int, job varchar(255), country varchar(255))ENGINE=INNODB;");
    if (!bCreateTab)
    {
        qDebug()<< "create table error";
    }
    else
    {
        qDebug()<< "create table success";
    }
   
    /*************************
    * mysql-单行插入数据
    **************************/
    bool bOk = query.exec("insert into persion(id, name, sex, age, job, country) values(1, 'Jack', 1, 18, 'Programmer', 'China')");
    if (!bOk)
    {
        qDebug()<< "insert into error";
    }

    /*************************
    * mysql-多行插入数据
    **************************/
    query.prepare("insert into persion(name, sex, age, job, country) values(?,?,?,?,?)");   //?是占位符
    QVariantList name;
    QVariantList sex;
    QVariantList age;
    QVariantList job;
    QVariantList country;

    name << "Mary" << "Mike" << "Bruse";
    age << 19 << 20 << 21;
    sex << 0 << 1 << 1;
    job << "Sale" << "Programmer" << "Programmer";
    country << "America" << "England" << "France";

    //按顺序给字段绑定相应的值
    query.addBindValue(name);
    query.addBindValue(sex);
    query.addBindValue(age);
    query.addBindValue(job);
    query.addBindValue(country);

    //执行预处理命令
    bOk = query.execBatch();
    if (!bOk)
    {
        qDebug()<< "execBatch error";
    }

    /*************************
    * mysql-修改数据
    **************************/
    bOk = query.exec("update persion set age=22 where name='Mike'");
    if (!bOk)
    {
        qDebug()<< "update error";
    }

    /*************************
    * mysql-查询数据
    **************************/
    query.exec(QString("select id from persion where name='Jack'"));
    if (!bOk)
    {
        qDebug()<< "select *from error";
    }
    else
    {
        if(query.next())
        {
            qDebug() << query.value("Country");
            qDebug() << "job:" << query.value(3);
        }
    }

    /*************************
    * mysql-遍历数据
    **************************/
    bOk = query.exec("select *from persion");
    if (!bOk)
    {
        qDebug()<< "select *from error";
    }
    else
    {
        while(query.next())//遍历完为false
        {
            //方式1:以下标
            qDebug()<< "Search way1:"
                    << query.value(0).toInt() << query.value(1).toString()
                    << query.value(2).toInt() << query.value(3).toInt()
                    << query.value(4).toString() << query.value(5).toString();

            //方式2:以字段
            qDebug()<< "Search way2:"
                    << query.value("id").toInt() << query.value("name").toString()
                    << query.value("sex").toInt() << query.value("age").toInt()
                    << query.value("job").toString() << query.value("country").toString();
        }
    }


    /*************************
    * mysql-删除某一行数据
    **************************/
    /*
    bOk = query.exec("delete from persion where name='mary'");
    if (!bOk)
    {
        qDebug()<< "delete error";
    }
    */

    /*************************
    * mysql-清空表数据
    **************************/
    /*
    bOk = query.exec("truncate table student");
    if (!bOk)
    {
        qDebug()<< "truncate table error";
    }
    */

    /*************************
    * mysql-删除表
    **************************/
    /*
    bOk = query.exec("drop table student");
    if (!bOk)
    {
        qDebug()<< "drop table error";
    }
    */


    /*************************
    * mysql-关闭数据库
    **************************/
    db.close();

    return a.exec();
}

7. 执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 模型视图编程之自定义只读数据模型

背景 Qt 中的模型视图架构是用来实现大量数据的存储、处理及其显示的&#xff0c;主要原理是将数据的存储与显示分离&#xff1a;模型定义了标准接口对数据进行访问&#xff1b;视图通过标准接口获取数据并定义显示方式&#xff1b;模型使用信号与槽机制通知视图数据变化。 Q…

基于Java Web技术的动车购票系统

毕 业 设 计 中文题目基于Java Web技术的动车购票系统英文题目Train ticket system based on Web JavaTechnology毕业设计诚信声明书 本人郑重声明&#xff1a;在毕业设计工作中严格遵守学校有关规定&#xff0c;恪守学术规范&#xff1b;我所提交的毕业设计是本人在 指导教师…

零入门容器云网络-7:基于golang编程实现给ns网络命名空间添加额外的网卡

已发表的技术专栏&#xff08;订阅即可观看所有专栏&#xff09; 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

“美亚杯”第三届中国电子数据取证大赛答案解析(个人赛)

试题 1 Gary的笔记本电脑已成功取证并制作成镜像 (Forensic Image)&#xff0c;下列哪个是其MD5哈希值。 A. 0CFB3A0BB016165F1BDEB87EE9F710C9 B. 5F1BDEB87EE9F710C90CFB3A0BB01616 C. A0BB016160CFB3A0BB0161661670CFB3 D. 16160CFB3A0BB016166A0BB0161661…

独立产品灵感周刊 DecoHack #041 - 那些独立开发者是怎么养活自己的

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。 &#x1f4bb; 产品推荐 1. SOCCER STREAM…

分布式的设计思想

一、分布式设计基础 传统架构问题 ① 单机资源不足 存储&#xff1a;3台机器&#xff0c;每台机器都有2T的硬盘空间&#xff0c;但是现在有1个3T的文件要存储计算&#xff1a;3台机器&#xff0c;每台机器都有8核CPU和8GB内存&#xff0c;但是现在有1个程序需要12核CPU和24G…

启明智显分享| Sigmastar SSD212 SPI+RGB点屏示例(2.1寸 480*480圆屏,可应用于旋钮)

SSD20X 点SPIRGB屏和SSD212 类似&#xff0c;区别在于对应文件名不同、SSD20X没有config.ini文件。 SSD20X SPI初始化文件&#xff1a;vi boot/common/cmd_customer_init.c SSD20X由于没有config.ini 可以用jpeg2disp 中.h 屏参头文件的方式实现显示logo。 这里以SSD212 点屏为…

Java——AVL树

平衡二叉树 在之前的blog中讲到&#xff0c;平衡二叉树是一棵树&#xff0c;任意一个节点的左树的所有节点都小于这个节点&#xff0c;右树的所有节点都大于这个节点 因此&#xff0c;可以利用这个性质来中序遍历&#xff0c;就可以得到一个有序的序列&#xff0c;而如果我们要…

谷歌地图商家抓取工具 G-Business Extractor 7.5

G 业务提取器 | 谷歌地图抓取工具 G-Business Extractor是一款功能强大的工具&#xff0c;可帮助您从 Google 地图中寻找商机。它是最好的Google Maps Scraper工具&#xff0c;能够从最重要的企业目录中提取数据。 Google 地图是一个来源&#xff0c;您可以在其中找到按类别和位…

“美亚杯”第三届中国电子数据取证大赛答案解析(团体赛)

Questions Gary被逮捕后,其计算机被没收并送至计算机取证实验室。经调查后&#xff0c;执法机关再逮捕一名疑犯Eric&#xff0c;并检取其家中计算机(window 8), 并而根据其家中计算机纪录, 执法机关再于其他地方取得一台与案有关的服务器,而该服务器内含四个硬盘。该服务器是运…

跨端开发浪潮中的变与不变

自 90 年代初开启 PC 时代以来&#xff0c;随着移动网络的快速普及&#xff0c;在 2010 年左右&#xff0c;进入移动时代、IOT 时代&#xff0c;各种移动互联设备不断涌现&#xff0c;除了最常见的 PC、Pad、智能手机外&#xff0c;它还可能是小小的一块智能手表&#xff0c;也…

NKOJ P9492 【USACO】视频共享

题目分析 这道题其实最容易想到的方法是离线枚举&#xff0c;但是其时间复杂度为,很明显会超时&#xff08;这题数据连离线化都救不了&#xff09; 那该如何办&#xff1f; 并查集&#xff1b;因为他说有一个推荐列表&#xff0c;而这个推荐列表中i号视频推荐了j号视频&#…

SpringSecurity+OAuth2.0+JWT实现单点登录应用

SpringSecurityOAuth2.0JWT实现单点登录应用 gitee项目练习地址&#xff1a;https://gitee.com/xzq25_com/springsecurity.oauth2 OAuth2.0单点登录实践一、搭建OAuth授权服务器&#xff0c;采用授权码模式JWT令牌二、创建服务client&#xff1a;SSOA、SSOB 并进行测试一、搭建…

【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

一、总体架构设计原则 企业级大数据应用框架需要满足业务的需求&#xff0c;一是要求能够满足基于数据容量大&#xff0c;数据类型多&#xff0c;数据流通快的大数据基本处理需求&#xff0c;能够支持大数据的采集&#xff0c;存储&#xff0c;处理和分析&#xff0c;二是要能…

openGauss数据库的使用

目录前言1. 启动/停止/重启数据库&#xff08;1&#xff09;极简版启动/停止/重启命令&#xff08;2&#xff09;企业版启动/停止/重启命令2. 登录数据库&#xff08;1&#xff09;登录数据库时的基本连接参数&#xff08;2&#xff09;登录数据库时的常用连接参数&#xff08;…

如何使用轻量应用服务器搭建高颜值的YesPlayMusic网易云播放器

本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器。 ​ 项目简介 本文使用的是YesPlayMusic项目&#xff0c;这是一款高颜值的第三方网易云播放器&#xff0c;它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没…

react-dnd 拖拽能力教程

前言 近几年来&#xff0c;低代码、零代码的热度在国内逐年递增。“复杂度同力一样不会消失&#xff0c;也不会凭空产生&#xff0c;它总是从一个物体转移到另一个物体或一种形式转为另一种形式”。用户在使用低零代码构建应用程序时&#xff0c;这些能力只是被平台研发人员提…

SQL SERVER 2019卸载和安装

卸载过程删除SQL Server2019包括sql server这个数据库和它的管理工具SQLServer Management Studio以及他们的注册表信息和安装的目录&#xff0c;以上&#xff0c;最重要的是一定要有耐心&#xff0c;一步一步慢慢来。 首先打开一定要把SQL的服务都关掉&#xff0c;这个很重要…

压缩包文件如何设置加密、删除加密?

压缩包是将文件压缩成RAR、ZIP格式文件&#xff0c;将文件压缩成压缩包之后&#xff0c;就更方便转发以及保存&#xff0c;而且压缩包文件可以进行加密&#xff0c;这样也能够起到对文件的保护作用&#xff0c;今天和大家分享如何对压缩包进行加密以及如何删除压缩包密码。 压…

战略,就没一本好书

战略这个词被工商业界引爆&#xff0c;都是1965年的事。想来到现在已经快60年了。但是实话说&#xff0c;战略这么重要的事&#xff0c;其实没几本好书&#xff0c;也就是说&#xff0c;这个领域&#xff0c;实在没什么有效的研究成果。&#xff08;1&#xff09;起点1965年是个…