zoukankan      html  css  js  c++  java
  • sql 基础--触发器,如何限制表最大行数

    参考:http://blog.csdn.net/love_android_2011/article/details/20137385

    http://blog.csdn.net/lihuibo128/article/details/43667865

    语法

    创建触发器的基本语法如下:

    CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
    ON table_name
    BEGIN
     -- Trigger logic goes here....
    END;

    在这里,event_name 可能是INSERT,DELETE和UPDATE操作所提到的表table_name数据库。您可以选择指定FOR EACH ROW表名后。

    以下是语法上创建一个触发器UPDATE操作一个或多个指定一个表列如下:

    CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
    ON table_name
    BEGIN
     -- Trigger logic goes here....
    END;


    例子:
    CREATE TRIGGER delete_till_50 INSERT ON _table WHEN (select count(*) from _table)>50 
    BEGIN
        DELETE FROM _table WHERE _table._id IN  (SELECT _table._id FROM _table ORDER BY _table._id limit (select count(*) -50 from _table ));
    END;
    

      注意:1.默认是 BEFORE,即在插入时判断执行 左右最终表会有51条数据

         2.BEGIN 要与前后与空格

    所以用ormlite 语句改写为:

        // 初次运行程序会执行该onCreate方法,如果不是初次运行程序则不会执行该方法,防止重复建表。
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
            try {
                //创建表
                TableUtils.createTable(connectionSource, CommentMessageItemBean.class);
    
                //设置触发器限制表条数上限
    
                String _table = "tb_comment_message_item";
                String _maxrow = 1000 + "";
    
                String deleteTrigger = "CREATE TRIGGER delete_till AFTER INSERT ON " + _table + " WHEN (select count(*) from " + _table + ")>" + _maxrow + " " +
                        "BEGIN " +
                        "DELETE FROM " + _table + " WHERE " + _table + ".id IN  (SELECT " + _table + ".id FROM " + _table + " ORDER BY " + _table + ".id limit (select count(*) -"+_maxrow+" from " + _table + " ));" +" "+
                        "END;";
    
                sqLiteDatabase.execSQL(deleteTrigger);
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
        }
    1             String deleteTrigger = "CREATE TRIGGER delete_till AFTER INSERT ON " + _table + " WHEN (select count(*) from " + _table + ")>" + _maxrow + " " +
    2                     "BEGIN " +
    3                     "DELETE FROM " + _table + " WHERE " + _table + ".id IN  (SELECT " + _table + ".id FROM " + _table + " ORDER BY " + _table + ".id limit (select count(*) -"+_maxrow+" from " + _table + " ));" +" "+
    4                     "END;";




  • 相关阅读:
    [LeetCode] Reverse Linked List II 解题报告
    [LeetCode] Search for a Range 解题报告
    Git教程
    今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
    套接字的域和地址族
    套接口和I/O通信
    2010年第82届奥斯卡金像奖获奖影片名单
    恩信ERP7.10安装、定制和二次开发 (2)
    从 Google 代码库找到的好东西 [转]
    更自然的人机交互——2010微软技术节现场速递
  • 原文地址:https://www.cnblogs.com/wjw334/p/6490156.html
Copyright © 2011-2022 走看看