SQL Server (SQL Server Management Studio)

SSMS Logo

Отличия:

SQL ServerLocalhost
IDENTITY(1,1)auto_increment

Термины:

  • New Queary – новый запрос;
  • * – все поля;
  • Execute – запустить;

Задание SQL по запросам в сервере:

  1. Таблица laps:
CREATE TABLE laps(
	lapsID INT IDENTITY(1,1) PRIMARY KEY,
	lapsNimi VARCHAR(50),
	synniaasta INT
);

2. Таблица lemmikloom и связывание с таблицей laps:

CREATE TABLE lemmikloom(
	ID INT IDENTITY(1,1) PRIMARY KEY,
	loomanimi VARCHAR(50),
	peremeheID INT,
	kaal SMALLINT,
	FOREIGN KEY (peremeheID) REFERENCES laps(lapsiID)
	)

3. Добавление записей в таблице – нажимаем на таблицу (пр. кнопкой мыши) и edit top 200 rows.

4. Запрос полного ID ребёнка и его домашнего животного:

(Выводим из 2-х таблиц laps и lemmikloom все поля (*) )

SELECT * 
FROM laps, lemmikloom
WHERE lemmikloom.peremeheID=laps.lapsID

5. Запрос имени, года рождения ребенка и имени его питомца/ домашнего животного:

SELECT laps.lapsNimi, laps.synniaasta, lemmikloom.loomanimi
FROM laps, lemmikloom
WHERE lemmikloom.peremeheID=laps.lapsID

6. Выводим все значения (*) из таблицы lemmikloom с весом, равным 7 или 8 кг, по порядку имен:

SELECT *
FROM lemmikloom
WHERE kaal IN (7, 8)
ORDER BY loomanimi

7. Выводим те имена и вес животных (из таблицы lemmikloom), чьё имя содержит “Cat”:

SELECT loomanimi, kaal
FROM lemmikloom
WHERE loomanimi LIKE '%Cat%'

8. Выводим наибольший(MAX) вес из таблицы lemmikloom:

SELECT MAX(kaal) AS MaxWeight
FROM lemmikloom

9. Выводим средний вес животных, сортируя по группе с именами (их именам):

SELECT loomanimi, AVG(kaal) AS AvgWeight
FROM lemmikloom
GROUP BY loomanimi

10. Обновим/ изменим таблицу – вес животных будет больше в 2 раза:

UPDATE lemmikloom
SET kaal = kaal*2
При запуске запроса, выводится “повлияло на 6 рядов”
Можем увидеть, как наши значения (вес) в таблице обновились

11. Как добавить новые значения в таблицу (добавить новую запись/ заполнить её):

INSERT INTO lemmikloom (loomanimi, peremeheID, kaal)
VALUES ('Fluffy Dog', 1, 4);
INSERT INTO lemmikloom (loomanimi, peremeheID, kaal)
VALUES ('Bullya Dog', 4, 5);
Можем увидеть новые записи в конце нашей таблицы

Создание триггеров:

В SQL Сервере:

В задании, при помощи триггера автоматически заполняется таблица logi, в которой будет фиксироваться в какое время и какое действие выполнялось в таблице linnad.

  1. Создаем таблицу города и регистрирующихся (отчёт) регистрации числа, времени, пользователя и данных:
Create table linnad(
linnID int IDENTITY(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);

Create table logi(
id int IDENTITY(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed varchar(200),
Kasutaja varchar(50)
)

2. Создаём триггер с автоматической записью городов:

CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT into logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), 'Linn on lisatud', inserted.linnanimi, USER
FROM inserted

3. Заполнение таблицы и запрос на отображение:

INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tallinn', 600000);
SELECT * FROM linnad;

SELECT * FROM logi

4. Команда на добавление уникальных записей в таблицу:

ALTER TABLE linnad add constraint yksik unique (linnanimi)
Если хотим добавить одну и ту же запись

5. Ещё один триггер, но на удаление:

CREATE TRIGGER linnaKustutamine
ON linnad
FOR DELETE
AS
INSERT into logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), 'Linn on kustutatud', deleted.linnanimi, USER
FROM deleted

6. Удаление из таблицы, строчки:

DELETE from linnad
WHERE linnanimi='Tallinn';
SELECT * from linnad;
SELECT * from logi

7. Сoздание Concat – объёдинение данных из нескольких полей:

