Опубликован: 10.09.2004 | Уровень: для всех | Доступ: свободно | ВУЗ: Ульяновский государственный университет
Лекция 9:

Определение ограничений целостности

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Удаление таблицы

Удаление таблицы выполняется командой:

DROP TABLE имя_таблицы

Удалить можно любую таблицу, даже системную. К этому вопросу нужно подходить очень осторожно. Однако удалению не подлежат таблицы, если существуют объекты, ссылающиеся на них. К таким объектам относятся таблицы, связанные с удаляемой таблицей посредством внешнего ключа. Поэтому, прежде чем удалять родительскую таблицу, необходимо удалить либо ограничение внешнего ключа, либо дочерние таблицы. Если с таблицей связано хотя бы одно представление, то таблицу также удалить не удастся. Кроме того, связь с таблицей может быть установлена со стороны функций и процедур. Следовательно, перед удалением таблицы необходимо удалить все объекты базы данных, которые на нее ссылаются, либо изменить их таким образом, чтобы ссылок на удаляемую таблицу не было.

CREATE TABLE Товар
(КодТовара INT IDENTITY(1,1) PRIMARY KEY,
 Название  VARCHAR(50)       NOT NULL UNIQUE,
 Цена      MONEY             NOT NULL,
 Тип       VARCHAR(50)       NOT NULL,
 Сорт      VARCHAR(50)       NOT NULL 
   CHECK(сорт in('первый','второй','третий')),
 Город     VARCHAR(50)       NOT NULL,
 Остаток   INT               
   CHECK(остаток>=0))
Пример 9.1. Создание родительской таблицы Товар с ограничениями.
CREATE TABLE  Клиент
(КодКлиента INT IDENTITY(1,1) PRIMARY KEY,
 Фирма 	    VARCHAR(50)       NOT NULL,
 Фамилия    VARCHAR(50)       NOT NULL,
 Город      VARCHAR(50)       NOT NULL,
 Телефон    CHAR(10)          NOT NULL 
   CHECK(Телефон LIKE 
     '[1-9][0-9]-[0-9][0-9]-[0-9][0-9]'))
Пример 9.2. Создание родительской таблицы Клиент с ограничениями.
CREATE TABLE Сделка
(КодСделки  INT IDENTITY(1,1) PRIMARY KEY,
 КодТовара  INT       NOT NULL,
 КодКлиента INT       NOT NULL, 
 Количество INT       NOT NULL DEFAULT 0,
 Дата       DATETIME  NOT NULL DEFAULT 
                      GETDATE(),
CONSTRAINT  fk_Товар
FOREIGN KEY(КодТовара)  REFERENCES Товар,
CONSTRAINT  fk_Клиент
FOREIGN KEY(КодКлиента) REFERENCES Клиент)
Пример 9.3. Создание дочерней таблицы Сделка с ограничениями.
CREATE TABLE Склад
(КодТовара     INT PRIMARY KEY,
 Остаток       INT)
Пример 9.4. Создание таблицы Склад.
ALTER TABLE Сделка DROP CONSTRAINT fk_Товар
Пример 9.5. Удаление ограничения внешнего ключа.
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар
FOREIGN KEY (КодТовара) REFERENCES товар 
ON UPDATE NO ACTION ON DELETE NO ACTION
Пример 9.6. Добавление ограничения внешнего ключа, реализующего декларативную ссылочную целостность.
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар
FOREIGN KEY (КодТовара) REFERENCES Товар 
ON UPDATE CASCADE ON DELETE CASCADE
Пример 9.7. Добавления ограничения внешнего ключа, реализующего каскадные обновления и изменения.
ALTER TABLE Товар ADD Налог AS Цена*0.05 
ALTER TABLE Товар DROP COLUMN Налог
Пример 9.8. Пример создания и удаления вычисляемого поля.

Пусть создана таблица без ограничений:

CREATE TABLE Товар
(КодТовара     INT,
 Название      VARCHAR(20),
 Тип           VARCHAR(20),
 Дата          DATETIME,
 Цена          MONEY,
 Остаток       INT)

Рассмотрим примеры внесения в таблицу всевозможных ограничений.

Пример 9.9. Поле КодТовара необходимо сделать первичным ключом. Выполнение следующей команды будет отвергнуто, поскольку поле КодТовара допускает внесение значений NULL.

ALTER TABLE Товар ADD CONSTRAINT pk1 
PRIMARY KEY(КодТовара)
Пример 9.9. Поле КодТовара необходимо сделать первичным ключом.

Сначала нужно изменить объявление столбца КодТовара, запретив внесение значений NULL:

ALTER TABLE Товар 
ALTER COLUMN КодТовара INT NOT NULL

И только потом создать ограничение первичного ключа:

ALTER TABLE Товар ADD CONSTRAINT pk1 
PRIMARY KEY(КодТовара)

Пример 9.10. Удалить столбец целого типа и добавить столбец-счетчик.

ALTER TABLE Товар DROP  COLUMN КодТовара
ALTER TABLE Товар ADD 
    КодТовара INT IDENTITY(1,1)
Пример 9.10. Удаление столбца целого типа и добавление столбца-счетчика.

Пример 9.11. Добавить ограничение первичного ключа.

ALTER TABLE Товар ADD CONSTRAINT pk1 
PRIMARY KEY(КодТовара)
Пример 9.11. Добавление ограничений первичного ключа.

Пример 9.12. Изменить столбец, добавив ограничение NOT NULL.

ALTER TABLE Товар ALTER COLUMN 
    Название VARCHAR(40) NOT NULL
Пример 9.12. Добавление ограничения NOT NULL.

Пример 9.13. Добавить ограничение уникальности значения.

ALTER TABLE Товар ADD CONSTRAINT 
    u1 UNIQUE(Название)
Пример 9.13. Добавление ограничения уникальности значения.

Пример 9.14. Создать умолчание и добавить умолчание столбцу.

CREATE DEFAULT df1 AS 0
sp_bindefault 'df1', 'Товар.Остаток'

CREATE DEFAULT df2 AS GETDATE()
sp_bindefault 'df2', 'Товар.Дата'
Пример 9.14. Создание и добавление умолчания столбцу.

Пример 9.15. Создать правило и добавить правило столбцу.

CREATE RULE r1 AS @m IN 
    ('мебель','бытовая химия','косметика')
sp_bindrule 'r1','Товар.Тип'
Пример 9.15. Создание и добавление правила столбцу.
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Ирина Мельник
Ирина Мельник

Здравствуйте, записалась на курс основы SQL, подскажите, стоимость курса.