您的位置:首页 > 数据库

sql 基础--触发器,如何限制表最大行数

2017-03-02 13:39 537 查看
参考: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;";

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: