init.sql 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  46. PRIMARY KEY (id),
  47. KEY idx_to_uid (to_uid, id),
  48. KEY idx_from_uid (from_uid, id),
  49. KEY idx_pair (from_uid, to_uid, id)
  50. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  51. CREATE TABLE IF NOT EXISTS im_conversation (
  52. uid BIGINT UNSIGNED NOT NULL,
  53. peer_uid BIGINT UNSIGNED NOT NULL,
  54. last_msg_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
  55. last_content VARCHAR(256) NOT NULL DEFAULT '',
  56. last_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  57. unread INT NOT NULL DEFAULT 0,
  58. PRIMARY KEY (uid, peer_uid),
  59. KEY idx_uid_time (uid, last_time)
  60. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  61. -- 系统账号:文件传输助手。密码不可登录(status=2)
  62. CREATE TABLE IF NOT EXISTS im_friend_request (
  63. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  64. from_uid BIGINT UNSIGNED NOT NULL,
  65. to_uid BIGINT UNSIGNED NOT NULL,
  66. status TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1已同意 2已拒绝',
  67. message VARCHAR(64) NOT NULL DEFAULT '',
  68. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  69. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  70. PRIMARY KEY (id),
  71. UNIQUE KEY uk_from_to (from_uid, to_uid),
  72. KEY idx_to_status (to_uid, status)
  73. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  74. CREATE TABLE IF NOT EXISTS im_sticker_pack (
  75. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  76. name VARCHAR(64) NOT NULL,
  77. version INT NOT NULL DEFAULT 1,
  78. sort_order INT NOT NULL DEFAULT 0,
  79. status TINYINT NOT NULL DEFAULT 1,
  80. PRIMARY KEY (id)
  81. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  82. CREATE TABLE IF NOT EXISTS im_sticker (
  83. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  84. pack_id BIGINT UNSIGNED NOT NULL,
  85. code VARCHAR(64) NOT NULL,
  86. name VARCHAR(64) NOT NULL DEFAULT '',
  87. file_path VARCHAR(255) NOT NULL,
  88. sha256 VARCHAR(64) NOT NULL DEFAULT '',
  89. mime VARCHAR(32) NOT NULL DEFAULT 'image/png',
  90. sort_order INT NOT NULL DEFAULT 0,
  91. PRIMARY KEY (id),
  92. UNIQUE KEY uk_pack_code (pack_id, code),
  93. KEY idx_pack (pack_id)
  94. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  95. CREATE TABLE IF NOT EXISTS im_file (
  96. id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  97. from_uid BIGINT UNSIGNED NOT NULL,
  98. name VARCHAR(255) NOT NULL,
  99. mime VARCHAR(64) NOT NULL DEFAULT 'application/octet-stream',
  100. size INT NOT NULL DEFAULT 0,
  101. sha256 VARCHAR(64) NOT NULL DEFAULT '',
  102. file_path VARCHAR(255) NOT NULL DEFAULT '',
  103. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  104. PRIMARY KEY (id),
  105. KEY idx_from (from_uid)
  106. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  107. -- 系统账号:文件传输助手。密码不可登录(status=2)
  108. INSERT INTO im_user (id, username, password, nickname, phone, signature, status)
  109. VALUES (1, 'filehelper', '-', '文件传输助手', '', '文件助手', 2)
  110. ON DUPLICATE KEY UPDATE nickname=VALUES(nickname), signature=VALUES(signature), status=VALUES(status);
  111. INSERT INTO im_sticker_pack (id, name, version, sort_order, status)
  112. VALUES (1, '默认表情', 1, 1, 1), (2, '手势', 1, 2, 1)
  113. ON DUPLICATE KEY UPDATE name=VALUES(name), status=VALUES(status);