关键词:MySQL、C++
MySQL 是 关系型 数据库。
如:
id | name | sex | age |
---|---|---|---|
1 | 小明 | 男 | 18 |
2 | 小红 | 女 | 17 |
3 | 小张 | 男 | 19 |
4 | 小李 | 女 | 16 |
此处为免安装版 MySQL-8.0.36,下载地址 - ZIP文件
解压到目录:E:\MySQL-8.0.36
。
接着在文件夹中创建配置文件 my.ini
,内容如下:
1 | [client] |
然后配置环境变量:
MYSQL_HOME
,变量值为 E:\MySQL-8.0.36
。PATH
中添加 E:\MySQL-8.0.36\bin
。最后启动命令提示符(cmd),执行命令:
1 | mysqld.exe --install MySQL --defaults-file="E:\MySQL-8.0.36\my.ini" |
提示 Service successfully installed.
表示成功。
MySQL 服务的启动:net start MySQL
MySQL 服务的停止:net stop MySQL
MySQL 服务的卸载:sc delete MySQL
MySQL 通过执行 SQL 脚本来完成对数据库的操作。
.sql
文件。标识符:
关键字:
语句:
函数:
三大数据类型:数字、日期/时间、字符串。
数字:
tinyint
:1个字节,带符号范围 ;smallint
:2个字节,带符号范围 ;mediumint
:3个字节,带符号范围 ;int
:4个字节,带符号范围 ;bigint
:8个字节,带符号范围 ;float(m,d)
:单精度浮点型,8位精度(4字节),总精度 ,小数位 ,以实际为准。double
:双精度浮点型,16位精度(8字节),总精度 ,小数位 ,以实际为准。real
decimal(m,d)
:定点数,存放精确的值。如果 则大小为 字节,否则为 字节。日期和时间:
date
:格式为 YYYY-MM-DD
,大小3字节,范围1000-01-01/9999-12-31
。time
:格式为 HH:MM:SS
,大小3字节,范围-838:59:59/838:59:59
。year
:格式为 YYYY
,大小1字节,范围1901/2155
。datetime
:格式为 YYYY-MM-DD HH:MM:SS
,大小8字节,范围1000-01-01 00:00:00/9999-12-31 23:59:59
。timestamp
:格式为 YYYY-MM-DD HH:MM:SS
,大小4字节,范围1970-01-01 00:00:00/2038-01-19 03:14:07
(结束时间为距离1970-01-01 00:00:00 的第 秒,看时区)。
字符串类型:
char(n)
:定长字符串,0~255字节。varchar(n)
:变长字符串,0~65535字符。char(n)
与 varchar(n)
:两者的 都表示字符个数,而不是字节个数。前者若存入字符数小于 ,则用空格补在后面,查询时去掉空格;而后者没这个规定。tinytext
:短文本字符串,0~255字节。text
:长文本数据,0~65535字节。mediumtext
:中等长度文本数据,0~16777215字节。longtext
:极大文本数据,0~4294967295字节。varchar
与 text
:
n
,后者不能指定;tinyblob
:二进制字符串,0~255字节。blob
:二进制长文本,0~65535字节。mediumblob
:二进制中等长度文本,0~16777215字节。longblob
:二进制极大文本,0~4294967295字节。_blob
与 _text
:
数据类型的属性:
NULL
:数据列可包含 NULL
值。NOT NULL
:数据列不允许包含 NULL
值。DEFAULT
:数据列的默认值。PRIMARY KEY
:主键。AUTO_INCREMENT
:自动递增。UNSIGNED
:无符号。CHARACTER SET name
:指定字符集。先启动 MySQL 服务(管理员权限cmd):
1 | net start mysql |
然后使用自带的客户端工具登录,cmd输入:
1 | mysql -h 主机名 -u 用户名 -p |
-h
:表示登录到的主机名,当前机器可省略。-u
:表示登录的用户名。-p
:表示登录时需要输入密码,密码为空可忽略。我的第一次安装出现了坑:“如何解决本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止”
可能是因为之前不懂事弄着玩过,然后出了一堆错误。
解决办法:CSDN - 如何解决本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止
创建命令如下:
1 | create database 数据库名 [options]; |
show databases;
可查看创建了的数据库。选择操作的数据库(必须先选择数据库,才能进行数据库的操作)。
1 | mysql -D 数据库名 -h 主机名 -u 用户名 -p |
use 数据库名;
语句选择数据库。比如创建一张表,存放学号、姓名、性别、年龄、电话号码。
使用命令:
1 | create table 表名称; |
有时候表信息比较多,使用 .sql
脚本事先记录,然后执行 .sql
文件。
1 | create tables students |
通过命令提示符下的文件重定向执行执行该脚本。打开命令提示符, 输入:
1 | mysql -D samp_db -u root -p < createtable.sql |
show tables;
可以查看已创建的表。describe 表名;
可以查看已创建表的详细信息。使用 insert
语句:
1 | insert [into] 表名 [(列名1,列名2,列名3,...)] values (值1,值2,值3,...); |
如:
1 | insert into students values (NULL,'ZhangSan','M',18,'13800000000'); |
也可以不按列的顺序:
1 | insert into students (name,sex,age) values ('LiSi','F',19); |
使用 select
语句:
1 | select 列名称 from 表名称 [查询条件]; |
如查询表中所有学生的名字和年龄:
1 | select name, age from students; |
通配符 *
:表示所有内容。
1 | select * from students; |
如果具有查询条件,使用 where
关键字:
1 | select 列名称 from 表名称 where 条件; |
如查找女性:
1 | select * from students where sex = 'F'; |
where
支持 =
、!=
、<
、<=
、>
、>=
、in
、not in
、is [not] null
、like
等运算符,支持与 or
、and
的组合。
如:
1 | select * from students where name like "%Wang%"; |
id
小于5且年龄大于20的所有人信息:1 | select * from students where id<5 and age>20; |
使用 update
语句:
1 | update 表名称 set 列名称=新值 where 更新条件; |
如:
id
为5的手机号改为默认的"-":1 | update students set tel=default where id=5; |
1 | update students set age=age+1; |
使用 delete
语句:
1 | delete from 表名称 where 删除条件; |
如:
1 | delete from students where age<20; |
1 | delete from students; |
使用 alter table
语句:
1 | alter table 表名 add 列名 列数据类型 [after 插入位置]; |
如:
address
:alter table students add address char(20);
age
列后插入 birthday
:alter table students add birthday date after age;
1 | alter table 表名 change 列名 新列名 新列数据类型; |
如:
age
的数据类型:alter table students change age age tinyint unsigned null;
1 | alter table 表名 drop 列名; |
如:
birthday
:alter table students drop birthday;
1 | alter table 表名 rename 新表名; |
1 | drop table 表名; |
1 | drop database 数据库名; |
其中一种方法:
1 | mysqladmin -u root -p password 新密码 |
IDE:Visual Studio 2022
添加包含目录:VC++目录
中的 包含目录
添加上 MySQL 文件夹中的 include
目录。
添加库目录:VC++目录
中的 库目录
添加上 MySQL 文件夹中的 lib
目录。
添加附加依赖项:链接器
中的 输入
→ 附加依赖项
添加上 libmysql.lib
。
复制动态库:将 lib
文件夹下的 libmysql.dll
复制到工程文件夹下。
头文件:mysql.h
1 | // 连接数据库: |
用类实现一个基础连接数据库,可以执行数据库语句、输出查询结果等功能。
1 | // DataBase.h |
1 | //DataBase.cpp |
完整代码见仓库:Gitee - MySQL - C++
更多可参考:https://blog.csdn.net/cpp_learner/article/details/116171955
Qt6.6.1_msvc2019_64
VS 中勾选上 SQL 模块:
QtSQL 是 Qt 提供的一个访问数据库的接口。但需要数据库驱动才能使用不同类型的数据库。
驱动名称 | 对应数据库 |
---|---|
QDB2 |
IBM DB2 |
QIBASE |
Borland Interbase |
QMYSQL |
MySQL |
QOCI |
Oracle Call Interface Driver |
QODBC |
ODBC(包括MS SQL Server) |
QPSQL |
PostgreSQL |
QSQLITE |
SQLite v3 |
QSQLITE2 |
SQLite v2 |
很不幸,MySQL 需要额外下载驱动,可前往 Github - thecodemonkey86/qt_mysql_driver 下载对应版本的编译后的文件。
sqldrives
文件夹中的文件复制到 Qt 目录下的 sqldrives
文件夹中。如此处我是: ..\Qt\6.6.1\msvc2019_64\plugins\sqldrivers
通过 QSqlDatabase
类,可以操作数据库。
连接数据库的代码:
1 | // QtSql 连接数据库 |
其中函数:
1 | QSqlDatabase addDatabase( |
创建一个数据库连接,第一个参数指定数据库驱动,第二个参数指定连接名称,多线程访问数据库中每个线程都需要使用不同的连接名称。
通过 QSqlQuery
类,可以访问数据库。
1 | // 创建查询对象 |
可以通过 QSqlQuery::prepare()
和 QSqlQuery::bindValue()
函数进行数据库语句的构造。
如:
1 | void updateUser(QSqlDatabase db,const int &id,const QString &username) { |
完整代码见仓库:Gitee - MySQL - C++
分支:
Reference:
21分钟 MySQL 入门教程 - https://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html
C/C++ vs2017连接MySQL数据库 - 增删改查(详细步骤) - https://blog.csdn.net/qq_45698148/article/details/117136407
MySQL 教程 - RUNOOB:https://www.runoob.com/mysql/mysql-tutorial.html
Qt零基础系列10:使用Qt如何操作数据库:https://zhuanlan.zhihu.com/p/348174965