Я не уверен, почему у вас есть уникальное имя и онлайн, поскольку вы пытаетесь создать список онлайн-активности. Ввод уникального ключа, который вы указали, будет означать, что у вас может быть имя только три раза, по одному для каждого состояния (null, true, false).
Что вы фактически делаете, это пытаетесь создать таблицу истории, и в этом случае для использования вашего текущего метода заполнения таблицы вы должны указать уникальный ключ (name, logout_time) с нулевым logout_time, указывающим на текущего вошедшего в систему пользователя поскольку вы хотели бы только одно время выхода из системы, которое будет нулевым).
Примерно так:
CREATE TABLE onlineActivity (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR (32) NOT NULL,
login_time DATETIME NOT NULL,
logout_time DATETIME NULL,
time SMALLINT (3) NOT NULL DEFAULT 0,
online BOOL not null DEFAULT false,
UNIQUE (name, logout_time),
PRIMARY KEY (id)
) ENGINE = MyISAM;
Затем запустите это по расписанию, чтобы обновить таблицу
INSERT IGNORE INTO onlineActivity (name, login_time, logout_time, online)
SELECT name, now(), null, true FROM onlineList
И это при выходе пользователя из системы
UPDATE onlineActivity SET online = false, logout_time = now() WHERE name = ? AND logout_time = null