October’s point release can add a hidden primary key to a table created without one, which matters for replication and for group replication in particular.
SET sql_generate_invisible_primary_key = ON;
CREATE TABLE events (payload JSON, created_at DATETIME);
SHOW CREATE TABLE eventsG
`my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT
/*!80023 INVISIBLE */,
PRIMARY KEY (`my_row_id`)
-- SELECT * does not return it. SELECT my_row_id does.
A table without a primary key forces a full scan per row on a row-based replica, which is the reason this exists — a delete of a thousand rows becomes a thousand table scans on the replica. The invisible column is a reasonable rescue for a table that should have had one and is not a substitute for choosing a real key.