MySQL query to generate INSERT statements with columns for all tables in the current database:
-- Increase limit for GROUP_CONCAT() to avoid text cutoff
SET SESSION group_concat_max_len = 1048576;
SELECT
CONCAT(
'\n\n',
GROUP_CONCAT(CONCAT(
'INSERT INTO `',
table_name,
'` (',
columns,
') VALUES ()'
) SEPARATOR '\n\n'),
'\n'
) AS result
FROM (
SELECT table_name, GROUP_CONCAT(CONCAT('`', column_name, '`')) AS columns
FROM information_schema.columns
WHERE table_schema = DATABASE()
GROUP BY table_name
ORDER BY table_name ASC
) AS tables\G
Sample output:
*************************** 1. row *************************** result: INSERT INTO `actor` (`id`,`organization_id`,`name`,`created_at`,`created_by`,`updated_at`,`updated_by`,`deleted_at`,`deleted_by`) VALUES () INSERT INTO `organization` (`id`,`name`,`created_at`,`created_by`,`updated_at`,`updated_by`,`deleted_at`,`deleted_by`) VALUES () 1 row in set (0.00 sec)
Bonus: Get list of columns for each table in alphabetical order, useful for comparing databases on different servers 🙂
SELECT table_name, GROUP_CONCAT(column_name ORDER BY column_name ASC) AS columns FROM information_schema.columns WHERE table_schema = DATABASE() GROUP BY table_name ORDER BY table_name ASC\G

