Читайте также:
|
|
Теперь, по завершении проектирования двух таблиц для размещения персональной информации, следующим шагом является формирова_ ние SQL_выражений для создания таблиц в БД. Вот выражение для создания таблицы person:
CREATE TABLE person (person_id SMALLINT UNSIGNED, fname VARCHAR(20),
lname VARCHAR(20), gender CHAR(1), birth_date DATE, address VARCHAR(30), city VARCHAR(20), state VARCHAR(20), country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id));
В этом выражении должно быть понятно все, кроме последнего эле_ мента. При описании таблицы необходимо сообщить серверу БД, ка_ кой столбец или столбцы будут играть роль первичного ключа табли_
Создание таблиц | |
цы. Осуществляется это путем создания ограничения (constraint) для таблицы. В описание таблицы можно добавить ограничение одного из нескольких типов. Данное ограничение является ограничением пер_ вичного ключа (primary_key constraint). Оно накладывается на столбецperson_id и получает имя pk_person. Обычно я начинаю имена ограниче_ ний первичного ключа с приставки pk_, а затем указываю имя табли_ цы, чтобы при просмотре списка таких ограничений было ясно, чем каждое из них является.
Говоря об ограничении, упомянем еще один тип, который мог бы быть полезным для таблицы person. В табл. 2.7 был добавлен третий столбец для допустимых значений определенных столбцов (например 'M' и 'F' для столбца gender). Это другой тип ограничения – проверочное ограни_ чение (check constraint), ограничивающее допустимые значения кон_кретного столбца. MySQL позволяет вводить в описание столбца прове_ рочное ограничение:
gender CHAR(1) CHECK (gender IN ('M','F')),
На большинстве серверов БД проверочные ограничения работают со_ ответствующим образом, а сервер MySQL допускает описание прове_ рочных ограничений, но не выполняет их проверку. Но MySQL предос_ тавляет другой символьный тип данных – enum (перечисление), кото_ рый вводит проверочное ограничение в описание типа. Вот как это вы_ глядело бы для описания столбца gender:
gender ENUM('M','F'),
Вот как выглядит создание таблицы person с введением типов данных enum для столбца gender:
CREATE TABLE person (person_id SMALLINT UNSIGNED, fname VARCHAR(20),
lname VARCHAR(20), gender ENUM('M','F'), birth_date DATE, address VARCHAR(30), city VARCHAR(20), state VARCHAR(20), country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id));
Позже в данной главе будет показано, что происходит при попытке до_ бавить в столбец данные, не соответствующие проверочному ограниче_ нию (или, в случае MySQL, значениям перечисления).
Теперь все готово для выполнения выражения create table с помощью инструмента командной строки mysql. Вот как это выглядит:
mysql> CREATE TABLE person
_> (person_id SMALLINT UNSIGNED,
Глава 2. Создание и заполнение базы данных | |
_> | fname VARCHAR(20), |
_> | lname VARCHAR(20), |
_> | gender ENUM('M','F'), |
_> birth_date DATE, | |
_> | address VARCHAR(30), |
_> | city VARCHAR(20), |
_> | state VARCHAR(20), |
_> | country VARCHAR(20), |
_> | postal_code VARCHAR(20), |
_> CONSTRAINT pk_person PRIMARY KEY (person_id) | |
_> | ); |
Query OK, 0 rows affected (0.27 sec)
После обработки выражения create table сервер MySQL возвращает со_ общение «Query OK, 0 rows affected» (Запрос выполнен без ошибок, 0 строк подверглось обработке), что говорит об отсутствии синтаксиче_ ских ошибок в выражении. Если требуется убедиться, что таблица per_ son действительно существует, можно использовать команду describe (описать) (или desc для краткости) и посмотреть описание таблицы:
mysql> DESC person; +_____________+______________________+______+_____+_________+_______+ | Field | Type | Null | Key | Default | Extra | +_____________+______________________+______+_____+_________+_______+
| person_id | | smallint(5) unsigned | | | PRI | | | | | | |||
| fname | | varchar(20) | | YES | | | | | NULL | | | | |
| lname | | varchar(20) | | YES | | | | | NULL | | | | |
| gender | | enum('M','F') | | YES | | | | | NULL | | | | |
| birth_date | | date | | YES | | | | | NULL | | | | |
| address | | varchar(30) | | YES | | | | | NULL | | | | |
| city | | varchar(20) | | YES | | | | | NULL | | | | |
| state | | varchar(20) | | YES | | | | | NULL | | | | |
| country | | varchar(20) | | YES | | | | | NULL | | | | |
| postal_code | | varchar(20) | | YES | | | | | NULL | | | | |
+_____________+______________________+______+_____+_________+_______+ 10 rows in set (0.06 sec)
Дата добавления: 2015-08-17; просмотров: 69 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Шаг 2: уточнение | | | Что такое Null? |