USE [Burtassova_trigger]
GO
/****** Object:  Trigger [dbo].[linnaLisamine]    Script Date: 04.10.2021 12:44:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad]
FOR INSERT
AS
INSERT into logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), 'Linn on lisatud',
Concat(inserted.linnanimi, ', ', inserted.rahvaarv), USER
FROM inserted

8. Триггер на обновление:

CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT into logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), 'Linn on uendatud',

CONCAT(deleted.linnanimi, 'uus linnanimi', inserted.linnanimi),
USER
FROM deleted INNER JOIN inserted ON
deleted.linnID=inserted.linnID

9. Как обновить (запись):

UPDATE linnad
SET linnanimi='Narva55'
WHERE linnanimi='Narva';
SELECT * from linnad;

SELECT* from logi

В LocalHost:

  1. Создание таблиц linnad и logi:
CREATE TABLE linnad(
	linnID INT AUTO_INCREMENT PRIMARY KEY,
	linnanimi VARCHAR(15),
    rahvaarv INT
);

CREATE TABLE logi(
	ID INT AUTO_INCREMENT PRIMARY KEY,
    aeg DATETIME,
	toiming VARCHAR(100),
    andmed VARCHAR(200),
    kasutaja VARCHAR(50)
)

2. Создаём триггер с автоматической записью городов (автоматическая запись в logi):

  • Выбираем в какой таблице и нажимаем на вкладку Triggers
  • Затем Add trigger
  • Заполняем:
INSERT INTO logi(aeg, toiming, andmed)
Values (Now(), 'uus linn on lisatud',
NEW.linnanimi)

  • Готово!

3. Теперь, если мы добавим запись в linnad, она отобразиться в logi:

4. Команда на добавление уникальных записей в таблицу:

ALTER TABLE linnad add constraint yksik unique (linnanimi)
Теперь, если мы попытаемся сделать такую же запись (конкретно имя), то нам выдаст ошибку

5. Триггер на удаление (с отображением действий в logi):

В действии обязательно указываем DELETE
INSERT INTO logi(aeg, toiming, andmed)
VALUES (Now(), 'linn on kustutatud', OLD.linnanimi)
  • Триггер добавлен:
  • Проверим, удалив один из наших городов:
DELETE FROM linnad
WHERE linnID=5
Как видим, запись удалена

6. Сoздание Concat – объёдинение данных из нескольких полей:

  • Изменим предыдущий триггер на добавление:
INSERT INTO logi(aeg, toiming, andmed)
Values (Now(),'uus linn on lisatud',
Concat (NEW.linnanimi,
       ' rahvaarv: ',
       New.rahvaarv)
       )
  • Проверим:
INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Parnu', 50000)
В записи теперь отображаются ведённые данные

7. Триггер на обновление:

  • Добавляем триггер:
INSERT INTO logi(aeg, toiming, andmed)
VALUES (Now(), 'linnanimi on muudetud', 
      CONCAT(
         ' muudetud linnanimi ',
          OLD.linnanimi,
          ', uus linnanimi ',
          New.linnanimi)
        )
  • Проверка:
UPDATE linnad
SET linnanimi= 'Parnuu'
WHERE linnID=6


Самостоятельное задание:

  1. Создадим свою таблицу для автозаполнения уже в существующей базе данных:
CREATE TABLE logitabel(
	ID INT AUTO_INCREMENT PRIMARY KEY,
    aeg DATETIME,
	toiming VARCHAR(100),
    andmed VARCHAR(200),
    kasutaja VARCHAR(50)
)
  • Добавляем все нужные триггеры:
  1. Триггер на автоотображение записей в logitabel, при добавлении новой записи в таблицу auto:
INSERT INTO logitabel(aeg, toiming, andmed)
Values (Now(), 'uus auto on lisatud',
NEW.Mudell)

Результат при добавлении новой записи в таблицу auto:

2. Триггер на удаление:

INSERT INTO logitabel(aeg, toiming, andmed)
VALUES (Now(), 'auto on kustutatud', OLD.Mudell)

Результат при удалении машины:

3. Триггер на отслеживание изменённых данных:

INSERT INTO logitabel(aeg, toiming, andmed)
VALUES (Now(), 'auto mudell on muudetud',
CONCAT(
' muudetud auto mudell ',
OLD.mudell,
', uus mudell ',
New.mudell)
)

Результат при обновлении информации:

Cами таблицы:

Использовались большие значения VARCHAR на всякий случай

Новая работа с триггерами (с разными пользователями):

Создадим 2 таблицы – uudised и uudisedlogi:

uudised
uudisedlogi

Создаём 1 триггер на добавление записей:

INSERT INTO uudisedlogi(kuupaev, uudis, kasutaja)
Values (Now(), concat(NEW.uudisTeema,', ' ,NEW.uudisKirjeldus), USER())

Добавим новую запись и проверим её в uudisedlogi:

Триггер 2, на удаление записи:

INSERT INTO uudisedlogi(kuupaev, uudis, kasutaja)
Values (Now(), 
        concat('kustutatud: ',OLD.uudisTeema,', ' ,OLD.uudisKirjeldus), 
        USER())

Проверка при удалении записи:

Триггер 3, на обновление:

INSERT INTO uudisedlogi(kuupaev, uudis, kasutaja)
Values (Now(), 
        concat('kustutatud: ',OLD.uudisTeema,', ' ,OLD.uudisKirjeldus,'uued andmed:, ',NEW.uudisTeema,', ',NEW.uudisKirjeldus ), 
        USER())

Результат:

Теперь добавим, удалим и изменим запись под нашим пользователем:

После изменений записей под пользователем, вернёмся под root и видим результат:

Design a site like this with WordPress.com
Alustamine