create_scheme.sql 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  4. -- -----------------------------------------------------
  5. --
  6. -- DROP SCHEMA IF EXISTS bookstore ;
  7. -- CREATE SCHEMA IF NOT EXISTS bookstore ;
  8. -- USE bookstore ;
  9. -- -----------------------------------------------------
  10. USE izinin ; /* TODO: adjust to your environment */
  11. DROP TABLE IF EXISTS product;
  12. DROP TABLE IF EXISTS customer;
  13. DROP TABLE IF EXISTS customer_product;
  14. DROP PROCEDURE IF EXISTS addTicket;
  15. -- -----------------------------------------------------
  16. -- Table product
  17. -- -----------------------------------------------------
  18. CREATE TABLE IF NOT EXISTS product (
  19. id INT NOT NULL AUTO_INCREMENT ,
  20. productid VARCHAR(10) NOT NULL ,
  21. name VARCHAR(16) NULL ,
  22. shortdescr VARCHAR(30) NULL ,
  23. longdescr VARCHAR(500) NULL ,
  24. url VARCHAR(500) not null ,
  25. PRIMARY KEY (id) ,
  26. UNIQUE INDEX productid_UNIQUE (productid ASC) )
  27. ENGINE = InnoDB;
  28. -- -----------------------------------------------------
  29. -- Table customer
  30. -- -----------------------------------------------------
  31. CREATE TABLE IF NOT EXISTS customer (
  32. id INT NOT NULL AUTO_INCREMENT ,
  33. accountdigest VARCHAR(300) NOT NULL ,
  34. PRIMARY KEY (id) )
  35. ENGINE = InnoDB;
  36. -- -----------------------------------------------------
  37. -- Table customer_product
  38. -- -----------------------------------------------------
  39. CREATE TABLE IF NOT EXISTS customer_product (
  40. customer_id INT NOT NULL ,
  41. product_id INT NOT NULL ,
  42. ticket VARCHAR(1500) NOT NULL ,
  43. PRIMARY KEY (customer_id, product_id) ,
  44. CONSTRAINT fk_customer_product_customer
  45. FOREIGN KEY (customer_id )
  46. REFERENCES customer (id )
  47. ON DELETE CASCADE
  48. ON UPDATE NO ACTION,
  49. CONSTRAINT fk_customer_product_product
  50. FOREIGN KEY (product_id )
  51. REFERENCES product (id )
  52. ON DELETE CASCADE
  53. ON UPDATE NO ACTION)
  54. ENGINE = InnoDB;
  55. CREATE INDEX customer_key ON customer_product (customer_id ASC) ;
  56. CREATE INDEX product_key ON customer_product (product_id ASC) ;
  57. SET SQL_MODE=@OLD_SQL_MODE;
  58. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  59. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  60. -- -----------------------------------------------------
  61. -- Data for table product
  62. -- -----------------------------------------------------
  63. START TRANSACTION;
  64. INSERT INTO product (id, productid, name, shortdescr, longdescr, url)
  65. VALUES (NULL, '588547', 'book#1', 'shortDescr#1', 'longDescr#1', '../products/book_0.txt');
  66. INSERT INTO product (id, productid, name, shortdescr, longdescr, url)
  67. VALUES (NULL, '588549', 'book#2', 'shortDescr#2', 'longDescr#2', '../products/book_1.txt');
  68. INSERT INTO product (id, productid, name, shortdescr, longdescr, url)
  69. VALUES (NULL, '588550', 'book#3', 'shortDescr#3', 'longDescr#3', '../products/book_2.txt');
  70. INSERT INTO product (id, productid, name, shortdescr, longdescr, url)
  71. VALUES (NULL, '588551', 'book#4', 'shortDescr#4', 'longDescr#4', '../products/book_3.txt');
  72. COMMIT;
  73. DELIMITER $$
  74. CREATE PROCEDURE addTicket (in var_account VARCHAR(300), in var_ticket VARCHAR(1500), var_prodid VARCHAR(10))
  75. BEGIN
  76. DECLARE var_customer INT DEFAULT -1;
  77. DECLARE var_product INT DEFAULT -1;
  78. SELECT id into var_customer from customer c where c.accountdigest = var_account LIMIT 1;
  79. SELECT id into var_product from product p where p.productid = var_prodid LIMIT 1;
  80. -- do nothing product if product id is incorrect (-1)
  81. if var_product != -1 and var_account != '' then
  82. if var_customer = -1 then
  83. insert into customer (accountdigest) values (var_account);
  84. SELECT LAST_INSERT_ID() into var_customer;
  85. end if;
  86. -- for duplicate handling there is use of 'replace' instead of 'insert ignore'
  87. -- if no record to replase mysql will insert new one
  88. REPLACE INTO customer_product (customer_id, product_id, ticket) values (var_customer, var_product, var_ticket);
  89. end if;
  90. END$$
  91. DELIMITER ;