migrate.sql 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. -- Upgrade script for existing databases. Ignore errors if a column already exists.
  2. USE im;
  3. ALTER TABLE im_user
  4. ADD COLUMN phone VARCHAR(20) NOT NULL DEFAULT '' AFTER nickname;
  5. ALTER TABLE im_user
  6. ADD COLUMN signature VARCHAR(128) NOT NULL DEFAULT '' AFTER phone;
  7. ALTER TABLE im_user
  8. ADD KEY idx_phone (phone);
  9. CREATE TABLE IF NOT EXISTS im_sms_code (
  10. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  11. phone VARCHAR(20) NOT NULL,
  12. scene VARCHAR(16) NOT NULL,
  13. code VARCHAR(8) NOT NULL,
  14. expire_at DATETIME NOT NULL,
  15. used TINYINT NOT NULL DEFAULT 0,
  16. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  17. PRIMARY KEY (id),
  18. KEY idx_phone_scene (phone, scene, created_at)
  19. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  20. CREATE TABLE IF NOT EXISTS im_friend (
  21. uid BIGINT UNSIGNED NOT NULL,
  22. friend_uid BIGINT UNSIGNED NOT NULL,
  23. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  24. PRIMARY KEY (uid, friend_uid)
  25. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  26. CREATE TABLE IF NOT EXISTS im_conversation (
  27. uid BIGINT UNSIGNED NOT NULL,
  28. peer_uid BIGINT UNSIGNED NOT NULL,
  29. last_msg_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
  30. last_content VARCHAR(256) NOT NULL DEFAULT '',
  31. last_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  32. unread INT NOT NULL DEFAULT 0,
  33. PRIMARY KEY (uid, peer_uid),
  34. KEY idx_uid_time (uid, last_time)
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  36. INSERT INTO im_user (id, username, password, nickname, phone, signature, status)
  37. VALUES (1, 'filehelper', '-', 'filehelper', '', 'files', 2)
  38. ON DUPLICATE KEY UPDATE nickname=VALUES(nickname), signature=VALUES(signature), status=VALUES(status);
  39. ALTER TABLE im_user
  40. ADD COLUMN allow_search_account TINYINT NOT NULL DEFAULT 1 AFTER signature;
  41. ALTER TABLE im_user
  42. ADD COLUMN allow_search_phone TINYINT NOT NULL DEFAULT 1 AFTER allow_search_account;
  43. ALTER TABLE im_user
  44. ADD COLUMN allow_add_friend TINYINT NOT NULL DEFAULT 1 AFTER allow_search_phone;
  45. CREATE TABLE IF NOT EXISTS im_friend_request (
  46. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  47. from_uid BIGINT UNSIGNED NOT NULL,
  48. to_uid BIGINT UNSIGNED NOT NULL,
  49. status TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1已同意 2已拒绝',
  50. message VARCHAR(64) NOT NULL DEFAULT '',
  51. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  52. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. PRIMARY KEY (id),
  54. UNIQUE KEY uk_from_to (from_uid, to_uid),
  55. KEY idx_to_status (to_uid, status)
  56. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  57. ALTER TABLE im_friend_request
  58. ADD COLUMN message VARCHAR(64) NOT NULL DEFAULT '' AFTER status;
  59. ALTER TABLE im_friend
  60. ADD COLUMN remark VARCHAR(64) NOT NULL DEFAULT '' AFTER friend_uid;
  61. CREATE TABLE IF NOT EXISTS im_sticker_pack (
  62. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  63. name VARCHAR(64) NOT NULL,
  64. version INT NOT NULL DEFAULT 1,
  65. sort_order INT NOT NULL DEFAULT 0,
  66. status TINYINT NOT NULL DEFAULT 1,
  67. PRIMARY KEY (id)
  68. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  69. CREATE TABLE IF NOT EXISTS im_sticker (
  70. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  71. pack_id BIGINT UNSIGNED NOT NULL,
  72. code VARCHAR(64) NOT NULL,
  73. name VARCHAR(64) NOT NULL DEFAULT '',
  74. file_path VARCHAR(255) NOT NULL,
  75. sha256 VARCHAR(64) NOT NULL DEFAULT '',
  76. mime VARCHAR(32) NOT NULL DEFAULT 'image/png',
  77. sort_order INT NOT NULL DEFAULT 0,
  78. PRIMARY KEY (id),
  79. UNIQUE KEY uk_pack_code (pack_id, code),
  80. KEY idx_pack (pack_id)
  81. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  82. ALTER TABLE im_user ADD COLUMN avatar_ver INT NOT NULL DEFAULT 0;
  83. CREATE TABLE IF NOT EXISTS im_file (
  84. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  85. from_uid BIGINT UNSIGNED NOT NULL,
  86. name VARCHAR(255) NOT NULL,
  87. mime VARCHAR(64) NOT NULL DEFAULT 'application/octet-stream',
  88. size INT NOT NULL DEFAULT 0,
  89. sha256 VARCHAR(64) NOT NULL DEFAULT '',
  90. file_path VARCHAR(255) NOT NULL DEFAULT '',
  91. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  92. PRIMARY KEY (id),
  93. KEY idx_from (from_uid)
  94. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  95. INSERT INTO im_sticker_pack (id, name, version, sort_order, status)
  96. VALUES (1, '默认表情', 1, 1, 1), (2, '手势', 1, 2, 1)
  97. ON DUPLICATE KEY UPDATE name=VALUES(name), status=VALUES(status);
  98. ALTER TABLE im_message
  99. ADD COLUMN sender_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '发送方已删除' AFTER content;
  100. ALTER TABLE im_message
  101. ADD COLUMN receiver_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '接收方已删除' AFTER sender_deleted;
  102. CREATE TABLE IF NOT EXISTS im_favorite (
  103. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  104. uid BIGINT UNSIGNED NOT NULL,
  105. kind TINYINT NOT NULL DEFAULT 1 COMMENT '1文本 2图片 3文件 4名片 5笔记',
  106. title VARCHAR(128) NOT NULL DEFAULT '',
  107. content MEDIUMTEXT NOT NULL,
  108. src_msg_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
  109. src_peer_uid BIGINT UNSIGNED NOT NULL DEFAULT 0,
  110. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  111. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  112. PRIMARY KEY (id),
  113. KEY idx_uid_time (uid, id)
  114. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  115. CREATE TABLE IF NOT EXISTS im_group (
  116. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  117. name VARCHAR(64) NOT NULL DEFAULT '',
  118. owner_uid BIGINT UNSIGNED NOT NULL,
  119. join_mode TINYINT NOT NULL DEFAULT 1 COMMENT '0开放 1审核 2禁止',
  120. member_count INT NOT NULL DEFAULT 0,
  121. avatar_ver INT NOT NULL DEFAULT 0,
  122. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  123. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  124. PRIMARY KEY (id),
  125. KEY idx_owner (owner_uid)
  126. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  127. CREATE TABLE IF NOT EXISTS im_group_member (
  128. group_id BIGINT UNSIGNED NOT NULL,
  129. uid BIGINT UNSIGNED NOT NULL,
  130. role TINYINT NOT NULL DEFAULT 0 COMMENT '0成员 1管理员 2群主',
  131. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  132. PRIMARY KEY (group_id, uid),
  133. KEY idx_uid (uid)
  134. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  135. CREATE TABLE IF NOT EXISTS im_group_request (
  136. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  137. group_id BIGINT UNSIGNED NOT NULL,
  138. from_uid BIGINT UNSIGNED NOT NULL,
  139. status TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1已同意 2已拒绝',
  140. message VARCHAR(64) NOT NULL DEFAULT '',
  141. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  142. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  143. PRIMARY KEY (id),
  144. UNIQUE KEY uk_group_from (group_id, from_uid),
  145. KEY idx_group_status (group_id, status)
  146. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  147. CREATE TABLE IF NOT EXISTS im_group_message (
  148. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  149. group_id BIGINT UNSIGNED NOT NULL,
  150. from_uid BIGINT UNSIGNED NOT NULL DEFAULT 0,
  151. msg_type TINYINT NOT NULL DEFAULT 1,
  152. content TEXT NOT NULL,
  153. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  154. PRIMARY KEY (id),
  155. KEY idx_group_id (group_id, id)
  156. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  157. CREATE TABLE IF NOT EXISTS im_group_msg_deleted (
  158. uid BIGINT UNSIGNED NOT NULL,
  159. msg_id BIGINT UNSIGNED NOT NULL,
  160. PRIMARY KEY (uid, msg_id),
  161. KEY idx_msg (msg_id)
  162. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  163. CREATE TABLE IF NOT EXISTS im_group_inbox (
  164. uid BIGINT UNSIGNED NOT NULL,
  165. group_id BIGINT UNSIGNED NOT NULL,
  166. last_msg_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
  167. last_content VARCHAR(256) NOT NULL DEFAULT '',
  168. last_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  169. unread INT NOT NULL DEFAULT 0,
  170. PRIMARY KEY (uid, group_id),
  171. KEY idx_uid_time (uid, last_time)
  172. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  173. ALTER TABLE im_group ADD COLUMN avatar_ver INT NOT NULL DEFAULT 0;
  174. ALTER TABLE im_user ADD COLUMN file_max BIGINT NOT NULL DEFAULT 0 COMMENT '单文件上传上限字节,0表示用配置 file_max';