首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库JS实现点赞功能

基础概念

点赞功能是一种常见的Web应用交互功能,允许用户对内容(如文章、评论、图片等)表达喜欢或不喜欢的态度。在MySQL数据库中实现点赞功能,通常涉及以下几个基础概念:

  1. 用户表(Users):存储用户信息。
  2. 内容表(Contents):存储被点赞的内容信息。
  3. 点赞表(Likes):存储用户的点赞记录。

相关优势

  • 实时性:用户可以立即看到点赞数的变化。
  • 可扩展性:通过数据库设计,可以轻松处理大量点赞数据。
  • 数据一致性:使用事务确保点赞操作的原子性和一致性。

类型

  • 简单点赞:用户只能点赞一次。
  • 可取消点赞:用户可以点赞也可以取消点赞。
  • 点赞计数:统计每个内容的点赞总数。

应用场景

  • 社交媒体平台:用户可以点赞帖子、评论等。
  • 博客网站:读者可以点赞文章。
  • 电商网站:用户可以点赞商品。

实现步骤

数据库设计

代码语言:txt
复制
CREATE TABLE Users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL
);

CREATE TABLE Contents (
    content_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT
);

CREATE TABLE Likes (
    like_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    content_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES Users(user_id),
    FOREIGN KEY (content_id) REFERENCES Contents(content_id)
);

前端实现(JavaScript)

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点赞功能</title>
</head>
<body>
    <div id="content">
        <h1>文章标题</h1>
        <p>文章内容...</p>
        <button id="likeButton">点赞</button>
        <span id="likeCount">0</span>
    </div>

    <script>
        document.getElementById('likeButton').addEventListener('click', function() {
            fetch('/like', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ contentId: 1 }) // 假设内容ID为1
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('likeCount').textContent = data.likeCount;
            });
        });
    </script>
</body>
</html>

后端实现(Node.js + Express)

代码语言:txt
复制
const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');

const app = express();
app.use(bodyParser.json());

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'testdb'
});

db.connect(err => {
    if (err) throw err;
    console.log('Database connected!');
});

app.post('/like', (req, res) => {
    const { contentId } = req.body;
    const userId = 1; // 假设当前用户ID为1

    db.query('SELECT * FROM Likes WHERE user_id = ? AND content_id = ?', [userId, contentId], (err, results) => {
        if (err) throw err;

        if (results.length > 0) {
            // 用户已经点过赞,取消点赞
            db.query('DELETE FROM Likes WHERE user_id = ? AND content_id = ?', [userId, contentId], (err, result) => {
                if (err) throw err;
                updateLikeCount(contentId, -1, res);
            });
        } else {
            // 用户未点过赞,添加点赞记录
            db.query('INSERT INTO Likes (user_id, content_id) VALUES (?, ?)', [userId, contentId], (err, result) => {
                if (err) throw err;
                updateLikeCount(contentId, 1, res);
            });
        }
    });
});

function updateLikeCount(contentId, delta, res) {
    db.query('UPDATE Contents SET like_count = like_count + ? WHERE content_id = ?', [delta, contentId], (err, result) => {
        if (err) throw err;
        db.query('SELECT like_count FROM Contents WHERE content_id = ?', [contentId], (err, results) => {
            if (err) throw err;
            res.json({ likeCount: results[0].like_count });
        });
    });
}

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

可能遇到的问题及解决方法

  1. 并发问题:多个用户同时点赞可能导致数据不一致。
    • 解决方法:使用数据库事务和锁机制确保操作的原子性。
  • 性能问题:大量点赞操作可能导致数据库压力过大。
    • 解决方法:使用缓存(如Redis)来存储点赞数,定期同步到数据库。
  • 安全性问题:防止恶意刷赞。
    • 解决方法:增加验证码机制或限制单个用户的点赞频率。

通过以上设计和实现,可以有效地在MySQL数据库中实现点赞功能,并处理常见的相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

8分21秒

[MYSQL] 离谱! 用shell实现mysql_config_editor功能. mysql免密

51分57秒

14. 尚硅谷_Zepto_实战练习JS交互功能实现.avi

12分29秒

Python MySQL数据库开发 22 Flask框架的基本实现 学习猿地

4分51秒

31_尚硅谷_大数据JavaWEB_登录功能实现_JS去掉错误提示信息.avi

12分24秒

etl engine 通过MySQL binlog 模式 实现增量同步数据到 各种数据库

689
22分39秒

122_尚硅谷_以太坊项目二_去中心化eBay_web前端基本功能(五)上架商品JS实现

13分27秒

033-直播间模块-点赞布局

4分27秒

【玩转腾讯云】小白零基础入门微信小程序!【第三十五课】添加限时抢购功能

58分10秒

camunda实现bpm

59秒

一分钟了解Axios拦截器实现原理

19.8K
1分10秒

MySQL数据库LRU链表是一个动态的效果,会不断地有页加入,也不断有页被淘汰,那大致是如何计算冷热

42分42秒

ClickHouse在有赞的使用和优化

领券