class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

основы sql

введение
структура БД
инструментарий
комментарий
идентификаторы
обзор типов данных
интервалы времени
литералы
операции и выражения
обзор функций
преобразование типов
создание таблицы
изменение, удаление таблицы
вставка данных
изменение записей
удаление записей
выбор данных
соединения
агрегатные функции, группировка данных
операции над выборками
добавление итогов
нумерация записей
уникальность первич. ключа
индексы
представления

Dynamic SQL

прочее

Справочник по SQL

Создание таблицы

Для создания простой таблицы используется команда CREATE TABLE. Ниже приведен пример для Oracle, для других тип number надо заменить на integer или double.


CREATE TABLE tblname (
id number,      
num number, -- число
-- фиксированная строка
fstr char(45),  
-- строка с переменным размером, но не больше 45
str varchar(45), 
birth date  -- дата
);

значения полей по умолчанию

После типа столбца можно задать дополнительные свойства столбца как значение по умолчанию и указать, возможно ли значение null. Для одних БД порядок принципиален (Oracle) для других нет (MySQL).


CREATE TABLE tblname (
id number,      
num number DEFAULT 3.14 NOT NULL, 
fstr char(45),  
str varchar(45), 
birth date    
);

ключи и ограничения

Обычно после перечисления столбцов в определении таблицы указывают дополнительные ограничения, например, ключи. Естественно, таблица, на которую ссылается внешний ключ должна существовать, а тип внешнего ключа должен совпадать с типом столбца на который ссылается. Например, для MySQL, если столбец внешнего ключа был определен как fk_key1 INTEGER, а первичный ключ таблицы tb как id INTEGER UNSIGNED, то таблица просто не будет создана. В некоторых базах ограничения можно задавать как свойство столбца, но на мой взгляд слишком длинно получается.


-- правильно для большинства реализаций SQL
CREATE TABLE tblname (
  id integer, 
  fstr char(45), 
  str varchar(45),
  -- в MySQL precision можно опустить
  num double precision, 
  birth date,
  fk_key1 integer, 

-- столбец id используем в качестве первичного ключа
CONSTRAINT pk_tblname PRIMARY KEY (id), 

-- уникальный ключ, т.е. значения в столбце fstr
-- будут уникальны
CONSTRAINT uk_tblname1 UNIQUE (fstr), 

-- ограничение на значение
CONSTRAINT tblname_numcheck CHECK (num<100.34), 

-- внешний ключ, в скобка столбец нашей таблицы
-- tb таблица, id столбец на которые ссылается
-- внешний ключ
CONSTRAINT fk_tblname FOREIGN KEY (fk_key1) 
REFERENCES tb(id) 
);

-- именовать ограничения не обязательно
-- в этом случае СУБД сгенерирует имена сама
CREATE TABLE tblname (
  id integer, 
  fstr char(45), 
  str varchar(45),
  num double,
  birth date,
  fk_key1 integer, 

PRIMARY KEY (id), 
UNIQUE (fstr), 
CHECK (num<100.34), 
FOREIGN KEY (fk_key1) 
REFERENCES tb(id) 
);

настройка внешнего ключа

Что произойдет, если послана команда на удаление записи в родительской таблице на которую ссылается внешний ключ? По умолчанию СУБД не позволит удалить такую запись и выведет сообщение об ошибке. Однако есть еще как минимум два возможных варианта, которые задаются при определении внешнего ключа. Первый, это установить значение внешнего ключа в null, естественно при определении столбца не должно быть указано NOT NULL. А второй вариант, удалить все записи в дочерней таблице, которые ссылаются на удаляемую запись в родительской таблице. Такое удаление называется каскадным.


-- определение ключа, с установкой в null 
-- при удалении записи на которую происходит ссылка
FOREIGN KEY (fk_key1) 
REFERENCES tb(id) 
ON DELETE SET NULL

-- определение ключа с каскадным удалением
FOREIGN KEY (fk_key1) 
REFERENCES tb(id) 
ON DELETE CASCADE

создание по выборке

Существует еще один способ создания таблицы - по выбранным данным. В этом случае новая таблица имеет не только те же столбцы, что и столбцы выборки, но и те же данные. Таким образом, легко сохранить большой объем данных в отдельной таблице.


-- сохраняем данные tblname в tblname1
create table tblname1 as select * from tblname

дополнительные параметры таблицы

В зависимости от СУБД после закрывающей скобки могут идти дополнительные опции, например управление табличным пространством. Если они не указаны, то используются значения по умолчанию.


-- пример для Oracle
CREATE TABLE tblname (
...
)
PCTFREE 10
PCTUSED 40
TABLESPACE users
STORAGE 
 (INITIAL 50K
  NEXT 50K
  MAXEXTENTS 10
  PCTINCREASE 25 
 );

--  пример для MySQL
CREATE TABLE tblname (
...
)
ENGINE = InnoDB;

Рейтинг@Mail.ru