Intereting Posts
Эффективная навигация по сайту с помощью CodeIgniter Эффективный способ расчета количества внешних ключей во второй таблице и отображения его с помощью строк из первой таблицы – PHP – MySQL Как запретить браузеру кэшировать изображение? Как создать правильный класс расширения mysqli с подготовленными операторами? Steam Web API получает значок изображения значков Как получить электронную почту от facebook вставить в таблицу mysql из файла .txt Как определить, какие файлы PHP фактически используются, а какие нет? Mongo Distinct Aggegation Flatten Array: сохранить индекс, значение равное положению в массиве Php, я не могу получить доступ к унаследованным частным переменным даже не с отражением Как получить часовой пояс от кода аэропорта (IATA / FAA) Google latitude возвращает пустой ресурс местоположения. Что-то не так в этом потоке Oauth? несколько файлов PDF с html2pdf Как заменить «\» на str_replace () в PHP?

Сделать строку неактивной в MySQL

Можно ли сделать строку в MySQL неактивной? Итак, эта строка больше не используется в результатах запросов? Мой клиент хочет сохранить удаленные элементы в базе данных, но я не хочу редактировать все запросы, чтобы проверить, был ли элемент удален или нет.

Или есть простой способ переместить все данные строки в другую «неактивную» таблицу?

Solutions Collecting From Web of "Сделать строку неактивной в MySQL"

Вы можете переименовать текущую таблицу, создать в ней «удаленный» столбец, а затем создать представление с тем же именем, что и текущая таблица, выбрав все, где удалено = 0. Таким образом, вам не придется менять все ваши запросы. Представление будет обновляемым, если вы укажете значение по умолчанию для столбца удаления. _

CREATE TABLE my_new_table (col1 INTEGER, col2 INTEGER, col3 INTEGER, deleted INTEGER NOT NULL DEFAULT 0); INSERT INTO my_new_table (col1, col2, col3) SELECT (col1, col2, col3) FROM my_table; DROP TABLE my_table; CREATE VIEW my_table (col1, col2, col3) AS SELECT (col1, col2, col3) FROM my_new_table WHERE deleted = 0; 

То, что вы описываете, обычно называется мягким удалением .

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

Я бы добавил inactive поле в таблице, установив его в 0 если строка активна, и до 1 если она неактивна. Однако вам придется отфильтровывать неактивные строки из всех ваших запросов, добавив WHERE inactive = 0 в WHERE . Альтернативой этому было бы использование представления, как предложил @Brian в другом ответе , который я рекомендую.

Вы могли бы, как вы предлагаете, скопировать их в новую таблицу с той же структурой при удалении

Триггер «Удалить» – это то, что вам нужно.

Пример использования:

 CREATE TRIGGER Users_archiver AFTER delete ON users FOR EACH ROW BEGIN insert into users_archive values(old.id,old.username,old.first_name, old.last_name,old.password); END$$ delimiter ; 

Это сохранит вам копию удаленной строки во второй таблице, называемой user_archive.

надеюсь это поможет.