【问题标题】:Restricting max no of rows insert in SQLite限制在 SQLite 中插入的最大行数
【发布时间】:2014-01-16 12:36:24
【问题描述】:

我想创建一个最多包含 5 行的表,当有第 6 次插入操作时,必须删除最后一行。

我想要最多 5 行,我想在 android 的 SQLite 数据库中执行此操作。

请给我一个简单的查询。

【问题讨论】:

  • 这种类型的操作通常由插入触发器处理。我不知道这是否“简单”。
  • 你能告诉我一个在 SQLite 中插入触发器的例子吗兄弟 :)
  • 我删除了 MySQL 标签,因为问题似乎与 SQLite 有关。
  • 哟@GordonLinoff 谢谢你的兄弟.... 请建议我一个简单的方法来解决这个问题兄弟:)
  • 只有一个行 ID 字段。插入 5 个行 ID 为 1-5 的初始条目。然后使用计数为 5 的计数器,然后返回 1。根据计数器按行 ID 更新您的行。

标签: sql sqlite


【解决方案1】:

您可以在应用程序中计算行数。如果它返回多于四行或等于五行,则在插入新行之前删除最后一行。

更新: 我在我命名为test_table 的表上做了一些测试,并添加了这个触发器:

DELIMITER $$
CREATE TRIGGER `schema_name`.`trigger_name` BEFORE INSERT ON `database_name`.`test_table`
FOR EACH ROW

if (select count(*) from test_table)> 4  /*  count records to see if it exeeds your limit  */
    then 
        delete from test_table where id=(SELECT MAX(id) FROM test_table LIMIT 1);  /*  delete last row  */
END if;
END

当我尝试插入第六行时出现此错误:

ERROR 1442: 1442: Can't update table 'test_table' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我查了一下,找到了这个答案:https://stackoverflow.com/a/21117071/1355562 - 这让我找到了http://dev.mysql.com/doc/refman/5.6/en/stored-program-restrictions.html
“存储函数的限制”部分第 5 点说“......无法修改已被使用的表......”

看起来你必须在你的应用程序中这样做兄弟;)

ops.. 刚刚注意到您正在使用 MySQLlite.. 也许它有所不同。这是给 MySQL 的……对不起……

【讨论】:

猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 2020-09-26
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 2010-12-05
相关资源
最近更新 更多