"delete from table"不会删除表格?

4

我创建了 "database.db",一切都很顺利,但为什么它不能在最后删除表格?每次运行时,我都会在创建表格时收到“表格已存在”的错误消息。

int main()
{
 sqlite3 *db; //Database Handle
 char *zErr;
 int rc;
 char *sql;

 rc = sqlite3_open("database.db", &db);

 if(rc)
 {
  cout << "Can't open database: " << sqlite3_errmsg(db) << endl;;
  sqlite3_close(db);
  exit(1);
 }

 sql = "create table test(PID int primary key, Name text)"; //sql query

 rc = sqlite3_exec(db, sql, NULL, NULL, &zErr); //execute sql statement

 if(rc != SQLITE_OK)
 {
  if (zErr != NULL)
  {
   cout << "SQL error: " << zErr << endl;
   sqlite3_free(zErr);
  }
 }
 else
 {
  sql = "insert into test values (1,'John')";
  rc = sqlite3_exec(db, sql, NULL, NULL, &zErr);

  sql = "insert into test values (2,'Smith')";
  rc = sqlite3_exec(db, sql, NULL, NULL, &zErr);
 }



    //delete the table on exit.

 rc = sqlite3_exec(db, "delete from test", NULL, NULL, &zErr);

 sqlite3_close(db);
 return 0;
}

此外,主键是否可以根据数据库中最后一个更大的键自动生成?

你的意思是自动增量吗?是的,SQLite 支持自动增量。如果你想坐下来设计表格,你可以看看 Firefox 的 Sqlite Manager 插件 https://addons.mozilla.org/en-US/firefox/addon/5817/。 - allenskd
4个回答

7

您需要使用drop table来删除表格。而delete则是用来删除表格中的行。

rc = sqlite3_exec(db, "drop table test", NULL, NULL, &zErr);

SQLite将自动递增声明为主键的整数字段。请参见此处


2
您可以使用DELETE命令删除表中的行。
您可以使用DROP命令删除整个表或其他数据库项。
如果您不确定表是否存在,也可以使用CREATE TABLE IF NOT EXISTS创建表。
CREATE TABLE命令中使用id INTEGER PRIMARY KEY来获取自动生成的行ID。请保留HTML标签。

2
  1. 使用DROP TABLE
  2. 来自SQLite文档:

通常的算法是给新创建的行一个ROWID,该ROWID比插入之前表中最大的ROWID大1。


0

DML "delete from test" 会删除表test中的所有行。如果你想删除整个表,请尝试使用 "delete table test" 或 "drop table"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接