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
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS `person`
--------------
--------------
CREATE TABLE `person`
(
`numero` bigint unsigned NOT NULL primary key,
`nom` varchar(255) NOT NULL,
`naissance` date NOT NULL
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
DROP TRIGGER IF EXISTS `increment`
--------------
--------------
CREATE TRIGGER `increment`
BEFORE INSERT ON `person`
FOR EACH ROW BEGIN
SET NEW.numero=ifnull((select max(numero)+1 from `person` where year(naissance)=year(NEW.naissance)),cast(concat(year(NEW.naissance), '0000000001') as unsigned));
END
--------------
--------------
INSERT INTO `person` (`nom`,`naissance`) VALUES
('nom 01', '2016-01-01'),
('nom 02', '2015-01-01'),
('nom 03', '2016-02-01'),
('nom 04', '2014-01-01'),
('nom 05', '2016-03-01'),
('nom 06', '2015-02-01'),
('nom 07', '2016-04-01'),
('nom 08', '2016-05-01'),
('nom 09', '2015-03-01'),
('nom 10', '2015-04-01')
--------------
--------------
select * from person order by naissance, nom
--------------
+----------------+--------+------------+
| numero | nom | naissance |
+----------------+--------+------------+
| 20140000000001 | nom 04 | 2014-01-01 |
| 20150000000001 | nom 02 | 2015-01-01 |
| 20150000000002 | nom 06 | 2015-02-01 |
| 20150000000003 | nom 09 | 2015-03-01 |
| 20150000000004 | nom 10 | 2015-04-01 |
| 20160000000001 | nom 01 | 2016-01-01 |
| 20160000000002 | nom 03 | 2016-02-01 |
| 20160000000003 | nom 05 | 2016-03-01 |
| 20160000000004 | nom 07 | 2016-04-01 |
| 20160000000005 | nom 08 | 2016-05-01 |
+----------------+--------+------------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 1
--------------
Appuyez sur une touche pour continuer... |
Partager