Files
chat-demo-server/db/sql.txt
T
2026-09-21 17:25:24 +08:00

158 lines
8.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
CREATE TABLE chat_mysql.users (
username VARCHAR(50) PRIMARY KEY,
password VARCHAR(255) NOT NULL
);
SET SQL_SAFE_UPDATES = 0;
DELETE FROM chat_mysql.users;
SET SQL_SAFE_UPDATES = 1;
INSERT INTO chat_mysql.users (username, password)
VALUES
('admin', '123'),
('query', '123'),
('tom', '123'),
('jack', '123'),
('lucy', '123'),
('lily', '123');
select * from chat_mysql.users;
CREATE TABLE chat_mysql.contacts (
user_name VARCHAR(50) NOT NULL,
contact_name VARCHAR(50) NOT NULL,
PRIMARY KEY (user_name, contact_name),
FOREIGN KEY (user_name)
REFERENCES chat_mysql.users(username),
FOREIGN KEY (contact_name)
REFERENCES chat_mysql.users(username)
);
INSERT INTO chat_mysql.contacts (user_name, contact_name)
VALUES
('admin', 'query'),
('admin', 'tom'),
('admin', 'jack'),
('admin', 'lucy'),
('query', 'admin'),
('query', 'tom'),
('tom', 'admin'),
('tom', 'query'),
('admin', 'lily'),
('lily', 'admin');
select * from chat_mysql.contacts;
CREATE TABLE chat_mysql.messages (
id INT PRIMARY KEY AUTO_INCREMENT,
sender_name VARCHAR(50) NOT NULL,
receiver_name VARCHAR(50) NOT NULL,
content VARCHAR(1000) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sender_name)
REFERENCES chat_mysql.users(username),
FOREIGN KEY (receiver_name)
REFERENCES chat_mysql.users(username)
);
INSERT INTO chat_mysql.messages
(sender_name, receiver_name, content, created_at)
VALUES
-- admin ↔ query
('admin', 'query', '你好,最近怎么样?', '2026-09-20 10:00:00'),
('query', 'admin', '挺好的,你呢?', '2026-09-20 10:01:00'),
('admin', 'query', '我也不错,最近在做聊天项目。', '2026-09-20 10:02:00'),
('query', 'admin', '听起来不错,是用 Vue 做的吗?', '2026-09-20 10:03:00'),
('admin', 'query', '对,前端使用 Vue2,后端使用 Node.js。', '2026-09-20 10:04:00'),
('query', 'admin', '那数据库使用 MySQL?', '2026-09-20 10:05:00'),
('admin', 'query', '对,目前正在完善聊天功能。', '2026-09-20 10:06:00'),
-- admin ↔ tom
('admin', 'tom', '你今天有空吗?', '2026-09-20 11:00:00'),
('tom', 'admin', '有啊,怎么了?', '2026-09-20 11:01:00'),
('admin', 'tom', '想和你讨论一下项目。', '2026-09-20 11:02:00'),
('tom', 'admin', '可以,什么时间方便?', '2026-09-20 11:03:00'),
('admin', 'tom', '下午三点怎么样?', '2026-09-20 11:04:00'),
('tom', 'admin', '没问题。', '2026-09-20 11:05:00'),
-- admin ↔ jack
('jack', 'admin', '周末一起吃饭吗?', '2026-09-20 12:00:00'),
('admin', 'jack', '可以啊,去哪吃?', '2026-09-20 12:01:00'),
('jack', 'admin', '附近找一家餐厅吧。', '2026-09-20 12:02:00'),
('admin', 'jack', '好的,晚上六点怎么样?', '2026-09-20 12:03:00'),
('jack', 'admin', '可以,到时候联系。', '2026-09-20 12:04:00'),
-- admin ↔ lucy
('admin', 'lucy', '最近项目进展怎么样?', '2026-09-20 13:00:00'),
('lucy', 'admin', '目前进展还不错。', '2026-09-20 13:01:00'),
('admin', 'lucy', '还有哪些功能没有完成?', '2026-09-20 13:02:00'),
('lucy', 'admin', '主要是消息通知和联系人功能。', '2026-09-20 13:03:00'),
('admin', 'lucy', '好的,我这边也在做消息功能。', '2026-09-20 13:04:00'),
-- query ↔ tom
('query', 'tom', '你知道聊天项目怎么做 WebSocket 吗?', '2026-09-20 14:00:00'),
('tom', 'query', '知道一些,可以用来做实时消息。', '2026-09-20 14:01:00'),
('query', 'tom', '我也准备把项目改成 WebSocket。', '2026-09-20 14:02:00'),
('tom', 'query', '这样聊天消息可以实时推送。', '2026-09-20 14:03:00'),
-- tom ↔ query
('tom', 'query', '联系人比较多的时候怎么办?', '2026-09-20 15:00:00'),
('query', 'tom', '不需要每个联系人都创建一个 WebSocket。', '2026-09-20 15:01:00'),
('tom', 'query', '一个用户维护一个 WebSocket 连接就可以了。', '2026-09-20 15:02:00');
select * from chat_mysql.messages;
INSERT INTO chat_mysql.messages
(sender_name, receiver_name, content, created_at)
VALUES
-- admin ↔ lily
('admin', 'lily', '你好,最近怎么样?', '2026-09-20 10:00:00'),
('lily', 'admin', '挺好的,你呢?', '2026-09-20 10:01:00'),
('admin', 'lily', '我也不错,最近在做聊天项目。', '2026-09-20 10:02:00'),
('lily', 'admin', '听起来不错,是用 Vue 做的吗?', '2026-09-20 10:03:00'),
('admin', 'lily', '对,前端使用 Vue2,后端使用 Node.js。', '2026-09-20 10:04:00'),
('lily', 'admin', '那数据库使用 MySQL?', '2026-09-20 10:05:00'),
('admin', 'lily', '对,目前正在完善聊天功能。', '2026-09-20 10:06:00'),
('lily', 'admin', '聊天记录是怎么保存的?', '2026-09-20 10:07:00'),
('admin', 'lily', '目前是保存在 messages 表里面。', '2026-09-20 10:08:00'),
('lily', 'admin', '一个消息对应一条数据吗?', '2026-09-20 10:09:00'),
('admin', 'lily', '对,每条消息都有自己的 id。', '2026-09-20 10:10:00'),
('lily', 'admin', '那发送人和接收人怎么区分?', '2026-09-20 10:11:00'),
('admin', 'lily', '通过 sender_name 和 receiver_name 两个字段区分。', '2026-09-20 10:12:00'),
('lily', 'admin', '这样查询两个人的聊天记录应该比较方便。', '2026-09-20 10:13:00'),
('admin', 'lily', '对,只需要判断双方的用户名即可。', '2026-09-20 10:14:00'),
('lily', 'admin', '比如查询 admin 和 lily 之间的消息?', '2026-09-20 10:15:00'),
('admin', 'lily', '没错,可以使用 OR 和 AND 组合条件。', '2026-09-20 10:16:00'),
('lily', 'admin', '那如果消息很多怎么办?', '2026-09-20 10:17:00'),
('admin', 'lily', '不能一次把所有消息都返回给前端。', '2026-09-20 10:18:00'),
('lily', 'admin', '应该使用分页查询吧?', '2026-09-20 10:19:00'),
('admin', 'lily', '对,比如一次只查询 10 条或者 20 条。', '2026-09-20 10:20:00'),
('lily', 'admin', '这样可以减少接口返回的数据量。', '2026-09-20 10:21:00'),
('admin', 'lily', '也可以提高页面加载速度。', '2026-09-20 10:22:00'),
('lily', 'admin', '最近聊天列表也是单独查询吗?', '2026-09-20 10:23:00'),
('admin', 'lily', '对,最近聊天只需要获取每个联系人的最新消息。', '2026-09-20 10:24:00'),
('lily', 'admin', '这样左边就不用加载完整聊天记录了。', '2026-09-20 10:25:00'),
('admin', 'lily', '对,点击联系人之后再加载具体的聊天记录。', '2026-09-20 10:26:00'),
('lily', 'admin', '这个设计比较合理。', '2026-09-20 10:27:00'),
('admin', 'lily', '我现在就是准备按照这个思路修改。', '2026-09-20 10:28:00'),
('lily', 'admin', '那 Vue 里面是不是也不用保存所有消息?', '2026-09-20 10:29:00'),
('admin', 'lily', '是的,只需要保存当前联系人的消息数组。', '2026-09-20 10:30:00'),
('lily', 'admin', '分页的时候再把历史消息添加进去?', '2026-09-20 10:31:00'),
('admin', 'lily', '对,可以把下一页的数据添加到数组前面。', '2026-09-20 10:32:00'),
('lily', 'admin', '那新发送的消息就添加到数组最后面?', '2026-09-20 10:33:00'),
('admin', 'lily', '没错,因为新消息的时间是最新的。', '2026-09-20 10:34:00'),
('lily', 'admin', '左边的最近聊天还需要移动到最上面。', '2026-09-20 10:35:00'),
('admin', 'lily', '对,可以使用 unshift 把它移动到第一位。', '2026-09-20 10:36:00'),
('lily', 'admin', '同时更新左边显示的最后一条消息。', '2026-09-20 10:37:00'),
('admin', 'lily', '这样聊天列表就会实时更新了。', '2026-09-20 10:38:00'),
('lily', 'admin', '如果切换联系人,消息数组怎么办?', '2026-09-20 10:39:00'),
('admin', 'lily', '可以按照联系人 id 分别保存。', '2026-09-20 10:40:00'),
('lily', 'admin', '比如 contactMessages[18] 保存 lily 的消息?', '2026-09-20 10:41:00'),
('admin', 'lily', '对,contactMessages[20] 就可以保存另一个人的消息。', '2026-09-20 10:42:00'),
('lily', 'admin', 'Vue2 动态增加这个属性需要注意响应式问题吧?', '2026-09-20 10:43:00'),
('admin', 'lily', '对,可以使用 this.$set 来创建新的消息数组。', '2026-09-20 10:44:00'),
('lily', 'admin', '这样切换联系人就比较方便了。', '2026-09-20 10:45:00'),
('admin', 'lily', '对,聊天页面的数据结构基本就确定了。', '2026-09-20 10:46:00'),
('lily', 'admin', '那接下来就可以测试分页加载了。', '2026-09-20 10:47:00'),
('admin', 'lily', '嗯,先测试一次查询 10 条消息。', '2026-09-20 10:48:00'),
('lily', 'admin', '然后再查询下一页历史消息。', '2026-09-20 10:49:00');