Будет ли MODIFY COLUMN сбрасывать атрибуты, которые не указаны в операторе? - PullRequest
0 голосов
/ 13 октября 2019

Будет ли оператор MODIFY COLUMN отбрасывать атрибуты, не указанные в MariaDB?

Например;Учитывая следующую таблицу и инструкцию, будет ли сохранено значение по умолчанию после выполнения инструкции?

t
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | int(11) | NO   | PRI | 5       |       |
+-------+---------+------+-----+---------+-------+
ALTER TABLE t
MODIFY COLUMN c INT(11) NULL

Документация немного неясна, на мой взгляд;

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

Это означает, что все атрибуты должны быть указаны или будут потеряны?

1 Ответ

2 голосов
/ 13 октября 2019

Атрибут по умолчанию будет утерян.

MariaDB [test]> DESC test_table;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| column_a | int(11) | NO   | PRI | 5       |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.002 sec)

MariaDB [test]> ALTER TABLE test_table
    -> MODIFY COLUMN column_a INT(11) NULL;
Query OK, 0 rows affected (0.007 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [test]> DESC test_table;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| column_a | int(11) | NO   | PRI | NULL    |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.000 sec)

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

MariaDB [test]> ALTER TABLE test_table
    -> MODIFY COLUMN column_a INT(11) NULL DEFAULT 5;
Query OK, 0 rows affected (0.007 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [test]> DESC test_table;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| column_a | int(11) | NO   | PRI | 5       |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.001 sec)

Надеюсь, это поможет.

...