mysql로_개발시_팁.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # autocommit 활성화 여부 조회
  2. SELECT @@AUTOCOMMIT;
  3. SHOW VARIABLES LIKE 'autocommit';
  4. # autocommit 비활성화
  5. SET AUTOCOMMIT = 0;
  6. #시퀀스 생성 관련
  7. 1. 테이블의 PK를 INT UNSIGNED AUTO_INCREMENT 로 지정 예) LOGIN_HST_SQ INT UNSIGNED AUTO_INCREMENT COMMENT '로그인이력일련번호'
  8. 2. mybatis XML의 insert문에 keyProperty 속성 추가. 예) keyProperty="loginHstSq"
  9. 3. JAVA 소스에서는 Domain의 get Method를 이용해 추출.
  10. 예)
  11. void createLoginHistory(GaaLoginHst loginHst);
  12. loginHst.getLoginHstSq();
  13. # 오라클 -> mysql 변환 함수
  14. CONNECT BY -> RECURSIVE 형태로 변경 (참조: ~System.xml 파일의 getLoginMenuList)
  15. SYSDATE -> NOW()
  16. || -> CONCAT
  17. TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') -> DATE_FORMAT(NOW(), '%Y%m%d%H%i%S')
  18. LISTAGG(ROLE_CD,',') WITHIN GROUP (ORDER BY DISP_ORD) -> GROUP_CONCAT(ROLE_CD ORDER BY DISP_ORD SEPARATOR ',')
  19. ROWNUM , @rownum:=@rownum+1 AS RNUM T1, (SELECT @rownum:=0) //T2 식으로 변수를 사용해 구현이 가능하나, 성능이 매우 취약함. 전체 데이터에 대해 상수를 적용하기 때문에, 데이터가 적은경우에만 사용함. 단순히 Paging 목적이라면, LIMIT를 사용해 변경해야 한다. LIMIT 0,10 (주의 0부터 시작함 -> 오라클 Between 은 1부터 시작)
  20. TO_CHAR(1000) -> CONVERT(1000, char)
  21. TO_DATE('2013-02-11','YYYY-MM-DD') -> STR_TO_DATE('2013-02-11', '%Y-%m-%d')
  22. # 현재시간에 1초 더하기
  23. DATE_ADD(NOW(), INTERVAL 1 SECOND)
  24. # 현재시간에 1분 더하기
  25. DATE_ADD(NOW(), INTERVAL 1 MINUTE)
  26. # 현재시간에 1시간 더하기
  27. DATE_ADD(NOW(), INTERVAL 1 HOUR)
  28. # 현재시간에 1일 더하기
  29. DATE_ADD(NOW(), INTERVAL 1 DAY)
  30. # 현재시간에 1달 더하기
  31. DATE_ADD(NOW(), INTERVAL 1 MONTH)
  32. # 현재시간에 1년 더하기
  33. DATE_ADD(NOW(), INTERVAL 1 YEAR)
  34. # 두 날짜의 차이 구하기
  35. DATEDIFF(날짜1, 날짜2)
  36. TIMESTAMPDIFF(SECOND,날짜1,날짜2) // SECOND:초, MINUTE:분, HOUR:시, DAY:일, WEEK:주, MONTH:월, QUARTER:분기, YEAR:연)
  37. ADD_MONTHS(SYSDATE, -3) -> DATE_ADD(NOW(), INTERVAL - 3 MONTH) 또는 TIMESTAMPADD(MONTH,-3,CURRENT_TIMESTAMP)
  38. TO_NUMBER('100') -> CAST('100' AS UNSIGNED)
  39. TRUNC(SYSDATE) -> TRUNCATE(NOW(),1)
  40. MONTHS_BETWEEN(startdate, enddate) -> TIMESTAMPDIFF(MONTH, startdate, enddate)
  41. IF(A.UP_FLD_CD = 0, GRP_SEQ, UP_FLD_CD) AS upfolderCode, -> CASE A WHEN '1' THNE B ELSE END AS upfolderCode,
  42. DBMS_RANDOM.VALUE -> RAND()
  43. SYS_CONNECT_BY_PATH -> GROUP_CONCAT(GRP_nm SEPARATOR ',')
  44. GROUP BY ROLLUP(A.REG_DTM) -> GROUP BY A.REG_DTM WITH ROLLUP
  45. DBMS_RANDOM.STRING('X',#{length}) -> CONVERT(TRUNCATE(RAND() * CAST(CONCAT(1,LPAD(0,(#{length} - 1),'0')) AS UNSIGNED),0),CHAR)
  46. # Doamin Class 변수 생성
  47. WITH DATA_TYPE_TXT AS (
  48. SELECT 'int' AS DATA_TYPE, 'Integer' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  49. SELECT 'bigint' AS DATA_TYPE, 'Long' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  50. SELECT 'smallint' AS DATA_TYPE, 'Long' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  51. SELECT 'char' AS DATA_TYPE, 'String' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  52. SELECT 'varchar' AS DATA_TYPE, 'String' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  53. SELECT 'longtext' AS DATA_TYPE, 'String' AS JAVA_DATA_TYPE FROM DUAL UNION ALL
  54. SELECT 'timestamp' AS DATA_TYPE, 'String' AS JAVA_DATA_TYPE FROM DUAL
  55. )
  56. SELECT CONCAT(
  57. 'private '
  58. , A.JAVA_DATA_TYPE
  59. , ' '
  60. , A.COLUMN_NAME_VAL
  61. , '; //'
  62. , A.COLUMN_COMMENT
  63. ) AS SCRIPT_TEXT
  64. FROM (
  65. SELECT A.JAVA_DATA_TYPE
  66. , CASE WHEN INSTR(COLUMN_NAME_VAL, '_') = 0 THEN COLUMN_NAME_VAL
  67. ELSE CONCAT(SUBSTRING(COLUMN_NAME_VAL, 1, INSTR(COLUMN_NAME_VAL, '_') - 1)
  68. , UPPER(SUBSTRING(COLUMN_NAME_VAL, INSTR(COLUMN_NAME_VAL, '_') + 1, 1))
  69. , SUBSTRING(COLUMN_NAME_VAL, INSTR(COLUMN_NAME_VAL, '_') + 2) )
  70. END COLUMN_NAME_VAL
  71. , A.COLUMN_COMMENT
  72. , A.ORDINAL_POSITION
  73. FROM (
  74. SELECT A.JAVA_DATA_TYPE
  75. , CASE WHEN INSTR(COLUMN_NAME_VAL, '_') = 0 THEN COLUMN_NAME_VAL
  76. ELSE CONCAT(SUBSTRING(COLUMN_NAME_VAL, 1, INSTR(COLUMN_NAME_VAL, '_') - 1)
  77. , UPPER(SUBSTRING(COLUMN_NAME_VAL, INSTR(COLUMN_NAME_VAL, '_') + 1, 1))
  78. , SUBSTRING(COLUMN_NAME_VAL, INSTR(COLUMN_NAME_VAL, '_') + 2) )
  79. END COLUMN_NAME_VAL
  80. , A.COLUMN_COMMENT
  81. , A.ORDINAL_POSITION
  82. FROM (
  83. SELECT COLUMN_NAME
  84. , CASE WHEN INSTR(COLUMN_NAME, '_') = 0 THEN LOWER(COLUMN_NAME)
  85. ELSE CONCAT(SUBSTRING(LOWER(COLUMN_NAME), 1, INSTR(LOWER(COLUMN_NAME), '_') - 1)
  86. , UPPER(SUBSTRING(LOWER(COLUMN_NAME), INSTR(LOWER(COLUMN_NAME), '_') + 1, 1))
  87. , SUBSTRING(LOWER(COLUMN_NAME), INSTR(LOWER(COLUMN_NAME), '_') + 2) )
  88. END COLUMN_NAME_VAL
  89. , ( SELECT JAVA_DATA_TYPE FROM DATA_TYPE_TXT WHERE DATA_TYPE = A.DATA_TYPE) AS JAVA_DATA_TYPE
  90. , COLUMN_COMMENT
  91. , ORDINAL_POSITION
  92. FROM INFORMATION_SCHEMA.COLUMNS A
  93. WHERE TABLE_NAME = 'TB_SURVEY' /* 테이블 명 */
  94. AND COLUMN_NAME NOT IN ('REG_NO', 'REG_DT', 'UPD_NO', 'UPD_DT') /* BASE DOMAIN 제외 */
  95. ) A
  96. ) A
  97. ) A
  98. ORDER BY A.ORDINAL_POSITION
  99. ;