在C++中,我有一个MYSQL* con的指针链接mysql,然后还有一个saving的文本文件储存string类型的m_name和m_password作为用户的用户名和密码,用户可以管理mysql中自己对应的表,当我需要删除该用户时,我只需要输入用户名即可连带删除该用户所管理的表的代码;此外,在已经创建了用户的就绪工作下,能自动生成该用户的一张表,表中含有num,name,sex,tnum,e_mail,subject的信息且均为varchar(10)类型
时间: 2023-12-03 22:45:34 浏览: 31
首先,你需要在MySQL中创建一个数据库和一个用户表。下面是创建表的示例代码:
```sql
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)
);
CREATE TABLE user_table (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
table_name VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES user(id)
);
```
这个表包括两个表:`user` 表用于存储用户名和密码,`user_table` 表用于存储每个用户所创建的表的名称和对应的用户 ID。
接下来,你可以使用 `INSERT INTO` 语句向 `user` 表中插入新的用户记录。例如,插入一个名为 "Alice",密码为 "123456" 的用户:
```sql
INSERT INTO user (username, password)
VALUES ('Alice', '123456');
```
当用户成功创建后,你可以使用 `SELECT LAST_INSERT_ID()` 函数获取刚刚插入的用户的 ID。
接下来,你需要在 C++ 代码中读取保存用户信息的文本文件,并将用户名和密码插入到 MySQL 数据库中。
```cpp
#include <mysql.h>
#include <fstream>
#include <sstream>
#include <string>
MYSQL* con = mysql_init(NULL);
mysql_real_connect(con, "localhost", "user", "password", "database", 3306, NULL, 0);
std::ifstream file("saving.txt");
std::string line;
while (std::getline(file, line)) {
std::istringstream iss(line);
std::string username, password;
if (iss >> username >> password) {
std::stringstream sql;
sql << "INSERT INTO user (username, password) VALUES ('" << username << "', '" << password << "')";
mysql_query(con, sql.str().c_str());
}
}
```
要删除一个用户,你需要在 `user_table` 表中查找该用户创建的所有表,并将这些表删除。然后,你可以在 `user` 表中删除该用户记录。
```cpp
void delete_user(const std::string& username) {
// 查询用户 ID
std::stringstream sql;
sql << "SELECT id FROM user WHERE username='" << username << "'";
mysql_query(con, sql.str().c_str());
MYSQL_RES* res = mysql_store_result(con);
MYSQL_ROW row = mysql_fetch_row(res);
int user_id = atoi(row[0]);
mysql_free_result(res);
// 删除用户创建的表
sql.str("");
sql << "SELECT table_name FROM user_table WHERE user_id=" << user_id;
mysql_query(con, sql.str().c_str());
res = mysql_store_result(con);
while (row = mysql_fetch_row(res)) {
std::string table_name = row[0];
sql.str("");
sql << "DROP TABLE " << table_name;
mysql_query(con, sql.str().c_str());
}
mysql_free_result(res);
// 删除 user_table 中的记录
sql.str("");
sql << "DELETE FROM user_table WHERE user_id=" << user_id;
mysql_query(con, sql.str().c_str());
// 删除 user 中的记录
sql.str("");
sql << "DELETE FROM user WHERE username='" << username << "'";
mysql_query(con, sql.str().c_str());
}
```
最后,你可以使用 `CREATE TABLE` 语句在 MySQL 中创建一个新表。
```cpp
void create_table(const std::string& username, const std::string& table_name) {
// 查询用户 ID
std::stringstream sql;
sql << "SELECT id FROM user WHERE username='" << username << "'";
mysql_query(con, sql.str().c_str());
MYSQL_RES* res = mysql_store_result(con);
MYSQL_ROW row = mysql_fetch_row(res);
int user_id = atoi(row[0]);
mysql_free_result(res);
// 创建新表
sql.str("");
sql << "CREATE TABLE " << table_name << " ("
<< "num VARCHAR(10),"
<< "name VARCHAR(10),"
<< "sex VARCHAR(10),"
<< "tnum VARCHAR(10),"
<< "e_mail VARCHAR(10),"
<< "subject VARCHAR(10)"
<< ")";
mysql_query(con, sql.str().c_str());
// 在 user_table 中添加记录
sql.str("");
sql << "INSERT INTO user_table (user_id, table_name) VALUES (" << user_id << ", '" << table_name << "')";
mysql_query(con, sql.str().c_str());
}
```
这样,你就能在 C++ 中操作 MySQL 数据库了。