Repository navigation
Replies: 2 comments
|
看了下目前的实现, CREATE TABLE IF NOT EXISTS person (...)MySQL 端随后只是把这条 SQL 交给 所以这三个情况分别是:
如果确实要重建,只能显式执行类似: mysql.execute("DROP TABLE IF EXISTS person");
mysql.create_datatable<person>(ormpp_auto_key{"id"});不过这样数据会全部丢失。正常的结构变更更适合用 还有一个容易误解的地方: |
0 replies
|
如果数据库里已经有表,
CREATE TABLE IF NOT EXISTS table_name (...)
所以已有同名表时,它不会清空数据,也不会检查现有表结构是否和 T 一致。
已有表迁移到 ormpp,建议流程是:
1. 按现有表结构定义 C++ struct,字段名、类型尽量和数据库列一致。
2. 用 REGISTER_AUTO_KEY / REGISTER_PRIMARY_KEY 等宏注册主键。
3. 不要对生产已有表执行 drop table。
4. 如果结构不一致,优先让 struct 适配现有表;确实要改表结构时,用 alter_table 或迁移 SQL。
也就是说,迁移已有表到 ormpp,重点是让 struct 映射匹配现有表结构,而不是依赖 create_datatable 自动迁移。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
int main() {
person p = {0, "test1", 2};
person p1 = {0, "test2", 3};
person p2 = {0, "test3", 4};
std::vector v{p1, p2};
dbng mysql;
mysql.connect("127.0.0.1", "dbuser", "yourpwd", "testdb");
mysql.create_datatable(ormpp_auto_key{"id"});
// 插入数据
mysql.insert(p);
mysql.insert(v);
}
示例程序中推荐使用create_datatable来根据“person”结构体的字义自动创建表,下面各种情况create_datatable的表现是怎么样的?
1、若MYSQL中存在同名的“person”表,但结构与person结构体不同,此时能正确创建表吗?
2、若MYSQL中存在同名的“person”表,结构与person结构体相同,会清空表内数据吗?
3、create_datatable是根据什么条件来判断是否要新建表?是否有删除旧表创建新表的选项?
All reactions