Как я могу отобразить все таблицы в базе данных, похожие на выходные данные, такие как DESCRIBE myTable
. Добавление функциональности для:
- Все таблицы сразу
- Tablesize
- Информация о символьном наборе и сортировке
- Возможности сортировки
Примечание: вывод DESCRIBE
прост и для отдельной таблицы за раз.
Edit:
Хорошая обратная связь от Рика Джеймса. Я был в растерянности и нуждался в этом мозговом штурме.
Если кто-то хочет добавить функциональность (к моему собственному ответу), например, с отступом в нижней части каждой таблицы для
- Индексы (возможно, 1 строка за индекс, отображающая имена и имена столбцов, разделенные запятой
- Мощность в этой строке указателя выше
- Ограничения внешнего ключа
- Что-нибудь еще в оружии, чтобы ваши сверстники могли найти полезные
- По идее, весь блок называется "Расширенная информация", а также переключатель (параметр) для Yay или Nay для его создания. Если "N" не производит его.
Я был бы очень доволен. Естественно, что информация не зависала под заголовками столбцов, которые уже были показаны в моем ответе ниже. Таким образом, некоторые визуальные, такие как отступы, являются тем, что сразу приходит на ум, не имея его в точности как часть таблицы. Грубый выход прекрасен.
В качестве грубых замечаний, которые могут быть полезны, рассмотрите следующее:
create schema x99;
use x99;
create table parent
( -- assume your have only one parent, ok bad example, it early
id int auto_increment primary key,
fullName varchar(100) not null
)ENGINE=InnoDB;
-- drop table child;
create table child
( id int auto_increment primary key,
fullName varchar(100) not null,
myParent int not null,
CONSTRAINT `mommy_daddy` FOREIGN KEY (myParent) REFERENCES parent(id)
ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;
create table t3
( id INT AUTO_INCREMENT PRIMARY KEY,
myD DATE NOT NULL,
myI INT NOT NULL,
KEY `t3_001` (myD,myI)
);
create table t4
( someCode CHAR(4) PRIMARY KEY,
codeDescr VARCHAR(500) NOT NULL
);
create table t5
( id INT AUTO_INCREMENT PRIMARY KEY,
theCode CHAR(4) NOT NULL,
d1 DATE NOT NULL,
i1 INT NOT NULL,
someOther DATETIME NOT NULL,
FOREIGN KEY `cd_2_t4` (theCode) REFERENCES t4(someCode),
FOREIGN KEY `cd_2_t3` (d1,i1) REFERENCES t3(myD,myI)
);
-- The below 2 lines are merely to show cardinality which I am sure is
-- read from INFO SCHEMA too
show indexes in child; -- to pick up cardinality (or from INFO SCHEMA)
show indexes in t5; -- ditto
-- So, I am not suggesting to actually call "show indexes"
-- http://dev.mysql.com/doc/refman/5.7/en/key-column-usage-table.html
-- James Goatcher
SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = 'x99'
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
+-----------------------------+
| list_of_fks |
+-----------------------------+
| child.myParent -> parent.id |
| t5.d1 -> t3.myD |
| t5.i1 -> t3.myI |
| t5.theCode -> t4.someCode |
+-----------------------------+
Despite the output suggested by James Goatcher on that Webpage,
perhaps what would look better under table t5 as 2 lines:
t5.d1,i1 -> t3.myD,myI <----- That there would be swell
t5.theCode -> t4.someCode
-- You may make the assumption that all tables are in the same schema
-- If they aren't and it blows up that is fine
drop schema x99;
Я хотел бы наградить эту награду.