前言
批量给数据库表ID字段加上PK约束
步骤
1.拼接执行sql
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ADD PRIMARY KEY (id);') AS update_sql
FROM (
SELECT
T.TABLE_SCHEMA,
T.TABLE_NAME,
T.ENGINE,
T.CREATE_TIME,
T.UPDATE_TIME,
IF(EXISTS (
SELECT *
FROM information_schema.COLUMNS C
WHERE C.TABLE_SCHEMA = T.TABLE_SCHEMA
AND C.TABLE_NAME = T.TABLE_NAME
AND C.COLUMN_NAME = 'id' -- id字段
AND C.COLUMN_KEY = 'PRI'
),
'YES',
'NO'
) AS HAS_PK
FROM information_schema.TABLES T
WHERE T.TABLE_SCHEMA = '数据库名称' AND T.TABLE_TYPE = 'BASE TABLE'
) t
WHERE HAS_PK = 'NO'
执行结果
2.编写存储过程
把第一步生成的执行sql变成成存储过程,忽略中途发生错误
DELIMITER $$
CREATE PROCEDURE execute_sql_statements () BEGIN
DECLARE
CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
END;
ALTER TABLE 数据库名.tabel名 ADD PRIMARY KEY ( id );
ALTER TABLE 数据库名.tabel名 ADD PRIMARY KEY ( id );
END $$DELIMITER;
执行结果
3.执行存储过程
CALL execute_sql_statements();
执行结果
效果
总结
使用上述方式可以快速批量给表字段添加上主键约束