Assign columns on the row being written — the point of most BEFORE
triggers: { set: { updatedAt: fn('CURRENT_TIMESTAMP') } }.
Write a row somewhere else, typically an audit table.
Update rows elsewhere, e.g. maintaining a counter.
Delete rows elsewhere.
Reject the change with a message.
One statement in a trigger body.
These cover what triggers are overwhelmingly used for. Anything else is still expressible as a raw string body.