Оригинал: Exercise 43: SQL Administration
Переводчик: Феликс Ли
Лицензия: CC BY-NC-SA 4.0
Гордо использует Google Translate
Слово управление переопределяется в контексте баз данных. Это может означать "обеспечение того, чтобы сервер PostgreSQL продолжал работать", или "изменение и миграция таблиц для новых программ". В этом упражнении мы рассмотрим простые способы изменения и миграции схем. Полное управление сервером баз данных выходит за рамки данного руководства.
Вы уже встречались с DROP TABLE
, как способом удаления таблицы. Я покажу вам ещё один способ использования этого запроса, а также как использовать ALTER TABLE
для добавления или удаления столбцов из таблицы.
/* Удаляем таблицу только если она существует. */
DROP TABLE IF EXISTS person;
/* Создаём снова, чтобы работать с ней. */
CREATE TABLE person (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER
);
/* Переименовываем таблицу в peoples. */
ALTER TABLE person RENAME TO peoples;
/* Добавляем новый столбец hatred к peoples. */
ALTER TABLE peoples ADD COLUMN hatred INTEGER;
/* Переименовываем peoples обратно в person. */
ALTER TABLE peoples RENAME TO person;
.schema person
/* Мы больше не нуждаемся в этой таблице. */
DROP TABLE person;
```Я делаю некоторые ложные изменения в таблице, чтобы продемонстрировать эти команды, но использование `ALTER TABLE` и `DROP TABLE` — это всё, что можно сделать с помощью этих запросов в SQLite3. Я объясню это, чтобы вы понимали, что происходит:`ex21.sql:2`
Используем модификатор `IF EXISTS`, чтобы удалять таблицу только при её существовании. Это предотвращает ошибки при выполнении .sql скрипта на новой базе данных без таблицы.
`ex21.sql:5`
Просто создаём таблицу заново, чтобы работать с ней.
`ex21.sql:13`
Используем `ALTER TABLE`, чтобы переименовать таблицу в `peoples`.
`ex21.sql:16`
Добавляем новый столбец `hatred` к переименованной таблице `peoples`, который является типом `INTEGER`.
`ex21.sql:19`
Переименовываем `peoples` обратно в `person`, так как это глупое название для таблицы.
`ex21.sql:21`
Делаем схему `person`, чтобы вы могли видеть, что теперь у неё есть новый столбец `hatred`.
`ex21.sql:24`
После этого упражнения удаляем эту таблицу, чтобы очистить место.
## Миграция и эволюция данных
Давайте применим некоторые из техник, которые вы узнали. Я попрошу вас выбрать вашу базу данных и "эволюционировать" её в различные формы. Убедитесь, что вы хорошо понимаете предыдущие упражнения, и что ваш `code.sql` работает правильно. Если вы ещё не завершили все эти задачи, вернитесь и закончите всё это.
Если у вас возникают проблемы с выполнением этих шагов, обратитесь за помощью к своему преподавателю или коллегам. Чтобы убедиться, что вы работаете в правильном состоянии при выполнении этого упражнения, когда вы запустите ваш `code.sql`, вы должны иметь возможность запустить `.schema`, следуя примеру:```sql
$ sqlite3 ex13.db < code.sql
$ sqlite3 ex13.db ".schema"
CREATE TABLE person (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER
);
CREATE TABLE person_pet (
person_id INTEGER,
pet_id INTEGER
);
CREATE TABLE pet (
id INTEGER PRIMARY KEY,
name TEXT,
breed TEXT,
age INTEGER,
dead INTEGER,
dob DATETIME
);
Убедитесь, что ваши таблицы совпадают с моими таблицами. Если это не так, вернитесь назад и удалите любые команды, которые выполнялись после последнего упражнения, используя ALTER TABLE
.
Задачей является выполнение следующего списка изменений базы данных:+ Добавьте столбец dead
в таблицу person
, как в таблице pets
.
phone_number
в таблицу person
.salary
в таблицу person
, который имеет тип FLOAT
.dob
(Дата рождения) в таблицы person
и pet
, который имеет тип DATETIME
.purchased_on
в таблицу person_pet
, который имеет тип DATETIME
.parent
в таблицу pet
, который имеет тип INTEGER
и хранит id
родителя.UPDATE
, чтобы обновить существующие записи базы данных новыми данными. Не забудьте обновить столбец purchased_on
в таблице person_pet
, указывая, когда человек приобрёл данного питомца.id
родителя и установить его в столбце parent
.purchased_on
для отображения связи между таблицами person_pet
, pet
и parent
.pet.parent
для реализации этого. На самом деле это очень просто, поэтому не усложняйте задачу.code.sql
, где вы уже добавили все необходимые изменения, чтобы он использовал синтаксис DROP TABLE IF EXISTS
.+ Используйте оператор ALTER TABLE
, чтобы добавить столбцы height
и weight
в таблицу person
, и добавьте эти изменения в ваш файл code.sql
.code.sql
, чтобы сбросить базу данных, и убедитесь, что нет ошибок.Вы должны создать файл ex13.sql
, содержащий все новые изменения. Затем используйте code.sql
для сброса базы данных, выполните ex13.sql
для изменения базы данных и выполните SELECT
запросы, чтобы подтвердить, что были сделаны правильные изменения.## Глубокое изучениеПродолжите чтение документации по DROP TABLE
и ALTER TABLE
, а затем посетите страницу с языковыми конструкциями SQLite3 и прочтите остальные CREATE
и DROP
запросы в документации.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )