П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие


Download 1.32 Mb.
Pdf ko'rish
bet43/94
Sana15.06.2023
Hajmi1.32 Mb.
#1487605
1   ...   39   40   41   42   43   44   45   46   ...   94
Bog'liq
Базы данных

3.5.2. Удаление строк 
Оператор удаления строк является простейшим из опера-
торов работы со строками. Он имеет следующий формат: 
DELETE FROM <таблица> [WHERE <условие отбора>] 
Если условие не указано, то этот оператор удаляет из таб-
лицы все строки, т. е. производит очистку таблицы, сохраняя ее 
структуру. Если же необходимо удалить из таблицы только часть 
строк, то используется условие отбора, которое представляет 
собой логическое выражение, составляемое по тем же правилам, 
что и для оператора 
SELECT
. В частности, оно может содержать 
вложенные операторы 
SELECT.
Для оператора 
DELETE
применяется 
тот же принцип, что и в предыдущем пункте: все условия 
вычисляются до начала выполнения оператора. 


69 
3.5.3. Замена строк 
Оператор замены данных в строках таблицы более сложен и
имеет следующий вид: 
UPDATE <таблица> SET <столбец1> = <значение1> [,…] 
[WHERE <условие отбора>] 
Оператор заменяет данные в указанных столбцах приводи-
мыми значениями. Условие определяет строки, в которых будет 
производиться такая замена (при его отсутствии замена произво-
дится во всех строках таблицы). Как и в предыдущих случаях, 
условие отбора может содержать вложенные операторы 
SELECT

При этом в условии могут присутствовать и другие таблицы. 
3.6. Создание таблиц 
До сих пор мы рассматривали действия с данными в табли-
цах, предполагая, что таблицы уже существуют в базе данных, 
так же, как и сама база данных. Перейдем теперь к рассмотрению 
операторов языка SQL, предназначенных для действий с табли-
цами в целом, а также для работы с другими объектами, содержа-
щимися в базе данных. 
Почти для всех таких объектов (включая таблицы) использу-
ются единые обозначения операторов: 
CREATE
– создание объекта, 
DROP
– удаление объекта, 
ALTER
– изменение свойств. После 
имени оператора следует тип объекта (например, 
TABLE
– табли-
ца), затем имя объекта и необходимые параметры. 
Попутно затронем вопрос о создании объекта верхнего уров-
ня – базы данных. Хотя в некоторых СУБД и существует опера-
тор 
CREATE DATABASE
, чаще база данных создается в графическом, 
а не текстовом режиме. Связано это с тем, что создание базы 
данных – операция достаточно редкая и исполняется посредством 
консольного, а не программного доступа. Для консоли же гра-
фический режим является более предпочтительным. Кроме того, 
форматы баз данных различаются настолько сильно, что стандар-
тизовать оператор 
CREATE DATABASE
не представляется возмож-
ным. Поэтому в стандартах языка он отсутствует, а роль сред-
ства, объединяющего таблицы в единое целое, играет оператор 
CREATE SCHEMA
. База данных играет в этом случае роль физиче-
ского хранилища объектов, а их логическая связь обеспечивается 
схемами информационных систем. 


70 
Если база данных уже создана, то таблицы в ней создаются с 
помощью оператора 
CREATE TABLE
, формат которого достаточно 
сложен. В простейшем варианте он выглядит так: 
CREATE TABLE <имя таблицы> (<имя столбца> <тип столбца> [,…]) 
Используемые типы столбцов очень сильно зависят от при-
меняемой СУБД, однако некоторые из них общеприняты. Это int 
или integer – целый тип, char(n) – символьная строка постоянной 
длины n, varchar(n) – символьная строка переменной длины до n 
символов, date – дата. При использовании других типов следует 
изучить соответствующие разделы документации по применяе-
мой СУБД. Подобная ситуация весьма затрудняет адекватный 
перенос базы данных, работающей под одной СУБД, в систему с 
другой СУБД. Чаще всего для этого необходимо использовать 
или разрабатывать специальные программные средства. 
В качестве примера приведем перечень типов данных
используемых в СУБД SQL Server 2008 Express. 
Числовые 
Символьные 
Дата/Время 
Специальные 
tinyint char(n) date 
geography 
smallint varchar(n) 
datetime geometry 
int text datetime2( 
n) 
hierarchyid 
bigint nchar(n) 
datetimeoffset(n) 
sql_variant 
decimal(n,m) nvarchar 
smalldatetime timestamp 
numeric(n,m) ntext 
time(n) 
uniqueidentifier 
real binary(n) 
xml 
float varbinary(n) 
bit image 
smallmoney 
money 
Аналогичная таблица для СУБД MySQL 5.5 выглядит совер-
шенно иначе. 
Числовые 
Символьные 
Дата/Время 
Специальные 
tinyint char date geometry 
smallint varchar datetime point 
mediumint tinytext 
timestamp linestring 
nt text 
time 
polygon 
bigint mediumtext 
year multipoint 
decimal longtext
multilinestring 
float binary 
multipolygon 
double varbinary 
geometrycollection 
real tinyblob 


