
- •Типы данных столбцов
- •Пример:
- •То автоматически генерируется уникальный id (то же, если поле id вообще не указывать в команде вставки).
- •Обычно, следует выполнять select для set-столбца, используя оператор like или функцию find_in_set():
- •Но и такая форма также работает:
- •'Yyyy-mm-dd',yy-mm-dd' Например '98-12-31', "98.12.31', '98/12/31'
- •Примеры
- •Describe messy # Описать таблицу 'messy'
- •Show databases # Показать все доступные бд
- •Например, drop table people, animals, plants удалит эти три таблицы. Drop table oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'
- •Например, можно указать следующее:
- •Но нельзя указать:
- •Например:
- •Быстрая загрузка данных
- •Синтаксис оператора truncate
- •Примеры:
- •# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'. Обычно за этим следует удаление старых записей из 'data'.
- •(Например, select name from people; select mydata.People.Name from people ).
- •Пример: select date_format(date, "%w, %m %d %y") as nice_date from calendar
- •Пример: # Псевдоним колонки
- •# Псевдоним таблицы в MySql
- •Подзапросы -- Язык sql разрешает использовать в других операторах языка dml подзапросы, которые являются внутренними запросами, определяемыми оператором select.
- •Выбрать заглавие статьи, полный текст ее, и длину (в байтах) полного текста для всех статей, автор которых Stacie Sheldon. Функция lengtho возвращает длину заданной строки в символах.
- •Применение подзапросов в операторах изменения данных
- •Функции условий
- •Математические функции
- •Строковые функции
- •Дата и время
- •Остальные функции
- •Демонстрируется использование mysql в качестве несложного калькулятора:
- •Проверка таблицы при помощи команды describe:
- •Выборка всех данных
- •Выборка определенных строк. Выборка с условием
- •Операторы and и or можно использовать совместно.
- •Выборка определенных столбцов Достаточно просто перечислить имена нужных столбцов, разделив их запятыми.
- •Получить имена владельцев животных можно с помощью следующего запроса:
- •Предположим, нужно узнать, в каком возрасте животные давали приплод:
- •В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
- •Сортировку можно проводить по нескольким столбцам сразу.
- •Отсортировать результаты по возрасту также можно при помощи выражения orderby:
- •Максимальное значение столбца
Методичка
для выполнения лабораторных работ
в среде СУБД MySQL
Тема: Знакомство со средой MySQL. Утилита mysqladmin. Создание базы данных.
Запуск службы MySQL
Как правило, сервер баз данных работает постоянно. MySQL работает как служба.
Запуск ПУСК – ПАНЕЛЬ УПРАВЛЕНИЯ – СЛУЖБЫ
Утилита mysqladmin
Главным инструментом администрирования баз данных в MySQL служит утилита mysqladmin. С ее помощью можно создавать, уничтожать и контролировать свой сервер и поддерживаемые им базы данных.
mysqladmin [options] command [ command. . . ]
Команды
create database Создать новую базу данных.
drop database Уничтожить базу данных.
extended-status Выдать отчет о состоянии сервера, более полный, чем это делает командаstatus.
flush-hosts Послать клиентам всю информацию, находящуюся в буфере.
flush-logs Записать на диск все журнальные данные из буфера.
flush-privileges То же, что иreload,
flush-status Обнулить переменные состояния.
flush-tables Выполнить все буферизованные табличные операции.
kill thread-id [thread-id...] Завершить один или несколько потоковmysqld.
password password Установить пароль администратора для сервера баз данных.
Ping Проверить, работает ли сервер MySQL.
processlist Показать активные потоки сервераmysqld.
reload Перезагрузить информацию о правах доступа из таблицы привилегий.
Refresh Выполнить все буферизованные табличные операции и открыть заново файлы журналов.
shutdown Закончить работу сервера баз данных.
status Отчет о состоянии сервера.
variables Вывести системные переменные, используемые сервером.
version Вывести номер версии сервера.
Создание баз данных mysqladmin -p create DATABASENAME создает новый каталог, который будет содержать файлы базы данных, в каталоге data.
Удаление базы данных mysqladmin -p drop DATABASENAME
MySQL не позволяет случайно удалить базу данных, она предупредит, что удаление базы данных потенциально очень опасно и попросит подтвердить свое намерение.
Состояние сервера
В утилите mysqladminочень много команд, позволяющих контролировать состояние сервера MySQL. Ввод командыmysqladmin status обеспечивает выдачу состояния сервера в одной строке, которая выглядит следующим образом:
Uptime: 395 Threads: 1 Questions: 14 Slow queries: 0
Opens: 10 Flush tables: 1 Open tables: 6
Выводимые величины означают следующее:
Uptime Число секунд, в течение которых сервер запущен и работает.
Threads Число потоков, взаимодействующих с базой в данный момент. Всегда существует хотя бы один поток - тот, который подсчитывает все остальные потоки.
Questions Число запросов, переданных базе данных с момента запуска.
Slow queries Число запросов, выполнение которых потребовало больше времени, чем время, указанное в конфигурации.
Opens Число таблиц, открытых с момента запуска сервера.
Flush tables Количество командflush, refresh иreload.
Open tables Число таблиц, открытых в данный момент. Поскольку MySQL многопоточна, каждая таблица одновременно может быть открыта несколько раз.
Для вывода более общей статической информации используется команда mysqladmin version. Она выдает на экран следующее:
bin/mysqladmin Ver 7.8 Distrib 3.22.17, for sun-solaris2.6 on spare TCX Datakonsult AB, by Monty
Server version 3.22.17
Protocol version 10
Connection Localhost via Unix socket
Unix socket /tmp/;ny3ql. sock
Uptime: 23 mm 58 sec
Threads: 1 Questions: 15 Slow queries: 0 Opens: 10 Flush tables: 1 Open tables: 6
Последняя строка совпадает, конечно, с теми данными, которые показывает mysqladmin status. Остальные данные совершенно другие.
Server version Версия запущенного сервера MySQL.
Protocol version Версия коммуникационного протокола MySQL, который поддерживает сервер..
Connection Метод подключения к серверу. Если было обращение к удаленному серверу, в этой позиции будет имя машины, с которой идет подключение.
Unix socket Имя файла сокета, который используется для обмена данными с сервером.
Uptime Суммарное время работы сервера.
Две другие команды, mysqladmin variables и mysqladmin extended-status, предлагают дополнительную информацию.
Команда mysqladmin processlist, перечисляет все активные потоки в виде таблички:
Здесь указано, чем занят каждый процесс. Выдаваемые величины имеют следующий смысл:
Id Внутренний идентификационный номер потока. Можно использовать это число в командеmysqladmin kill, чтобы завершить поток.
User Пользователь, подключенный к серверу через этот поток.
Host Имя узла, с которого подключился пользователь.
db База данных, к которой подключен пользователь.
Command Тип команды, выполняемой потоком. Команда может иметь один из следующих типов:
Sleep Поток ждет ввода пользователя. Большинство процессов должно находиться в этом состоянии.
Quit Поток в процессе завершения.
Init DB Поток готовит выбранную базу к взаимодействию.
Query Поток выполняет реальный запрос.
Field list Поток создает список полей в таблице.
Create DB Поток создает новую базу данных.
Drop DB Поток удаляет базу данных.
Reload Поток перезагружает таблицы доступа MySQL. После перезагрузки все новые потоки будут использовать обновленные таблицы доступа.
Shutdown Поток находится в процессе завершения всех других потоков и закрытия сервера.
Statistics Поток генерирует статистику.
Processes Этот поток анализирует другие потоки. С этим значением будет показан поток, выполняющий данную команду.
Connect Поток в процессе установления входящего соединения с клиентом.
Kill Этот поток завершает другой поток.
Refresh Поток очищает все буферы и сбрасывает журнальные файлы.
Завершение работы сервера mysqladmin -p shutdown Эта команда - самый правильный способ завершения работы сервера.
mysqlshow [options] [database] [table] [field] Показывает структуру указанной базы данных, таблицы или поля. Если не заданы аргументы, выдается список всех баз данных. С одним аргументом будет выдана информация о структуре указанной базы. С двумя аргументами программа выдаст информацию об указанной таблице. Если указать все три элемента, будет показана информация об отдельном указанном поле таблицы
Параметры (для mysqladmin и mysqlshow)
-f, --force Удалить таблицы без подтверждения.
-h host, --host=host Подключиться к серверу MySQL на указанном хосте.
-i seconds, --sleep=seconds Последовательно выполнять команды, делая между каждым запуском паузу длиной в указанное количество секунд.
-р [password], --password=[password] Пароль, используемый для подключения к серверу баз данных. Если использовать без аргумента, пароль будет запрошен из командной строки.
-Р port, --port=port Порт, используемый для подключения к удаленному серверу баз данных.
-и username, --user=username Имя пользователя, используемое для подключения к серверу баз данных.
MySQL Administrator
Утилита предназначена для администрирования сервера, а также может выполнять операции резервного копирования и востановления информации (как над отдельными, так и над всеми базами, причем есть встроеный планировщик заданий). Основные функции утилиты сгруппированы в 11 пунктов графического меню в стиле MS Windows 2003.
Server Information Первый пункт стандартен – Server Information. Здесь можно посмотреть на какой платформе запущен сервер, хост/порт, текущий аккаунт пользователя, IP, операционную систему, процессор и размер доступной памяти. Тут же показывается текущий статус сервера – работает или остановлен.
Service ControlПозволяет запустить или перезапустить сервер, просмотреть лог загрузки. Вторая вкладка позволяет настроить основные параметры – пути к файлу конфигурации, директории с бинарными файлами и настроить сервер для поддержки специфических расширений (например, таблиц формата InnoDB с поддержкой транзакций или использования для работы именованных каналов).
User AdministrationПозволяет настроить привилегии для каждого пользователя и оперативно управлять ими. При использовании MySQL Administrator все операции над пользователями проходят в графическом режиме и в любое время за считанные секунды можно настроить привелегии для любого пользователя или базы данных.
Server LogsПоказывает стандартные логи сервера – общий лог и записи об ошибках.
Вот самое интересное и полезное - это реализованные функции резервирования и востановления БД. Реализован удобный планировщик, и теперь можно делать раздельное резервирование отдельных БД и таблиц – одни БД один раз в сутки, другие в конце недели и т.д. Опции резервирования также гибко настраиваются – для этого есть вкладка Advanced Options. Вся вкладкаScheduleпока неактивна
При востановлении из резервной копии также можно выбрать отдельные таблицы и базы данных, которые подлежат восстановлению.
Replication Status ФункцияReplication Statusскорее всего еще до конца не реализована, присутствует только вкладкаServer Information. Для реализации и настройки репликации надо перейти на вкладкуReplicationразделаStartup variables, где можно детально настроить параметры репликации.
CatalogsПоследний раздел дает доступ к отдельным базам и таблицам, позволяет осуществлять операции оптимизации, проверки и востановления таблиц, а также показывает сведения об индексах и их параметрах, а также пользователей, которые имеют доступ к конкретной базе или таблице.
Запуск СУБД MySQL осуществляется следующим образом:
mysql [OPTIONS] database
Клиентская часть СУБД MySQL названа mysql. Она обеспечивает интерфейс командной строки с СУБД MySQL и возможность неинтерактивной пакетной обработки.
Просмотреть список команд программы mysqlможно, запустив ее с параметром--help:
mysql --help
Опции, поддерживаемые программой mysql, представлены в таблице.
Таблица 1
Опция |
Описание |
-\?, --help |
Справка |
-d, --debug=[options] |
Вывести в протокол отладочную информацию. |
-d, --debug-info |
Вывести отладочную информацию при выходе из программы |
-e, --exec |
Выполнить команду и выйти, неявная форма опции --batch |
-f, --force |
Продолжить, даже если мы сталкиваемся с SQL ошибкой |
-h, --hostname=[hostname] |
Задает имя сервера, с которым вы желаете соединиться |
-P, --port=[port] |
Порт для соединения с сервером MySQL |
-p, --password=[password] |
Пароль пользователя для соединения с сервером MySQL. |
-q, --quick |
Быстрый вывод. |
-s, --silent |
Работать молча (подавить вывод) |
-u, --user=[user] |
Имя пользователя для соединения с сервером MySQL. |
-v, --verbose |
Подробный вывод. -v |
-w, --wait |
Если подключение терпит неудачу, то подождать и повторить попытку |
-B, --batch |
Выполнить в пакетном режиме. Результаты будут выведены в формате с разделением табуляцией. |
-V, --version |
Вывести информацию о версии пакета |
В интерактивном режиме mysql будет печатать результаты в таблице. Если не задан пароль или имя пользователя mysql попробует зайти в систему на сервере базы данных с использованием вашего логина и НУЛЕВОГО (ПУСТОГО) пароля. Например:
mysql -u coobic
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.12-max
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Тема: Создание, модификация и удаление таблиц баз данных.
Точка с запятой используется для обозначения окончания данной SQL-команды и что-либо, следующее за этим символом, указывает на начало следующего выражения.
Эти ограничения относятся как к интерактивному режиму работы mysql(из командной строки), так и к вызову команд из файла, читаемого с ввода командойmysql < some-file.
Таблица, структурированное вместилище данных, является основным понятием реляционных баз данных. Прежде чем начать вводить данные в таблицу, надо определить ее структуру.
Создание таблиц
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(col_name type [NOT NULL | NULL] [AUTO_INCREMENT] [DEFAULT default_value] [PRIMARY KEY]
или PRIMARY KEY (col_name [(length)],...)
или KEY [index_name] (col_name [(length)],...)
или INDEX [index_name] (col_name [(length)],...)
или UNIQUE [INDEX] [index_name] (col_name [(length)],...)
или FULLTEXT [INDEX] [index_name] (col_name [(length)],...)
или CHECK (expr),...)]
или FOREIGN KEY [REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }]
[ SELECT... ] (любое корректное выражениеSELECT)
или
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;
Оператор CREATE TABLE создает таблицу с заданным именем в текущей базе данных. Если нет активной текущей базы данных или указанная таблица уже существует, то возникает ошибка выполнения команды.
Каждая таблица tbl_name представлена определенными файлами в директории базы данных. В случае таблиц типа MyISAM это следующие файлы:
Файл |
Назначение |
tbl_name.frm |
Файл определения таблицы |
tbl_name.MYD |
Файл данных |
tbl_name.MYI |
Файл индексов |
Для хорошей переносимости SQL нужно избегать имен, начинающихся не с допустимой буквы. Длина идентификатора может быть до 64 символов.
Предложение состоит из имени таблицы, за которым идет любое количество определений полей. Синтаксис определения полей включает в себя имя поля, за ним его тип, за ним любой модификатор (например: name char(30) not null ).
TEMPORARY-- временная таблица автоматически удаляется по завершении соединения, а ее имя действительно только в течение данного соединения.
IF NOT EXISTSдля проверки существования данной таблицы.
AUTO_INCREMENTАтрибут позволяет автоматически обновлять числовое поле. Это удобно для создания уникальных идентификаторов для записей в таблице. При вводе значения NULL или 0 существующее значение автоматически увеличивается на единицу. Текущее значение поля AUTO_INCREMENT может быть получено с помощью функции LAST_INSERT_ID().
DEFAULT value Атрибут приписывает полю значение по умолчанию. Это значение будет присвоено полю в случае, если во вводимой в таблицу записи это поле пустое. Если значение по умолчанию не определено и нет ограничения NOT NULL , то будет записано значение NULL. В случае NOT NULL MySQL запишет значение на основе типа поля.
NOT NULLЭтот атрибут гарантирует, что каждая запись в столбце будет иметь какое-либо, отличное от NULL, значение. Попытка вставить в такое поле значение NULL вызовет ошибку.
NULL Атрибут указывает на допустимость значения NULL. Это атрибут по умолчанию в случае, если никакой атрибут не указан. Поля, входящие в состав индекса, не могут иметь атрибут NULL. (Он будет проигнорирован, даже если он указан.)
PRIMARY KEY Атрибут автоматически делает поле первичным ключом таблицы. Таблица может иметь только один первичный ключ. Любое поле, являющееся первичным ключом, должно иметь атрибут NOT NULL.
FULLTEXT создание индекса, для полнотекстового поиска.
FOREIGN KEY таблицы InnoDB выполняют проверку ограничений внешнего ключа. Столбцы таблицы, на которую ссылаются, должны быть явно указаны. InnoDB поддерживает действия ON DELETE и ON UPDATE.
CREATE TABLE Customers
( cnum integer NOT NULL PRIMARY KEY
cname char(10),
city char(10),
snum integer,
FOREIGN KEY (snum) REFERENCES Salespeople
( snum );
Внешний ключ как ограничение столбцов
Вариант ограничения столбца ограничением FOREIGN KEY - по другому называется - ссылочное ограничение (REFERENCES), так как он фактически не содержит в себе слов FOREIGN KEY, а просто использует слово REFERENCES, и далее имя родительского ключа, подобно этому:
CREATE TABLE Customers
( cnum integer NOT NULL PRIMARY KEY,
cname char(10),
city char(10),
snum integer REFERENCES Salespeople (snum));
Вышеупомянутое определяет Customers.snum как внешний ключ у которого родительский ключ - это Salespeople.snum. Это эквивалентно такому ограничению таблицы:
FOREIGN KEY (snum) REGERENCES Salespeople (snum)
Если нужно изменить или удалить текущее ссылочное значение родительского ключа, имеется по существу три возможности:
Можно ограничить, или запретить, изменение ( способом ANSI), обозначив, что изменения в родительском ключе - ограничены.
Можно сделать изменение в родительском ключе и тем самым сделать изменения во внешнем ключе автоматическим, что называется - каскадным изменением.
Можно сделать изменение в родительском ключе, и установить внешний ключ в NULL, автоматически ( полагая, что NULLS разрешен во внешнем ключе ), что называется - пустым изменением внешнего ключа.
CREATE TABLE Customers
(cnum integer NOT NULL PRIMARY KEY,
cname char(10) NOT NULL,
city char(10),
rating integer,
snum integer REFERENCES Salespeople,
UPDATE OF Salespeople CASCADES,
DELETE OF Salespeople RESTRICTED);
CHECK использование, чтобы предопределять допустимое вводимое значение
CREATE TABLE Salespeople
( snum integer NOT NULL PRIMARY KEY,
sname char(10) NOT NULL UNIQUE,
city char(10),
comm decimal CHECK ( comm < 1 ));
CREATE TABLE Salespeople
( snum integer NOT NULL UNIQUE,
sname char (10) NOT NULL UNIQUE,
city char(10),
comm decimal(10,2)
CHECK (comm < 1.15 OR city = 'Barcelona'));
Если после командыCREATEуказывается командаSELECT, то создаются новые поля для всех элементов в данной команде SELECT. Например:
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a), KEY(b))
TYPE=MyISAM SELECT b,c FROM test2;
Эта команда создаст таблицу MyISAM с тремя столбцами a, b и c. Столбцы из команды SELECT присоединяются к таблице справа, а не перекрывают ее. Пример:
SELECT * FROM foo;
n |
1 |
CREATE TABLE bar (m INT) SELECT n FROM foo;
SELECT * FROM bar;
m n
NULL 1
Каждая строка в таблице foo вносится в таблицу bar со своим значением из foo, при этом в новые столбцы в таблице bar записываются величины, заданные по умолчанию. Команда CREATE TABLE ... SELECT не создает автоматически каких-либо индексов. Чтобы иметь индексы в созданной таблице, необходимо указать их перед данной командой SELECT:
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
LIKEсоздает таблицу, основываясь на определении другой, уже существующей, таблицы.
Типы таблиц MySQL
MySQL поддерживает два различных типа таблиц: транзакционные (InnoDB и BDB) и без поддержки транзакций (HEAP, ISAM, MERGE и MyISAM).
Преимущества транзакционных таблиц (Transaction-safe tables, TST):
Надежность.
Лучше обеспечивает параллелизм при одновременных обновлениях таблицы и чтении.
Преимущества нетранзакционных таблиц (non-transaction-safe tables, NTST):
Работать с ними намного быстрее, так как не выполняются дополнительные транзакции.
Для них требуется меньше дискового пространства
Для обновлений используется меньше памяти.
Таблицы MyISAM приняты по умолчанию в MySQL. Он основывается на коде ISAM (устаревший тип таблиц) и обладает в сравнении с ним большим количеством полезных дополнений.
Таблицы MERGE(или таблица MRG_MyISAM) представляет собой совокупность идентичных таблиц MyISAM, которые могут использоваться как одна таблица.
Таблицы HEAP Для HEAP-таблиц используются хэш-индексы; эти таблицы хранятся в памяти. Благодаря этому обработка их осуществляется очень быстро, очень хорошо подходит для временных таблиц!
Таблицы InnoDB и BDB или BerkeleyDB снабжены обработчиком таблиц, обеспечивающим безопасные транзакции (уровня ACID) с возможностями фиксации транзакции, отката и восстановления после сбоя. Чтобы использовать InnoDB, необходимо указать параметры запуска InnoDB в своем файле my.cnf или my.ini. Самый простой способ внести изменения - добавить в раздел [mysqld] строкуinnodb_data_file_path=ibdata:30M
Типы данных столбцов
MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных
Поля должны иметь один из следующих типов данных:
DECIMAL (length,dec) |
Десятичное число с плавающей запятой. |
DOUBLE [(length,dec)] |
Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел. |
FLOAT [(length,decimals)] |
Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта). |
INT [(length)] [UNSIGNED] [ZEROFILL] |
Целое (4 байта). |
TINYINT[(length)] [UNSIGNED][ZEROFILL] |
Целое число (1 байт). |
REAL [(length,dec)] |
Идентично DOUBLE (8 байт). |
BLOB |
Двоичный объект (максимальная длина 65535 байт) |
VARCHAR(NUM) |
Строка переменной длины (1 <= NUM <= 255) |
CHAR(NUM) |
Строка фиксированной длины (1 <= NUM <= 255) |
DATE |
Использует формат "YYYY-MM-DD". Диапазон от 0000-00-00 до 9999-12-31.. |
DATETIME |
Диапазон '0000-01-01 00:00:00' - '9999-12-31 23:59:59' |
TIME |
формат "HH:MM:SS" HH:MM:DDHHMMDDHHMMHH |
TIMESTAMP(NUM) |
Автоматически изменяется при вставке/обновлении. Имеет формат YYMMDDHHMMSS или YYYYMMDDHHMMSS. |
Все типы целочисленных данных могут иметь необязательный и не оговоренный в стандарте атрибут UNSIGNED.Беззнаковые величины можно использовать для разрешения записи в столбец только положительных чисел, если необходимо немного увеличить числовой интервал в столбце.
BIT , BOOLЯвляются синонимами для TINYINT(1).
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]Малое число с плавающей точкой обычной точности. Допустимые значения: от -3,402823466E+38 до -1,175494351E-38, 0, и от 1,175494351E-38 до 3,402823466E+38. Если указан атрибут UNSIGNED, отрицательные значения недопустимы.
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL] , REAL[(M,D)] [UNSIGNED] [ZEROFILL]Число с плавающей точкой удвоенной точности нормального размера. Допустимые значения: от -1,7976931348623157E+308 до -2,2250738585072014E-308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308. Если указан атрибут UNSIGNED, отрицательные значения недопустимы.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL] `Неупакованное'' число с плавающей точкой. Ведет себя подобно столбцу CHAR, содержащему цифровое значение. Термин ``неупакованное'' означает, что число хранится в виде строки и при этом для каждого десятичного знака используется один символ.
Для всех целочисленных полей в MySQL можно установить атрибутAUTO_INCREMENT. При записи величины NULL (рекомендуется) или 0 в столбец AUTO_INCREMENT данный столбец устанавливается в значение value+1, где value представляет собой наибольшее для этого столбца значение в таблице на момент записи. Последовательность AUTO_INCREMENT начинается с 1. В таблице может быть только один столбец AUTO_INCREMENT, и он должен быть индексирован. Последнюю внесенную строку можно найти с помощью следующего запроса
SELECT * FROM tbl_name WHERE auto_col IS NULL