Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Добавление информации в столбец / 11 сообщений из 11, страница 1 из 1
09.12.2017, 22:32
    #39567130
Илоша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
Здравствуйте! Я в SQL новичок. В процессе изучения столкнулась с некоторыми неясностями, которые прошу разъяснить более опытных товарищей)

1) Осваивая оператор ALTER TABLE, добавила несколько колонок в существующую таблицу, в которой уже были заполненные поля. Пробовала разными способами внести инфу в нужную мне колонку, но не получается. Все время выдает ошибки. Нашла информацию о том, что подобный вариант возможен лишь в том случае, когда остальные столбцы допускают значение NULL, но у меня в этой таблице есть столбцы с primary key и они NULL не допускают. Что делать в таком случае? Ведь возможно же, что в уже заполненную таблицу необходимо добавить новую колонку и ее нужно заполнить, а из-за столбцов с ключами, это сделать невозможно. Как поступать в таком случае?

2) Опять же проблема с добавлениями колонок. Колонки добавила, но не получается поменять в них тип данных через CHANGE. В изначальных колонках все меняется, а в добавленных выдает ошибку. Как в процессе можно менять типы данных или это невозможно в MySQL?

Спасибо заранее! Очень надеюсь на Ваши ответы.
...
Рейтинг: 0 / 0
10.12.2017, 01:28
    #39567168
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
1. Почему это невозможно? Поле с primary key само по себе, добавляемое - само по себе. Можно определить для нового поля дефолтовое значение. После добавления поля можно устанавливать в него значения обычным UPDATE. Ну а вообще, показывайте структуру таблицы, проблемные запросы и тексты сообщений об ошибке. Иначе сложно что-то конкретное советовать.

2. Тоже странно. Тип данных поля в общем случае можно изменить безболезненно только в случае, когда данные удовлетворяют новому типу. В ряде случаев можно потерять данные при изменении типа, а иногда изменение и вовсе невозможно. Без конкретики, опять же, вряд ли можно что-то более внятное ответить.
...
Рейтинг: 0 / 0
10.12.2017, 08:15
    #39567192
Илоша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
vkle,
Спасибо огромное! С UPDATE все получилось.

А вот с изменениями данных, как-то не очень. Не получается в добавленной колонке поменять на NOT NULL:


mysql> ALTER TABLE persons
-> CHANGE Date
-> Date date NOT NULL;
ERROR 1265 (01000): Data truncated for column 'Date' at row 2


mysql> EXPLAIN persons;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| Number | int(11) | NO | PRI | NULL | auto_increment |
| PersonID | varchar(30) | NO | PRI | NULL | |
| LastName | varchar(255) | NO | | NULL | |
| FirstName | varchar(50) | NO | | NULL | |
| Email | varchar(255) | NO | | NULL | |
| Address | varchar(255) | NO | | NULL | |
| City | varchar(100) | NO | | NULL | |
| Date | date | YES | | NULL |
...
Рейтинг: 0 / 0
10.12.2017, 08:23
    #39567195
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
А трудно сделать вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| Number    | int(11)      | NO   | PRI | NULL    | auto_increment |
| PersonID  | varchar(30)  | NO   | PRI | NULL    |                |
| LastName  | varchar(255) | NO   |     | NULL    |                |
| FirstName | varchar(50)  | NO   |     | NULL    |                |
| Email     | varchar(255) | NO   |     | NULL    |                |
| Address   | varchar(255) | NO   |     | NULL    |                |
| City      | varchar(100) | NO   |     | NULL    |                |
| Date      | date         | YES  |     | NULL    |

?
...
Рейтинг: 0 / 0
10.12.2017, 08:49
    #39567196
Илоша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
982183,

сделала бы с удовольствием, если бы знала как)) Я с консолью знакома цельных полтора дня, поэтому буду невероятно признательна, если подскажите, как это делается.
...
Рейтинг: 0 / 0
10.12.2017, 08:56
    #39567197
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
Выделяем текcт, и нажимаем кнопку FIX на панели, выше окна ввода.
...
Рейтинг: 0 / 0
10.12.2017, 09:01
    #39567198
Илоша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
982183, огромное спасибо! Теперь буду знать)
...
Рейтинг: 0 / 0
10.12.2017, 13:00
    #39567233
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
ИлошаERROR 1265 (01000): Data truncated for column 'Date' at row 2А что там, во второй строке таблицы, в поле Date записано перед изменением?
Вроде, безобидное преобразование.
...
Рейтинг: 0 / 0
10.12.2017, 13:37
    #39567249
Илоша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
vkle,

mysql> ALTER TABLE persons
-> ADD Data datetime NULL;
Query OK, 5 rows affected (0.42 sec)
Records: 5 Duplicates: 0 Warnings: 0


mysql> ALTER TABLE persons
-> CHANGE Data
-> Date date;
Query OK, 5 rows affected (0.12 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE persons
-> CHANGE Date
-> Date date NOT NULL;
ERROR 1265 (01000): Data truncated for column 'Date' at row 2
...
Рейтинг: 0 / 0
10.12.2017, 14:53
    #39567274
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
Илоша,

Так понимаю, поле `Data` при добавлении содержит данные NULL (или не содержит данных), так как после добавления туда ничего не было записано.

Потом поле `Data` было переименовано в `Date` с одновременной сменой типа данных с TIMESTAMP на DATE. В принципе, NULL - он и в Африке NULL, значение вполне допустимо для нового описания поля. Нет данных - нет и ошибок.

Далее, по новому описанию поле `Date` становится "NOT NULL" - отсутствие данных не допускается. А поле данных не содержит. Вполне естественно, что существующее состояние не подходят под новое условие и при выполнении запроса должна быть сгенерирована ошибка, указывающая на сей факт.

Обычно "Data truncated" говорит о том, что данные "не лезут" в новый формат (например, по длине) и будут обрезаны. Тут не понятно, что не лезет и ещё не понятно, почему нет ошибки на первой строке, ведь там тоже должен быть NULL.
Интересу ради протестировал, мне вернулась ошибка "ERROR 1138 (22004): Invalid use of NULL value". После заполнения поля данными ошибка пропала.
Возможно, разные версии MySQL ведут себя по-разному (я тестировал на 5.7.19-log). А может быть Вы показали не все запросы, может, где-то какие-то данные были записаны.
...
Рейтинг: 0 / 0
10.12.2017, 16:47
    #39567304
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление информации в столбец
982183Выделяем текcт, и нажимаем кнопку FIX на панели, выше окна ввода.Лучше SRC. Это касается ЛЮБЫХ цитат с консоли.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Добавление информации в столбец / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]