MariaDB 10.3 system-versioned tables give you history free

Keeping an audit trail normally means a trigger writing to a history table, which is code to maintain and a place for the two to drift apart.

CREATE TABLE prices (
  sku VARCHAR(32) PRIMARY KEY,
  amount INT NOT NULL
) WITH SYSTEM VERSIONING;

UPDATE prices SET amount = 5400 WHERE sku = 'FR-100';

SELECT * FROM prices FOR SYSTEM_TIME AS OF TIMESTAMP '2018-06-01 12:00:00';
SELECT * FROM prices FOR SYSTEM_TIME ALL WHERE sku = 'FR-100';

The old rows stay in the same table in a hidden partition, so ordinary queries are unaffected and the history is queryable with a clause rather than a join. It records what the row was and not who changed it, so it is not an audit log in the compliance sense — application-level attribution still has to be stored somewhere. Growth is the thing to plan for: a frequently updated table keeps every version until a partition is dropped, and nothing does that automatically.