Ограничьте Максимальное количество sqlite Таблицы строк

Похоже, что это либо проблемы с путем отчета, попробуйте предложение здесь: код проекта

Или, если это не проблема, есть ли более чем одна версия CR установлена ​​в машине ? потому что это вызывает проблемы, подобные этой. Попробуйте удалить и установить правильную версию снова.

28
задан ROMANIA_engineer 18 August 2017 в 20:57
поделиться

3 ответа

Есть пара параметров, вы можете реализовать весь язык на языке, доступной на целевом хосте, как C или OCAML, что бы она ни было. После того, как у вас есть эта реализация, вы можете написать компилятор / интерпретатор на самом языке, построить его, и теперь язык работает. Этот процесс называется « загрузка ».

-121--1478287-

Многое из такого рода вещью сделано в C.

Первый компилятор C не был написан в C; Это был ассемблер PDP-11. Другие начальные компиляторы C были написаны на различных языках ассемблера.

Но все последующие компиляторы C фактически записываются в C, основанные на раннем «портативном компиляторе C». Да, это круговой. Но компилятор версии X можно использовать для создания компилятора версии X + 1.

-121--1478285-

Другое решение заключается в председании 100 строк и вместо вставки Использование Обновление , чтобы обновить самую старую строку.
Предполагая, что таблица имеет поле TATETIME , запрос

UPDATE ...
WHERE datetime = (SELECT min(datetime) FROM logtable)

может выполнять задание.

Отредактируйте: Отображение последних 100 записей

SELECT * FROM logtable
ORDER BY datetime DESC
LIMIT 100

: вот способ создать 130 «фиктивных» строк, используя операцию присоединения:

CREATE TABLE logtable (time TIMESTAMP, msg TEXT);
INSERT INTO logtable DEFAULT VALUES;
INSERT INTO logtable DEFAULT VALUES;
-- insert 2^7 = 128 rows
INSERT INTO logtable SELECT NULL, NULL FROM logtable, logtable, logtable,
   logtable, logtable, logtable, logtable;
UPDATE logtable SET time = DATETIME('now'); 
20
ответ дан 28 November 2019 в 03:48
поделиться

Есть несколько способов ограничить таблицу до 100 строк. (Для краткости 5 строк в приведенном ниже коде.) Протестировано в SQLite версии 3.7.9.

Весь этот код основан на своеобразном способе SQLite обрабатывать объявления типов данных. (Во всяком случае, мне это кажется странным.) SQLite позволяет вставлять глупости, такие как 3.14159 и wibble, в пустой столбец целых чисел. Но он позволяет вставлять только целые числа в столбец, объявленный integer primary key или integer primary key autoincrement.

Ограничение FOREIGN KEY

Используйте ограничение внешнего ключа для таблицы допустимых номеров идентификаторов, чтобы гарантировать, что номера идентификаторов находятся в требуемом диапазоне. Ограничения внешнего ключа работают даже на автоинкрементных столбцах.

pragma foreign_keys=on;
create table row_numbers (n integer primary key);

insert into row_numbers values (1);
insert into row_numbers values (2);
insert into row_numbers values (3);
insert into row_numbers values (4);
insert into row_numbers values (5);

create table test_row_numbers (
  row_id integer primary key autoincrement,
  other_columns varchar(35) not null,
  foreign key (row_id) references row_numbers (n)
);

insert into test_row_numbers (other_columns) values ('s');
insert into test_row_numbers (other_columns) values ('s');
insert into test_row_numbers (other_columns) values ('s');
insert into test_row_numbers (other_columns) values ('s');
insert into test_row_numbers (other_columns) values ('s');

Шестая вставка завершается с ошибкой «Ошибка: ограничение внешнего ключа не выполнено».

Я не думаю Использование автоинкремента совершенно безопасно. На других платформах откат оставил бы пробел в последовательности. Если вы не используете автоинкремент, вы можете безопасно вставить строки, выбрав номер идентификатора из «row_numbers».

insert into test_row_numbers values
(
  (select min(n) 
   from row_numbers 
   where n not in 
     (select row_id from test_row_numbers)), 
  's'
);

CHECK () ограничение

Приведенное ниже ограничение первичного ключа гарантирует, что идентификаторы будут целыми числами. Ограничение CHECK () гарантирует, что целые числа будут в правильном диапазоне. Ваше приложение может по-прежнему иметь дело с пробелами, вызванными откатами.

create table test_row_numbers (
  row_id integer primary key autoincrement,
  other_columns varchar(35) not null,
  check (row_id between 1 and 5)
);
3
ответ дан Mike Sherrill 'Cat Recall' 28 November 2019 в 03:48
поделиться
-

Вы можете создать триггер , который пожали в вставку, но лучший способ приблизиться к этому, возможно, просто иметь запланированную работу, которая проходит периодически (скажем, один раз в неделю ) и удаляет записи из таблицы.

4
ответ дан 28 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: