Mysq 给没有主键的表格,添加主键
查出没有主键的表格,添加对应主键的内容:
1,查询没有添加主键的表格:
SELECT table_schema, table_name
FROM information_schema.tables
WHERE (table_schema,table_name)
NOT IN( SELECT DISTINCT table_schema,table_name FROM information_schema.columns
WHERE COLUMN_KEY='PRI' )
AND table_schema='work_mysql';
PS: 如果是查询索引,把 COLUMN_KEY='PRI' 中的 PRI改成MUL
CREATE INDEX {$INDEX_NAME} ON {$TABLE_NAME} ($FIELD));
2,给表格添加主键:
SELECT CONCAT('ALTER TABLE ',table_name,' ADD PRIMARY KEY(', key_fields,');' )
FROM table_name;
根据上面查出来的表名,替换上面的内容,复制结果,进行执行。
3,集中处理
建立一个data_tables表;
CREATE TABLE `data_tables` (
`TABLE_NAME` varchar(50) NOT NULL COMMENT '数据表表名',
`KEY_FIELDS` varchar(200) NOT NULL COMMENT '主键字段'
PRIMARY KEY (`TABLE_NAME`) USING BTREE
);
TABLE_NAME 存表名
KEY_FIELDS 存主键字段
关联
SELECT CONCAT('ALTER TABLE ',dt.table_name,' ADD PRIMARY KEY(', key_fields,');') add_primary_key
FROM data_tables dt, ( SELECT UPPER(table_name) table_name FROM information_schema.tables
WHERE (table_schema,table_name) NOT IN( SELECT DISTINCT table_schema,table_name FROM information_schema.columns WHERE COLUMN_KEY='PRI')
AND table_schema='work_mysql' ) dt_no
WHERE dt.table_name = dt_no.table_name;
总结:
对于内容不多的,可以一个一个处理,对于内容多的,,多个主键内容,考虑集中处理,会方便一些。查询的时候,用关联查询快一些。