Selamlar, MYSQL Trigger ile ilgili çok fazla soru gelmişti. Anlatım yapmak istedim. Stok hareketleri örneğiyle anlattım. Herkese iyi çalışmalar. Videodaki örnek veritabanı aşağıdadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
-- phpMyAdmin SQL Dump -- version 4.8.4 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Generation Time: Jan 12, 2019 at 02:34 PM -- Server version: 10.1.37-MariaDB -- PHP Version: 7.3.0 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `tutorial` -- -- -------------------------------------------------------- -- -- Table structure for table `stoklar` -- CREATE TABLE `stoklar` ( `id` int(11) NOT NULL, `isim` varchar(13) DEFAULT NULL, `giris_adeti` int(11) DEFAULT '0' COMMENT 'toplam giren adet', `cikis_adeti` int(11) DEFAULT '0' COMMENT 'toplam çıkış adet', `kalan_adet` int(11) DEFAULT '0' COMMENT 'toplam kalan adet' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `stoklar` -- INSERT INTO `stoklar` (`id`, `isim`, `giris_adeti`, `cikis_adeti`, `kalan_adet`) VALUES (1, 'Kırmızı Kalem', 110, 45, 65), (2, 'Mavi Kalem', 5, 0, 5); -- -------------------------------------------------------- -- -- Table structure for table `stok_hareketleri` -- CREATE TABLE `stok_hareketleri` ( `id` int(11) NOT NULL, `stokID` int(11) NOT NULL COMMENT 'Stoklar tablosuyla bağlantısı', `adet` int(11) NOT NULL COMMENT 'Hareket Adeti', `islem` int(11) NOT NULL COMMENT '1 : Giriş, 2 : Çıkış' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `stok_hareketleri` -- INSERT INTO `stok_hareketleri` (`id`, `stokID`, `adet`, `islem`) VALUES (1, 1, 100, 1), (2, 1, 20, 2), (3, 1, 25, 2), (4, 1, 10, 1), (5, 2, 5, 1); -- -- Triggers `stok_hareketleri` -- DELIMITER $$ CREATE TRIGGER `hareket_ekledikten_sonra` AFTER INSERT ON `stok_hareketleri` FOR EACH ROW update stoklar set giris_adeti = (SELECT sum(if(islem = 1, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = NEW.stokID), cikis_adeti = (SELECT sum(if(islem = 2, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = NEW.stokID), kalan_adet = giris_adeti - cikis_adeti WHERE id = NEW.stokID $$ DELIMITER ; DELIMITER $$ CREATE TRIGGER `hareket_guncellendikten_sonra` AFTER UPDATE ON `stok_hareketleri` FOR EACH ROW update stoklar set giris_adeti = (SELECT sum(if(islem = 1, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = NEW.stokID), cikis_adeti = (SELECT sum(if(islem = 2, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = NEW.stokID), kalan_adet = giris_adeti - cikis_adeti WHERE id = NEW.stokID $$ DELIMITER ; DELIMITER $$ CREATE TRIGGER `hareket_silindikten_sonra` AFTER DELETE ON `stok_hareketleri` FOR EACH ROW update stoklar set giris_adeti = (SELECT sum(if(islem = 1, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = OLD.stokID), cikis_adeti = (SELECT sum(if(islem = 2, adet, 0)) as giris_adeti FROM `stok_hareketleri` where stokID = OLD.stokID), kalan_adet = giris_adeti - cikis_adeti WHERE id = OLD.stokID $$ DELIMITER ; -- -- Indexes for dumped tables -- -- -- Indexes for table `stoklar` -- ALTER TABLE `stoklar` ADD PRIMARY KEY (`id`); -- -- Indexes for table `stok_hareketleri` -- ALTER TABLE `stok_hareketleri` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `stoklar` -- ALTER TABLE `stoklar` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; -- -- AUTO_INCREMENT for table `stok_hareketleri` -- ALTER TABLE `stok_hareketleri` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
Okumaya devam...