Notes![what is notes.io? What is notes.io?](/theme/images/whatisnotesio.png)
![]() ![]() Notes - notes.io |
GO
--sipariş verilen ürünleri stoktan düşen triger yazınız
ALTER TRIGGER tr_SiparişStoktanDüş
ON [Sipariş Detayları] AFTER INSERT
AS
BEGIN
DECLARE @adet smallint , @urunno int , @siparişno int
SELECT @siparişno=SiparişNo, @urunno=ÜrünNo,@adet=Miktar FROM inserted
UPDATE Ürünler SET StokMiktarı = StokMiktarı-@adet WHERE ÜrünNo=@urunno
SELECT * FROM [Sipariş Detayları] WHERE SiparişNo=@siparişno
SELECT * FROM Ürünler WHERE ÜrünNo=@urunno
END
SELECT * FROM Ürünler
SELECT * FROM [Sipariş Detayları]
-- 1 den 40 , 2 den 37 tane var 1 er tane satalım
--INSERT INTO [Sipariş Detayları] VALUES(11166,1,45,1,0),(11166,2,23,1,0) --ikincisi çalışmıyor
INSERT INTO [Sipariş Detayları] VALUES(11166,1,45,1,0)
INSERT INTO [Sipariş Detayları] VALUES(11166,2,23,1,0)
--delete from [Sipariş Detayları] WHERE SiparişNo=11166
--update Ürünler SET StokMiktarı = 40 WHERE ÜrünNo=1
--update Ürünler SET StokMiktarı = 37 WHERE ÜrünNo=2
GO
-- Ürünler tablosunda güncelleme olduktan sonra tektikelenen trigger
-- Eğer "stokMiktarı" yada "BirimFiyat" kolonunda değişiklik olduysa (yada INSERT hepsi değişir????)
-- bunu mesajla bize eliten bir tetikleyici yazalım
ALTER TRIGGER ÜrünGüncelle
ON Ürünler AFTER UPDATE
AS
BEGIN
IF UPDATE(StokMiktarı)
SELECT 'Ürünler tablosunun StokMiktarı kolonunda güncelleme oldu.'
IF UPDATE(BirimFiyat)
SELECT 'Ürünler tablosunun BirimFiyat kolonunda güncelleme oldu.'
print 'Ürünler tablosunda güncelleme oldu'
END
GO
--Tetikleyelim
SELECT * FROM Ürünler
UPDATE Ürünler SET LatinceAdı='Gübre Kutusu' WHERE ÜrünNo=3 -- print çalışır
UPDATE Ürünler SET StokMiktarı = StokMiktarı+1 WHERE ÜrünAd ='Sihirli Zambak'
UPDATE Ürünler SET BirimFiyat = BirimFiyat-1 WHERE ÜrünAd ='Sihirli Zambak'
-----------------------------------------------------------------------------------------
-- Sipariş edilen ürünün stok miktarını, ürünler tablosunda düzenleyen tetikleyici yazınız
USE Bahçeişleri
GO
CREATE TRIGGER tr_after_SiparisDetay_Insert
ON [Sipariş Detayları] AFTER INSERT
AS
BEGIN
DECLARE @miktar smallint, @ürünno int
SELECT @miktar=Miktar, @ürünno=ÜrünNo FROM inserted
UPDATE Ürünler
SET StokMiktarı = StokMiktarı-@miktar
WHERE ÜrünNo = @ürünno
END
SELECT * FROM [Sipariş Detayları]
SELECT * FROM [Ürünler]-- 1 sihirli zambak 40TL 40Adet
-- 1 tane satalım sihirli zambak satalım
INSERT INTO [Sipariş Detayları]
VALUES(11166,1,40,1,0)
-- Sihili zambak stok Miktarı 39 oldu
------------------------------------------------------------------------------------------
SQL = DDL+DML+SELECT
DDLata Definition Language : Veri tanımla dili
CREATE ALTER DROP : YARATDEĞİŞTİRSil
-- bir tabloyu silmek istersek ?? DÜŞÜR KIR
DROP TABLE TabloAdı
DMLata Manipulation Language : Veri Kullanım Dili
INSERTUPDATE DELETE : KaydetGüncelleSİl
-- bir tablodaki tüm kayıtları silmek istersek ??
DELETE FROM TabloAdı
-- Tablodaki kayıtları az kaynak kullanarak, DELETE den biraz daha hızlı silmek için :
TRUNCATE TABLE TabloAdı -- WHERE YOK
-- Verilerimizi bozmadan kopya tablo üzerinde deneyelim
-- Hızlıca bir tablonun kopyasını (Veri+Yapı) yaratmak için :
SELECT * INTO koyaTabloAdı FROM TabloAdı
--* tüm kolonlar yada kolon seçebilirsiniz
Ürünler tablosunun kopyası Kürünler tablosu oluşturalım
SELECT * INTO Kürünler FROM Ürünler
SELECT * FROM Ürünler -- 192 satır, 11 kolon
SELECT * FROM Kürünler -- 192 satır, 11 kolon
-- Kürünler tab. hizlıca silelim
TRUNCATE TABLE Kürünler
SELECT * FROM Kürünler
SELECT ÜrünAd,LatinceAdı,BirimFiyat,StokMiktarı INTO KopiÜrünler FROM Ürünler WHERE ÜrünAd LIKE'A%'
SELECT * FROM KopiÜrünler
--Tüm kayıtlarını Sİl
TRUNCATE TABLE KopiÜrünler
SELECT * FROM KopiÜrünler
-- Tekrar KopiÜrünler tablosunu doldurmak için ne yapabilirsiniz ?
INSERT INTO KopiÜrünler(ÜrünAd,LatinceAdı,BirimFiyat,StokMiktarı)
(SELECT ÜrünAd, LatinceAdı,BirimFiyat,StokMiktarı FROM Ürünler WHERE ÜrünAd LIKE 'B%')
DELETE FROM KopiÜrünler
TRUNCATE TABLE KopiÜrünler
------------------- TRANSACTION ve ROLLBACK----------------------------------------
Trigger tetikleyici içinde ve trigger dan bağımsız çalışabilirler.
TRANSACTION yada kısaca TRANS işlem anlamına gelen aynı komut
ROLLBACK TRAN : işlem yanlış/tamamlanmadı ise geri sar.
COMMIT TRAN : İşlem doğru/tamamlandı ise kabul et
BEGIN TRAN
...
geri sarılacak yada kabul edilecek işlemler dizisi
...
ROLLBACK yada
COMMIT TRAN ile biter
-- üzerinde çalışmak için kopya çalışanlar tablosu oluşturalım
SELECT * INTO Kçalışanlar1 FROM Çalışanlar
SELECT * INTO Kçalışanlar2 FROM Çalışanlar
SELECT * FROM Kçalışanlar1
SELECT * FROM Kçalışanlar2
-- BEGIN TRAN ile başlayarak
-- Kçalışanlar tablosunda tüm çalışanların adını kendi adınız olarak güncelleyin
-- Kendi adınız ve soyadınızdan 10 tane çalışan ekleyin sonrada geri sarın
BEGIN TRANSACTION
UPDATE Kçalışanlar1 SET Adı='Alp'
DECLARE @i int
SET @i=15
WHILE(@i>0)
BEGIN
INSERT INTO Kçalışanlar1(ÇalışanNo,Adı,Soyadı) VALUES(@i+15,'Alp','imrek')
SET @i=@i-1
END
SELECT * FROM Kçalışanlar1
ROLLBACK TRANSACTION
SELECT * FROM Kçalışanlar1
-- Kçalışanlar2 tablosu kayıtların tümünü sil ardından başa sar
BEGIN TRANSACTION
TRUNCATE TABLE Kçalışanlar2
SELECT * FROM Kçalışanlar2
ROLLBACK TRANSACTION -- işlemi başa sar
SELECT * FROM Kçalışanlar2
-- Kçalışanlar2 tablosu kayıtların tümünü sil ardından işlemi kabul et
BEGIN TRANSACTION
TRUNCATE TABLE Kçalışanlar2
SELECT * FROM Kçalışanlar2
COMMIT TRANSACTION -- işlemi kabul et
SELECT * FROM Kçalışanlar2
-- DROP TABLE dahi geri sarılabilir
BEGIN TRANSACTION
DROP TABLE Kçalışanlar1
SELECT * FROM sysobjects WHERE name ='Kçalışanlar1'
ROLLBACK TRANSACTION
SELECT * FROM Kçalışanlar1
----------------------------------------------
-- Açık kalan transaction var mı ?
DBCC OPENTRAN
----------------------------------------------
CREATE TABLE Tablo
(
sayi int
)
BEGIN TRANSACTION
--Eğer varsa tabloyu sil
IF(EXISTS(SELECT * FROM sysobjects where name='Tablo'))
DROP TABLE Tablo
-- Tabloyu yarat
CREATE TABLE Tablo( sayi int )
-- Tabloyu değiştir
ALTER TABLE Tablo Add Yazı varchar(100)
-- içine bir kayıt ekle
INSERT INTO Tablo VALUES(7,'uğurlu sayım')
--tabloyu göster
SELECT * FROM Tablo
DBCC OPENTRAN -- Açık kalan transaction var mı ?
--ROLLBACK TRANSACTION -- DENE işlemi geri sar --
COMMIT TRANSACTION -- DENE işlemi kabul et --
DBCC OPENTRAN -- Açık kalan transaction var mı ?
SELECT * FROM Tablo
SELECT * INTO kÇalışanlar FROM Çalışanlar
BEGIN TRANSACTION işlem1 -- tran adı verilebilir!!!
TRUNCATE TABLE kÇalışanlar
-- Açık işlem var mı ?
DBCC OPENTRAN
--ROLLBACK TRAN
COMMIT TRANSACTION
SP_WHO 59 -- 59 nolu process id ile ilgili bilgi
SELECT * FROM kÇalışanlar
--------------------- BANKA adında örnek Uygulama -----------------
CREATE DATABASE BANKA
GO
USE BANKA
GO
CREATE TABLE Müşteriler
(
MüşteriID int not null PRIMARY KEY IDENTITY(1,1),
Adı nvarchar(10) not null,
Soyadı nvarchar(30) not null,
TCKimlikNo char(11) UNIQUE
CONSTRAINT check_kimlik CHECK( TCKimlikNo LIKE '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][02468]' )
)
CREATE TABLE Hesaplar
(
HesapID int PRIMARY KEY IDENTITY(1,1),
HesapNo NVARCHAR(10) not null,
MüşteriID int not null FOREIGN KEY REFERENCES Müşteriler(MüşteriID),
Bakiye money null
)
GO
INSERT INTO Müşteriler VALUES('Süleyman','Paragönder','12345678972'),
('Mustafa','HavaleAlan','45678912356')
GO
INSERT INTO Hesaplar VALUES('6970',1,1000), -- Süleymanın 1000
('8990',2,10) -- Mustafanın 10 lirası var
-- Müşterileri hesapları ile sorgulayınız (Hangi müşterinin, hangi hesapta, kaç lirası var?)
SELECT * FROM Müşteriler
SELECT * FROM Hesaplar
SELECT Adı,Soyadı,HesapNo,Bakiye
FROM Müşteriler INNER JOIN Hesaplar ON Müşteriler.MüşteriID = Hesaplar.MüşteriID
--Bir hesaptan diğerine para havalesi yapmak için neler yapmamız gerekiyor ?
-- Süleyman ın , Mustafa ya 100 TL havale etmesi ne yapmalıyız ?
+) Alan ve gönderen hesaplar mevcut mu ? kontrol
+) Gönderen hesabın bakiyesi yeterli mi ?
Havalenin en az iki adımı
1) 6970 nolu hesabı 100 eksilt
hata oldu
2) 8990 nolu hesabı 100 arttır
--6990 hesabın 100TL kayıp olur
1) 8990 nolu hesabı 100 arttır
hata oldu
2) 6970 nolu hesabı 100 eksilt
--Bankanın 100TL zararı olur
/*
iki basamaklı havale işlemi tamamlanmadan önce bir hata olursa başa sarmalı : ROLLBACK TRAN
Tüm işlem basamkları düzgün gerçekleştirilirse işlem kabul edilmeli COMMIT TRAN
*/
-- HATA OLSUN
BEGIN TRAN TRON1
DECLARE @hata BIT
-- Havalenin iki adımını gerçekleştirecek SQL Cümlelerini yazınız :
--1) 6970 nolu hesapta 1000TL var, 100TL eksilt
UPDATE Hesaplar SET Bakiye = Bakiye-100 WHERE HesapNo=6970
--2) 8990 nolu hesapta 10TL var, 100TL arttır
UPDATE Hesaplar SET Bakiye = Bakiye + 00 WHERE HesapNo=8990
SET @hata=1
IF(@hata=1) ROLLBACK TRAN TRON1
ELSE COMMIT TRAN TRON1
--
SELECT * FROM Müşteriler
SELECT * FROM Hesaplar
-- HATA OLMASIN
BEGIN TRAN TRON1
DECLARE @hata BIT
-- Havalenin iki adımını gerçekleştirecek SQL Cümlelerini yazınız :
--1) 6970 nolu hesapta 1000TL var, 100TL eksilt
UPDATE Hesaplar SET Bakiye = Bakiye-100 WHERE HesapNo=6970
--2) 8990 nolu hesapta 10TL var, 100TL arttır
UPDATE Hesaplar SET Bakiye = Bakiye + 100 WHERE HesapNo=8990
SET @hata=0
IF(@hata=1) ROLLBACK TRAN TRON1
ELSE COMMIT TRAN TRON1
--
SELECT * FROM Müşteriler
SELECT * FROM Hesaplar
Windows için Posta ile gönderildi
![]() |
Notes is a web-based application for online taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000+ notes created and continuing...
With notes.io;
- * You can take a note from anywhere and any device with internet connection.
- * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
- * You can quickly share your contents without website, blog and e-mail.
- * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
- * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.
Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.
Easy: Notes.io doesn’t require installation. Just write and share note!
Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )
Free: Notes.io works for 14 years and has been free since the day it was started.
You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;
Email: [email protected]
Twitter: http://twitter.com/notesio
Instagram: http://instagram.com/notes.io
Facebook: http://facebook.com/notesio
Regards;
Notes.io Team