安装
1. mysql server 8.0
2. 初始化数据库:mysqld --initialize --console
3. mysql服务
1. 安装服务:mysqld install mysql8.0
2. 启动服务:net start mysql8.0
4. 登录:mysql -uroot -p
5. 重设密码:ALTER USER "root@localhost" IDENTIFIED BY "123456"
6. 数据库远程访问权限
1. use mysql;
2. SELECT * FROM user;
3. UPDATE USER SET host="%" where user="root";
4. flush privileges;
7. 图形客户端:workbench
操作流程
1. 数据库初始化
mysql_init(MYSQL*mysql);
2. 连接
MYSQL*mysql_real_connect(MYSWQL *mysql, const char *host, unsigned int port, const char *unix_socket, unsigned long client_flag)
失败返回NULL
3. 断开重连
bool reconnect = 0;
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect)
4. 关闭
mysql_close(MYSQL*mysql);
5. 执行函数
int mysql_query(MYSQL*mysql, const char *query);
mysql:连接句柄
query:sql语句
成功返回0
6. 查询
1. 执行mysql_query
2. 取回结果集
MYSQL_RES *mysql_store_result(MYSQL *mysql)
MYSQL_RES *结构体指针
3. 获取行
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
MYSQL_ROW:char **,一行的数据变成多行一列的二维数组
4. 释放结果集
void mysql_free_result(MYSQL_RES *result)
5. 获取字段
MYSQL_FIELD *myswl_fetch_fields(MYSQL_RES *result)
6. 字段个数
unsigned int mysql_num_fields(MYSQL_RES *result);
7. 设置字符集
int mysql_set_charrater_set(MYSQL *mysql, char *name)
8. 预处理(提高效率)
用于需要多次执行的语句,仅解析一次SQL语句,每次执行预处理只需要传入参数。预处理语句使用二进制协议。
第一次需要初始化,再次使用只需要赋值/执行
1. 初始化:mysql_stmt_init
2. 预处理:mysql_stmt_prepare
3. 参数个数:mysql_stmt_param_count
4. 绑定变量:mysql_stmt_bind_param
buffer存放的是参数变量的地址(内存地址映射),buffer_type数据类型,is_null是否为空,lenght长度(当为varchar时有用,否则0)
5. 执行:mysql_stmt_execute
6. 预处理影响条数:mysql_stmt_affected_rows
7. 错误:mysql_stmt_error(MYSQL *mysql)
9. 一次性执行多条sql语句
函数
存储过程
10. 事务处理
开启事务:start transaction
手动commit:SET AUTOCOMMIT=0; 需要执行commit;
自动commit:SET AUTOCOMMIT=1;
回滚:ROLLBACK;
实例
// 初始化
MYSQL mysql;
mysql_init(&mysql);
// mysql = mysql_init(NULL);
// 连接
const char *host = “127.0.0.1”;
const char *user = “root”;
const char *pass = “123456”;
const char *db = “mysql”;
mysql_real_connect(&mysql, host, usr, pass, db, 3306, 0, 0);
// 插入
char sql[256] = {0};
strcpy(sql, “insert into table students value(1)”);
if(mysql_query(&mysql, sql) != 0) {
cout << mysql_error(&mysql);
}
// 查询
strcpy(sql, “select * from students”);
if(mysql_query(&mysql, sql) != 0) {
cout << mysql_error(&mysql);
}
// 获取结果集
MYSQL_RES *res = mysql_store_result(mysql);
MYSQL_ROW row;
if(res != NULL) {
// 字段个数
unsigned int num mysql_num_fields(res);
// 字段
MYSQL_FIELD *fields = myswl_fetch_fields(res);
for(int i=0; i<num; i++) {
cout << row[i];
}
// 一行
while(row = mysql_fetch_row(res)) != NULL) {
// 遍历结果集
for(int i=0; i<num; i++) {
cout << row[i];
}
}
// 释放结果集
mysql_free_result(res);
}
// 断开
mysql_close(mysql);