71 
bit mediumblob 
bool blob 
serial longblob 
enum 
set 
Нетрудно видеть, что общие наименования типов составляют 
очень небольшое множество. Более того, тип timestamp вообще 
имеет разный смысл и находится в разных группах. Наоборот, 
близкие по смыслу типы имеют совершенно непохожие наимено-
вания, например image в SQL Server и blob в MySQL. Поэтому 
при практической разработке структуры базы данных просто 
необходимо ознакомиться с системой типов данных исполь-
зуемой СУБД. 
Перейдем теперь к более сложным элементам оператора 
CREATE TABLE. Они делятся на две группы: уточненные специ-
фикации столбцов и определения ограничений – синтаксических 
конструкций, которые позволяют запретить те или иные значения 
или комбинации значений в столбцах или в таблицах в целом. 
Расширенный формат оператора 
CREATE TABLE
может быть 
описан в следующем виде: 
CREATE TABLE <имя таблицы> (<определение столбца> 
[, {<определение столбца>|<табличное ограничение>}…) 
Обычно вначале записываются все определения столбцов, а 
затем все табличные ограничения. 
Определение столбца задается в виде 
<имя столбца> <тип данных> [DEFAULT <константа>] 
[<ограничение столбца>[…]] 
Константа в этом случае задает значение в соответствующем 
столбце, если при вставке строки этот столбец не указан в списке 
аргументов команды 
INSERT INTO

К ограничениям столбца относятся следующие: 
NOT null – запрет пустых значений 
PRIMARY KEY – первичный ключ; 
UNIQUE – альтернативный ключ; 
СНЕСК (<условие>) – условие проверки; 
ограничения связи таблиц. 
Ограничения PRIMARY KEY и UNIQUE запрещают опера-
ции вставки и замены строк, при которых в соответствующем 
столбце могут появиться дублирующиеся значения. При попытке 
выполнения таких действий СУБД инициирует сообщение об 


72 
ошибке. Разница между двумя этими типами ограничений 
заключается в том, что первичный ключ используется также при 
описании связи двух таблиц (см. далее). 
Условие проверки запрещает выполнение операций вставки 
или замены, при которых это условие окажется ложным. 
Наиболее сложным из ограничений столбца является ограни-
чение связи таблиц, иногда называемое ограничением целостно-
сти. Для его описания столбец в создаваемой командой CREATE 
TABLE таблице, которая в этом случае выступает в качестве до-
черней, сопоставляется первичному ключу родительской табли-
цы. Столбец же в дочерней таблице называется внешним ключом 
(FOREIGN KEY). Синтаксис этого ограничения следующий: 
FOREIGN KEY REFERENCES <родительская таблица> 
[ON DELETE {NO ACTION|CASCADE|SET null|SET DEFAULT}] 
[ON UPDATE {NO ACTION|CASCADE|SET null|SET DEFAULT}] 
Смысл связи таблиц состоит в том, что СУБД запрещает 
вставку в дочернюю таблицу строки с предлагаемым значением 
внешнего ключа, если в родительской таблице отсутствует строка 
с таким же значением первичного ключа. Так, в таблицу 
Sess
будет запрещена вставка строки с номером студенческого билета, 
которого нет в таблице 
Stud
, поскольку это означало бы сдачу 
экзамена несуществующим студентом. 
Несколько сложнее обстоит дело с удалением и заменой 
строк в родительской таблице. При этих действиях некоторые 
строки в дочерней таблице могут оказаться «сиротами» – не 
иметь соответствующих им строк в родительской таблице. Воз-
можные пути разрешения этой ситуации описываются двумя 
последними строками синтаксиса ограничения связи. При выборе 
[NO ACTION] никаких действий выполняться не будет, и «сиро-
ты» таковыми и останутся. Выбор [CASCADE] (каскадное уда-
ление или изменение) предписывает удалить все дочерние строки 
одновременно с родительскими либо заменить значение в соот-
ветствующих столбцах на значение в родительской строке. [SET 
DEFAULT] назначает всем «сиротам» заранее определенного 
родителя, а [SET null] оставляет его неопределенным. 
Табличные ограничения используются в тех случаях, когда 
ключи состоят из нескольких столбцов. В этом случае список 
столбцов указывается в круглых скобках после названия типа 


73 
ключа. Табличное ограничение CHECK может включать 
несколько столбцов. 
Важной особенностью ограничений является то, что им мо-
жет быть присвоено имя с помощью конструкции CONSTRAINT 
<имя ограничения>, используемой перед описанием ограничения. 
Если же эта конструкция не использована, то СУБД присваивает 
ограничению некоторое собственное системное имя, которое в 
принципе доступно для просмотра. В дальнейшем имя 
ограничения может быть использовано при изменении описания 
таблицы командой ALTER TABLE. 
В качестве примера приведем описание использовавшихся 
нами ранее таблиц 
Stud
и 
Sess

CREATE TABLE Stud ( 
nsb int PRIMARY KEY
fam varchar(20) NOT null, 
im varchar(20) DEFAULT '', 
ot varchar(20) DEFAULT '', 
grp char(10) NOT null, 
dr date CHECK (dr BETWEEN '01.01.1930' 
AND '01.01.2000'), 
gor varchar(20), 
adr varchar(100), 
stip int 

CREATE TABLE Sess ( 
nsb int , 
disc varchar(60), 
prep varchar(20), 
ball int, 
PRIMARY KEY (nsb,disc), 
CONSTRAINT sess_stud FOREIGN KEY (nsb) REFERENCES Stud 

Отметим, что, несмотря на общее единство подходов к струк-
туре команды CREATE TABLE, конкретные ее реализации в 
различных СУБД могут заметно отличаться друг от друга. 

Download 1.32 Mb.

Do'stlaringiz bilan baham:
1   ...   39   40   41   42   43   44   45   46   ...   94




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling