Измените значение MySQL SHOW COLUMS "Extra" - PullRequest
1 голос
/ 05 апреля 2019

Есть ли способ изменить значение te столбца Extra, отображаемого с предложениями SHOW COLUMNS / DESCRIBE?

В документации по этому столбцу указано следующее:

Extra

Любая дополнительная информация о данном столбце.Значение не является пустым в следующих случаях:

  • auto_increment для столбцов, имеющих атрибут AUTO_INCREMENT.

  • при обновлении CURRENT_TIMESTAMP для столбцов TIMESTAMP или DATETIME, которыеиметь атрибут ON UPDATE CURRENT_TIMESTAMP.

  • VIRTUAL GENERATED или VIRTUAL STORED для сгенерированных столбцов.

  • DEFAULT_GENERATED для столбцов, для которых задано значение выражения по умолчанию.

У меня есть информация о следующих столбцах таблицы, но я хочу удалить значение Extra столбца start_date.

Есть ли способсделать это?

+--------------------+--------------------+------+-----+-------------------+-------------------+
|       Field        |        Type        | Null | Key |      Default      |       Extra       |
+--------------------+--------------------+------+-----+-------------------+-------------------+
| id_machine_product | "int(10) unsigned" | NO   | PRI | NULL              | auto_increment    |
| ...                | ...                | ...  | ... | ...               | ...               |
| start_date         | timestamp          | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+--------------------+--------------------+------+-----+-------------------+-------------------+

РЕДАКТИРОВАТЬ:

Я реализовал метод проверки отпечатков пальцев в PHP, который различает значения таблиц DESCRIBE, у меня есть версии базы данных в производстве, которые нене имеет этого дополнительного значения, даже если эти столбцы имеют значение выражения по умолчанию, поэтому в настоящее время я хочу изменить это значение, чтобы не получать ошибок от моей реализованной проверки отпечатка пальцаИонный метод в моей среде разработки.

Производственные базы данных находятся в Mysql <8.0, поэтому, согласно ответу Билла Карвина, у меня возникли проблемы с моей версией среды разработки MySQL, которая составляет 8.0 </p>

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

Непонятно из вашего вопроса почему вы хотите исключить дополнительную информацию.Просто отметим, что по умолчанию столбец является выражением.

Чтобы поле Extra было пустым, по умолчанию для столбца необходимо указать либо постоянное значение, либо NULL.

mysql> create table foo ( id int unsigned primary key, start_date timestamp not null default current_timestamp);

mysql> show columns from foo;
+------------+------------------+------+-----+-------------------+-------------------+
| Field      | Type             | Null | Key | Default           | Extra             |
+------------+------------------+------+-----+-------------------+-------------------+
| id         | int(10) unsigned | NO   | PRI | NULL              |                   |
| start_date | timestamp        | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+------------+------------------+------+-----+-------------------+-------------------+

mysql> alter table foo modify start_date timestamp default null;

mysql> show columns from foo;
+------------+------------------+------+-----+---------+-------+
| Field      | Type             | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| id         | int(10) unsigned | NO   | PRI | NULL    |       |
| start_date | timestamp        | YES  |     | NULL    |       |
+------------+------------------+------+-----+---------+-------+

Обратите внимание, что Extraинформация "DEFAULT_GENERATED" присутствует только в MySQL 8.0.Я подозреваю, что это связано с новой функцией поддержки выражений в предложении DEFAULT.Любое другое выражение также приводит к этой дополнительной информации.

mysql > alter table foo modify start_date timestamp default (now() + interval 1 hour);

mysql> show columns from foo;
+------------+------------------+------+-----+---------------------------+-------------------+
| Field      | Type             | Null | Key | Default                   | Extra             |
+------------+------------------+------+-----+---------------------------+-------------------+
| id         | int(10) unsigned | NO   | PRI | NULL                      |                   |
| start_date | timestamp        | YES  |     | (now() + interval 1 hour) | DEFAULT_GENERATED |
+------------+------------------+------+-----+---------------------------+-------------------+
1 голос
/ 05 апреля 2019

Topicstarters комментарий

Я реализовал метод проверки отпечатков пальцев в PHP, который отличается значения таблиц DESCRIBE, у меня есть версии баз данных в производстве который не имеет этого дополнительного значения, хотя эти столбцы имеют значение выражения по умолчанию, поэтому в настоящее время я хочу изменить это значение так Я не получаю ошибки от моего внедренного метода проверки отпечатка пальца в моей среде разработки.

Более стандартный метод SQL, который также работает в MySQL 8

Запрос

SELECT 
    information_schema.COLUMNS.COLUMN_NAME AS 'Field'
    , information_schema.COLUMNS.COLUMN_TYPE AS 'Type'
    , information_schema.COLUMNS.IS_NULLABLE AS 'Null'
    , information_schema.COLUMNS.COLUMN_KEY AS 'Key'
    , information_schema.COLUMNS.COLUMN_DEFAULT AS 'Default'
    , information_schema.COLUMNS.EXTRA AS 'Extra'
FROM 
    information_schema.TABLES
INNER JOIN
    information_schema.COLUMNS ON information_schema.TABLES.TABLE_NAME =  information_schema.COLUMNS.TABLE_NAME
WHERE
    information_schema.TABLES.TABLE_NAME = '<table>'

Этот запрос должен соответствовать выводу DESCRIBE Тогда вы можете использовать REPLACE() на information_schema.COLUMNS.EXTRA output, чтобы удалить или отредактировать, как вы хотите.
Например, удаление дополнительных функций, таких как DEFAULT_GENERATED или VIRTUAL GENERATED ( сгенерированные столбцы )

0 голосов
/ 05 апреля 2019

вам нужен оператор alter table. Что-то вроде

ALTER TABLE `document` MODIFY COLUMN `start_date ` INT AUTO_INCREMENT;

Вы можете установить значение по умолчанию, например

DEFAULT 1 NOT NULL 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...