Автоматически добавлять пользователя и дату в записи - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть база данных, к которой могут обращаться несколько пользователей. Можно ли каким-либо образом настроить таблицы таким образом, чтобы каждый раз, когда кто-либо вводил новую запись или изменял ее, его / ее имя пользователя и введенная дата сохранялись в 2 столбцах той же таблицы, что и сама запись. Таблица будет выглядеть так:

Id  |  Name  | Username | Date Entered | Date Modified
 1  |  Cat   |    john  |  1999-05-05  | 1996-06-06  

Я использую графический интерфейс phpMyAdmin.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Вы можете установить столбец, чтобы запретить нулевые значения, либо при создании таблицы, используя NOT NULL после объявления типа данных. В противном случае вы используете операторы ALTER TABLE, чтобы изменить столбец, если он уже существует, или добавляете столбец в существующую таблицу.

Это остановит кого-то от добавления записи, но не для обновления. Если у вас есть отдельная таблица пользователей для ссылки, вы должны использовать отношение внешнего ключа, чтобы убедиться, что, если столбец пользователя заполнен, это будет сделано с действительным пользователем.

Ограничения DEFAULT могут использоваться для установки значения полей даты, если значение не указано.

ALTER TABLE x
  ADD USER VARCHAR(45) NOT NULL

ALTER TABLE x
  ADD DATE_ENTERED DATE NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

ALTER TABLE x
  ADD DATE_ENTERED DATE NOT NULL DEFAULT ON UPDATE CURRENT_TIMESTAMP
0 голосов
/ 17 декабря 2009

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

Сказав это, то, что вы ищете, чтобы сделать то, что вы описали, является триггером. Это фрагмент SQL, который будет выполняться каждый раз, когда вызывается указанная операция. Грубый пример для вашего случая:

создать триггерный аудит после вставки в "table_name" вставить (пользователь, время) в "table_name"

Я не помню точный синтаксис mysql, но это грубый пример того, что вам нужно. Пожалуйста, задайте дополнительный вопрос, если это не ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...