init.sql 9.2 KB

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