Лабораторная работа №1 Ознакомление с интерфейсом субд mysql



Pdf көрінісі
бет45/51
Дата11.10.2023
өлшемі1.29 Mb.
#480346
1   ...   41   42   43   44   45   46   47   48   ...   51
Metod BDiAKS 11.03.04 2017

Примечание: в таблице может быть только один столбец
AUTO_INCREMENT
, и 
он должен быть индексирован. Кроме того, версия MySQL 3.23 будет правильно работать 
только с положительными величинами столбца
AUTO_INCREMENT
. В случае внесения 
отрицательного числа оно интерпретируется как очень большое положительное число. Это 
делается, чтобы избежать проблем с точностью, когда числа ''заворачиваются'' от положи-
тельного к отрицательному и, кроме того, для гарантии, что по ошибке не будет получен 
столбец 
AUTO_INCREMENT
со значением 
0

Величины
NULL
для столбца типа
TIMESTAMP
обрабатываются иначе, чем для 
столбцов других типов. В столбце 
TIMESTAMP
нельзя хранить литерал 
NULL
; при уста-
новке данного столбца в 
NULL
он будет установлен в текущее значение даты и времени. 
Поскольку столбцы
TIMESTAMP
ведут себя подобным образом, то атрибуты
NULL
и 
NOT NULL
неприменимы в обычном режиме и игнорируются при их задании. С другой 
стороны, чтобы облегчить клиентам MySQL использование столбцов 
TIMESTAMP
, сервер 
сообщает, что таким столбцам могут быть назначены величины
NULL
(что соответствует 
действительности), хотя реально
TIMESTAMP
никогда не будет содержать величины 
NULL
. Это можно увидеть, применив 
DESCRIBE tbl_name
для получения описания 
данной таблицы. Следует учитывать, что установка столбца
TIMESTAMP
в
0
не равно-
значна установке его в
NULL
, поскольку
0
для
TIMESTAMP
является допустимой ве-
личиной. 
Величина 
DEFAULT
должна быть константой, она не может быть функцией или вы-
ражением. Если для данного столбца не задается никакой величины 
DEFAULT
, то MySQL 
автоматически назначает ее. Если столбец может принимать
NULL
как допустимую ве-
личину, то по умолчанию присваивается значение 
NULL
. Если столбец объявлен как 
NOT 
NULL
, то значение по умолчанию зависит от типа столбца: для числовых типов, за исклю-
чением объявленных с атрибутом 
AUTO_INCREMENT
, значение по умолчанию равно 
0

Для столбца 
AUTO_INCREMENT
значением по умолчанию является следующее значение 
в последовательности для этого столбца. 
Для типов даты и времени, отличных от 
TIMESTAMP
, значение по умолчанию рав-
но соответствующей нулевой величине для данного типа. Для первого столбца 
TIMESTAMP
в таблице значение по умолчанию представляет собой текущее значение 
даты и времени. 
65


Для строковых типов, кроме 
ENUM
, значением по умолчанию является пустая стро-
ка. Для 
ENUM
значение по умолчанию равно первой перечисляемой величине (если явно не 
задано другое значение по умолчанию с помощью директивы 
DEFAULT
). 
Значения по умолчанию должны быть константами. Это означает, например, что не-
льзя установить для столбца ''даты'' в качестве значения по умолчанию величину функции, 
такой как 
NOW()
или 
CURRENT_DATE

KEY
является синонимом для 
INDEX

В MySQL ключ 
UNIQUE
может иметь только различающиеся значения. При попыт-
ке добавить новую строку с ключом, совпадающим с существующей строкой, возникает 
ошибка выполнения команды. 
PRIMARY KEY
представляет собой уникальный ключ
KEY
с дополнительным 
ограничением, т.е. столбцы с данным ключом должны быть определены как 
NOT NULL
. В 
MySQL этот ключ называется 
PRIMARY
(первичный). Таблица может иметь только один 
первичный ключ 
PRIMARY KEY
. Если 
PRIMARY KEY
отсутствует в таблицах, а неко-
торое приложение запрашивает его, то MySQL может превратить в 
PRIMARY KEY
пер-
вый ключ 
UNIQUE
, не имеющий ни одного столбца 
NULL

PRIMARY KEY
может быть многостолбцовым индексом. Однако нельзя создать 
многостолбцовый индекс, используя в определении столбца атрибут ключа
PRIMARY 
KEY
. Именно таким образом только один столбец будет отмечен как первичный. Необходи-
мо использовать синтаксис 
PRIMARY KEY(index_col_name, ...
). 
Если ключ 
PRIMARY
или 
UNIQUE
состоит только из одного столбца и он принад-
лежит к числовому типу, то на него можно сослаться также, как на
_rowid
(новшество 
версии 3.23.11). 
Если индексу не назначено имя, то ему будет присвоено первое имя в 
index_col_name
, возможно, с суффиксами (
_2

_3

...
), делающими это имя уни-
кальным. Имена индексов для таблицы можно увидеть, используя 
SHOW INDEX FROM 
tbl_name

SHOW Syntax

С помощью выражения 
col_name(length)
можно указать индекс, для которо-
го используется только часть столбца
CHAR
или
VARCHAR
. Это поможет сделать файл 
индексов намного меньше. 
Индексацию столбцов
BLOB
и
TEXT
поддерживают только таблицы с типом 
MyISAM
. Назначая индекс столбцу с типом 
BLOB
или 
TEXT
, всегда НЕОБХОДИМО ука-
зывать длину этого индекса: 
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
В версии MySQL 3.23.23 и более поздних можно создавать также специальные ин-
дексы
FULLTEXT
. Они применяются для полнотекстового поиска. Эти индексы поддер-
живаются только таблицами типа 
MyISAM,
и они могут быть созданы только из столбцов 
VARCHAR
и
TEXT
. Индексирование всегда выполняется для всего столбца целиком, ча-
стичная индексация не поддерживается. Более подробно эта операция описана в разделе 
MySQL section. 
Выражения 
FOREIGN KEY

CHECK
и 
REFERENCES
фактически ничего не де-
лают. Они введены только из соображений совместимости, чтобы облегчить перенос кода с 
других SQL-серверов и запускать приложения, создающие таблицы со ссылками. 
Для каждого столбца 
NULL
требуется один дополнительный бит, при этом величина 
столбца округляется в большую сторону до ближайшего байта. 
Максимальную длину записи в байтах можно вычислить следующим образом: 
длина записи = 1+
+ (сумма длин столбцов)+
66


+ (количество столбцов с допустимым NULL + 7)/8+
+ (количество столбцов с динамической длинной).
Опции 
table_options
и 
SELECT
реализованы только в версиях MySQL 3.23 
и выше. Ниже представлены различные типы таблиц: 


Достарыңызбен бөлісу:
1   ...   41   42   43   44   45   46   47   48   ...   51




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет