410013796724260
• Webmoney
R335386147728
Z369087728698
Create TableНаряду с описанием оператора создания таблицы "CREATE TABLE" на странице представлена следующая информация :
Создание таблицы "Create Table" относится к области создания объектов DDL (Data Definition Language - язык определения данных). Синтаксис create table sqlcreate table [schema_name.]table_name ( {columns_definitions} ) [опции_таблицы]; - schema_name - table_name columns_definitions - опции_таблицы Пример create tableСледующий код определяет создание простой таблицы пользователей в схеме beeline. create table beeline.users ( id int NOT NULL, name varchar(255) NOT NULL, sex char(1) NOT NULL, address varchar(255) NULL, city varchar(255) NULL, birthday date NULL ); Особенности postgres create tableВ операторе create table СУБД PostgreSQL можно использовать в наименованиях символы как в верхнем, так и в нижнем регистре. В этом случае наименование следует заключать в двойные кавычки. Наименование схемы также следует указывать в двойных кавычках. -- создание таблицы в СУБД PostgreSQL create table "beeline".users ( "Id" int NOT NULL, "Name" varchar(255) NOT NULL, ... ) WITH ( OIDS=FALSE ); В примере в качестве опции таблицы определяется необходимость использования серверного идентификатора OIDS. Особенности mysql create tableВ операторе create table СУБД MySQL можно дополнительно указать тип таблиц ENGINE, кодировку CHARSET, сортировку COLLATE, комментарий к таблице COMMENT. -- создание таблицы в СУБД MySQL create table beeline.users ( idi int NOT NULL, name varchar(255) NOT NULL, ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT = "Таблица пользователей"; Наибольшее распространение в MySQL получили следующие типы ENGINE :
Первичный ключ, PRIMARY KEYПервичный ключ - это ограничение, позволяющее однозначно идентифицировать каждую запись в таблице SQL. Если PRIMARY KEY включает одно поле таблицы, то его называют простым ключом. В случае включения в PRIMARY KEY нескольких полей, его называют составным ключом. Поля таблицы, используемые в первичных ключах, не могут позволять нулевые значения и должны быть обьявлены NOT NULL. PRIMARY KEY MySQL, PostgreSQLПервичный ключ в СУБД MySQL не имеет наименования. Пример создания таблицы с PRIMARY KEY: -- создание таблицы в СУБД MySQL, PostgreSQL create table beeline.users ( id int NOT NULL, name varchar(255) NOT NULL, sex char(1) NOT NULL, address varchar(255) NULL, city varchar(255) NULL, birthday date NULL, PRIMARY KEY (city, id) ); При создании таблицы СУБД PostgreSQL автоматически сгенерирует наименование первичного ключа. Простой первичный ключ - Oracle, MS SQL, PostgreSQLСинтаксис CREATE TABLE с простым PRIMARY KEY допускает определение первичного ключа вместе с описанием поля таблицы. Пример создания таблицы с простым PRIMARY KEY: -- создание таблицы с простым PRIMARY KEY в СУБД Oracle, MS SQL, PostgreSQL. create table beeline.users ( id int [ NOT NULL ] PRIMARY KEY, name varchar(255) NOT NULL, ... ); При создании таблицы СУБД автоматически сгенерирует наименование первичного ключа. Составной первичный ключ - Oracle, MS SQL, PostgreSQLСинтаксис CREATE TABLE с составным PRIMARY KEY обуславливает необходимость использования оператора CONSTRAINT. Пример создания таблицы с составным PRIMARY KEY: -- создание таблицы с простым PRIMARY KEY в СУБД Oracle, MS SQL, PostgreSQL. create table beeline.users ( id int NOT NULL, name varchar(255) NOT NULL, ... , CONSTRAINT pkUserName PRIMARY KEY (name, id) ); CONSTRAINT описания первичного ключа включает наименование PRIMARY KEY и список полей. При описании первичного ключа с помощью CONSTRAINT можно использовать одно или несколько полей. Удаление таблицы, DROP TABLEУдаление таблиц осуществляется с помощью оператора DROP TABLE. Нельзя удалять таблицу, на которую ссылаются внешние ключи; сначала следует удалить ссылающееся ограничение FOREIGN KEY или ссылающуюся таблицу. Синтаксис удаления таблицы имеет следующий вид : DROP TABLE [IF EXISTS] [schema_name.]table_name [ CASCADE | RESTRICT ] - IF EXISTS - CASCADE - RESTRICT Особенности DROP TABLE СУБД MS SQLСУБД MS SQL позволяет одним оператором drop table удалять сразу несколько таблиц, разделенных символом запятой. CASCADE и RESTRICT в синтаксисе не предусмотрены. Особенности DROP TABLE СУБД OracleСУБД Oracle при выполнении drop table не сразу освобождает пространство, занимаемое таблицей. Сервер БД переименовывает таблицу и помещает ее в корзину, где таблица позже может быть восстановлена с помощью инструкции FLASHBACK TABLE. Если требуется немедленно освободить занимаемое таблицей пространство, то в инструкцию drop table необходимо включить ключевое слово "PURGE". Откат назад инструкции "drop table" с предложением "PURGE" невозможен, и таблицу невозможно будет восстановить. Для безвозратного удаления таблицы в можно использовать следующий синтаксис drop table oracle : DROP TABLE [schema_name.]table_name [ PURGE ] Добавление и изменение данных - INSERT, UPDATEДанные в таблицу вводятся и обновляются с помощью DML команд insert и update. Добавление записи в таблицу, INSERT INTOОператор insert into позволяет добавить строки в таблицу. Значения можно вставлять либо перечислением с использованием оператора insert into values, либо c использованием оператора insert into select. Примеры использования "insert into ... values" и "insert into ... select". -- добавление записи с использованием перечислений значений insert into [schema_name.]table_name ([<Имя столбца>, ... ]) values (<Значение>,...) -- добавление записи с использованием оператора select insert into [schema_name.]table_name select <имя столбца1>,... from <название таблицы> [where <condition>] Оператор insert into select может включать ключевое слово where с условиями для фильтрации данных. Следует отметить, что СУБД не обращает внимания на названия колонок, которые содержатся в операторе "insert into select"; для нее важно только порядок типов значений. Копирование данных из одной таблицы в другую, SELECT ... INTOИногда при работе с БД возникает необходимость в создании копий одной или нескольких таблиц. Чтобы сделать полную копию таблицы предусмотрен отдельный оператор select into. Пример использования оператора select into. select * into [schema_name.]table_name_new from [schema_name.]table_name_old В отличие от конструкции insert into select, когда данные добавляются в существующую таблицу, конструкция select into ... from ... копирует данные в новую таблицу. Можно сказать, что первая конструкция импортирует данные, а вторая - экспортирует. При использовании конструкции "select into ... from ..." необходимо учитывать следующее :
Обновление данных, UPDATE TABLEСинтаксис оператора обновления данных таблицы update table имеет следующий вид : update table_name set column1 = value1, column2 = value2,... [where some_column1 = some_value1 [and | or] some_column2 = some_value2 ...]; table_name - наименование таблицы. При необходимости в наименовании таблицы можно указать и наименование схемы БД : [schema_name.]table_name . Одним SQL оператором update table set можно обновить одну или несколько строк таблицы. Для обновления нескольких полей записи необходимо после ключевого слова "set" указать поля и их новые значения в формате "ключ=значение", разделенных запятой. В качестве значения поля можно использовать подзапрос "select ...". Для одновременного изменения нескольких записей таблицы необходимо использовать оператор обновления с условиями update where. Оператор условий "where" выполняет функцию фильтрации - выделения определенных записей таблицы, указанных в условии. Фунции удаления данных, DELETE SQLDML-операция delete удаляет записи из таблицы. Критерий отбора записей для удаления определяется выражением where. В случае, если критерий отбора не определён, выполняется удаление всех записей. Особенности использования оператора delete :
Синтаксис команды удаления данных sql delete where : delete from [schema_name.]table_name [ where <Условие отбора записей> ]; В "условиях отбора записей" может быть использован подзапрос SELECT. Пример sql delete данных с использованием подзапроса : delete from goods where owner_id in (select id from managers where region like 'Моск%'); Удаление всех записей из таблицы при наличии внешних ключей и использовании механизма транзакций может занять продолжительное время. Для быстрой и полной очистки таблицы может быть использована операция truncate. Фунции очистки таблицы, TRUNCATE TABLEDDL-операция truncate table sql выполняет удаление всех строк в таблице. Логически truncate повторяет операцию DELETE без условия WHERE. Но имеются существенные отличия. Синтаксис команды удаления truncate : TRUNCATE TABLE [schema_name.]table_name; Основные отличия операторов truncate и delete, которые могут присутствовать в различных реализациях СУБД :
Вообще говоря, реализация оператора truncate может зависеть от выбора конкретной СУБД. Поэтому в каждом случае необходимо изучать документацию выбранной системы. Особенности truncate PostgreSQLКлючевое слово TABLE в синтаксисе очистки таблицы truncate postgresql является необязательным. Следующая команда удаляет все записи из таблицы authors базы данных PostgreSQL. TRUNCATE authors; Особенности truncate OracleПри использовании truncate table, можно столкнуться с такой ошибкой: ORA-02266: unique/primary keys in table referenced by enabled foreign keysЭта ошибка появляется, если на таблицу, которую необходимо очистить, ссылаются другие таблицы, т.е. используется foreign key. Эта ошибка появляется даже в том случае, если в таблицах нет записей. Чтобы выполнить очистку такой таблицы перед выполнением TRUNCATE TABLE надо отключить все foreign keys, после чего ключи снова включить. -- отключение foreign key alter table table_name -- таблица, в которой определен ключ disable constraint constraint_name; -- foreign key; -- включение foreign key alter table table_name -- таблица, в которой определен ключ enable constraint constraint_name; -- foreign key; Чтобы найти все foreign keys в Oracle, можно выполнить следующий запрос : select constraint_name, table_name from user_constraints where r_constraint_name = ( select constraint_name from user_constraints where constraint_type = 'P' and table_name = upper('наименование таблицы') ) Временные таблицы, temporary tableВременные таблицы temporary table используются для хранения данных, которые относятся к одной сессии или одной транзакции. То есть, данные во временной таблицы доступны только в той сессии, в которой таблица была создана и данные в таблицу добавлены. Oracle temporary tableПрименение temporary table в Oracle существенно отличается от применения временных таблиц в других СУБД. В Oracle временная таблица - это тот же DDL обьект со всеми ограничениями. -- синтаксис создания temporary table в Oracle CREATE GLOBAL TEMPORARY TABLE [SCHEMA_NAME].TABLE_NAME ( . . . ON COMMIT [DELETE | RESERVE] ROWS; ОN COMMIT DELETE ROWS используется во временных таблицах, данные которой существуют в пределах одной транзакции. Oracle удаляет все строки временной таблицы после завершения транзакции, то есть после выполнения команды COMMIT. Данная инструкция подразумевается по умолчанию, то есть при создании временной таблицы - она всегда будет ОN COMMIT DELETE ROWS. ОN COMMIT RESERVE ROWS используется во временных таблицах, данные которой существуют в пределах одной сессии. Если попробовать прочитать временную таблицу из другой сессий, то таблица будет пустой. СУБД Oracle удаляет все строки из временной таблицы после завершения сессии. Пример создания temporary table с использованием подзапроса. CREATE GLOBAL TEMPORARY TABLE CITIES_MOSCOW ON COMMIT RESERVE ROWS AS SELECT * FROM CITIES WHERE REGION like '%MOSCOW%' MS SQL temporary tableВременные таблицы в СУБД MS SQL хранятся в базе данных tempdb и автоматически удаляются, когда необходимость в них отпадает. Можно создавать два вида временных таблиц: локальные и глобальные. Они отличаются друг от друга именами, видимостью и доступностью. Имена локальных временных таблиц начинаются с одного символа '#'; они видны только текущему соединению пользователя и удаляются, когда пользователь отключается от SQL Server. Имена глобальных таблиц начинаются с двух символов '##'; они видны любому пользователю и удаляются, когда все пользователи, которые на них ссылаются, отключаются от SQL Server. Если во время сессии создается локальная временная таблица #users, с ней можно будет работать только в данной сессии. Таблица будет удалена при завершении сессии. Если создать глобальную временную таблицу ##users, с ней сможет работать любой пользователь базы данных. Если никто из пользователей не будут работать с этой таблицей, она будет удалена после завершения сеанса. Если один из пользователей обратится к созданной таблице, то SQL Server удалит ее, когда произойдет отключение и другие сессии перестанут активно к ней обращаться. -- синтаксис создания temporary table в MS SQL create table #t ( id int, val1 varchar(10), val2 datetime default getdate() ); MySQL temporary tableВ MySQL для создания temporary table необходимо в оператор create table вставить ключевое слово TEMPORARY. -- синтаксис создания temporary table в MySQL CREATE [TEMPORARY] TABLE [IF NOT EXISTS] ( . . . ); Временная таблица удаляется автоматически по завершению соединения. Имя temporary table действительно только в течение соединения. Это означает, что в двух разных соединениях могут использоваться временные таблицы с одинаковыми именами без конфликта друг с другом или с постоянной таблицей с тем же именем. Постоянная одноименная таблица будет скрыта, пока не будет удалена ее "тёзка" (временная таблица). Но к постоянной таблице можно обращаться с дополнительным использованием наименования схемы (базы данных). Ключевые слова IF NOT EXISTS необходимо использовать для того, чтобы не возникала ошибка, если указанная таблица уже существует. Следует учитывать, что при этом не проверяется идентичность структур этих таблиц. Postgres temporary tableВ Postgres для создания temporary table необходимо в оператор create table вставить ключевое слово TEMPORARY или TEMP. Синтаксис аналогичен MySQL -- синтаксис создания temporary table в PostgresSQL CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS] ( . . . ); |