--Первичный ключ или primary key — в реляционной модели данных один из потенциальных ключей отношения, выбранный в качестве основного ключа
--Первичный ключ это - столбец, значения которого во всех строках уникальны
--В таблице возможно наличие только одного ограничения по первичному ключу
--Все столбцы с ограничением PRIMARY KEY должны иметь признак NOT NULL
--Если допустимость значения NULL не указана, то для всех столбцов c ограничением PRIMARY KEY устанавливается признак NOT NULL
--Создание первичного ключа в новой таблице
CREATE TABLE test.dbo.keys
(
ID int NOT NULL,
name VARCHAR(MAX),
email VARCHAR(MAX)
CONSTRAINT PK_T_ID PRIMARY KEY CLUSTERED (ID)
);
--Удаление первичного ключа
ALTER TABLE test.dbo.keys DROP CONSTRAINT PK_T_ID;
--Создание первичного ключа в существующей таблице
ALTER TABLE test.dbo.keys ADD CONSTRAINT PK_T_ID PRIMARY KEY CLUSTERED (ID);
--Ограничение уникальности гарантирует, что в определенных столбцах, не участвующих в первичном ключе, не встречаются повторяющиеся значения
--Создание ограничения уникальности автоматически приводит к созданию соответствующего уникального индекса
--Создание ограничения уникальности
CREATE TABLE test.dbo.un
(
UN int NOT NULL,
name VARCHAR(MAX),
email VARCHAR(MAX)
CONSTRAINT AK_UN UNIQUE(UN),
);
--Удаление ограничения уникальности
ALTER TABLE test.dbo.un DROP CONSTRAINT AK_UN;
--Создание ограничения уникальности в существующей таблице
ALTER TABLE test.dbo.un ADD CONSTRAINT AK_UN UNIQUE (UN);
--Создание связей внешнего ключа. Связь создается между двумя таблицами, чтобы связать строки одной таблицы со строками другой
--Создание внешнего ключа в новой таблице
--Предложения ON DELETE CASCADE и ON UPDATE CASCADE обеспечевают распространение изменений, вносимых в таблицу keys на таблицу fk
--ON DELETE CASCADE - при удалении строк и ON UPDATE CASCADE при изменении соответственно
CREATE TABLE test.dbo.fk
(
TID int NOT NULL,
name VARCHAR(MAX),
email VARCHAR(MAX)
CONSTRAINT PK_T_TID PRIMARY KEY NONCLUSTERED(TID),
CONSTRAINT FK_T_TID FOREIGN KEY(TID)
REFERENCES test.dbo.keys(ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
--Удаление внешнего ключа
ALTER TABLE test.dbo.fk DROP CONSTRAINT FK_T_TID;
--Создание внешнего ключа в существующей таблице
--ADD CONSTRAINT таблица_с_внешним_ключом FOREIGN KEY(столбец) REFERENCES основная_таблица(столбец)
ALTER TABLE test.dbo.fk
ADD CONSTRAINT FK_T_TID FOREIGN KEY(TID)
REFERENCES test.dbo.keys(ID)
ON DELETE CASCADE
ON UPDATE CASCADE
;
--Проверим работу CASCADE
--Добавим тестовые данные
INSERT INTO test.dbo.keys VALUES (1, '1', '1')
INSERT INTO test.dbo.fk VALUES (1, '1', '1')
--При изменении данных в таблице keys, изменения благодаря ON UPDATE CASCADE внесутся в таблицу fk
UPDATE test.dbo.keys SET ID = 7 WHERE id = 1
SELECT * FROM test.dbo.fk
--При удалении данных в таблице keys, изменения благодаря ON DELETE CASCADE внесутся в таблицу fk
DELETE test.dbo.keys WHERE ID = 7
SELECT * FROM test.dbo.fk
--Создание ограничений
CREATE TABLE test.dbo.ch
(
i int
CONSTRAINT chi CHECK (i >= 1)
);
--Удаление ограничений
ALTER TABLE test.dbo.ch DROP CONSTRAINT chi;
--Создание ограничений в созданной таблице
ALTER TABLE test.dbo.ch
ADD CONSTRAINT chi CHECK (i >= 1);
--Проверим работу ограничения
INSERT INTO test.dbo.ch VALUES (1)
INSERT INTO test.dbo.ch VALUES (-1)
SELECT * FROM test.dbo.ch
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!