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

bootstrap增删改mysql

基础概念

Bootstrap 是一个流行的前端框架,用于快速开发响应式和移动优先的网站。它提供了丰富的 UI 组件和样式,可以简化网页设计和开发过程。MySQL 是一种关系型数据库管理系统,广泛用于存储和管理网站或应用程序的数据。

相关优势

  1. Bootstrap
    • 响应式设计:自动适应不同设备和屏幕尺寸。
    • 丰富的组件:提供按钮、表单、导航栏等多种 UI 组件。
    • 易于定制:可以通过 Sass 变量和混合来定制样式和组件。
  • MySQL
    • 开源:免费且开源,社区支持强大。
    • 高性能:优化的查询处理器和索引结构,支持高并发访问。
    • 可扩展性:支持各种存储引擎,易于扩展和维护。

类型

  • Bootstrap:前端框架
  • MySQL:关系型数据库管理系统

应用场景

  • Bootstrap:适用于任何需要快速构建响应式网站的项目,如企业官网、电商平台、社交媒体等。
  • MySQL:适用于需要存储和管理大量结构化数据的场景,如网站用户数据、商品信息、交易记录等。

增删改 MySQL 的示例

假设我们有一个简单的用户管理系统,使用 Bootstrap 和 MySQL 来实现用户的增删改功能。

数据库表结构

代码语言:txt
复制
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    role ENUM('admin', 'user') DEFAULT 'user'
);

前端页面(使用 Bootstrap)

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>User Management</title>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1>User Management</h1>
        <form id="userForm">
            <div class="form-group">
                <label for="name">Name</label>
                <input type="text" class="form-control" id="name" required>
            </div>
            <div class="form-group">
                <label for="email">Email</label>
                <input type="email" class="form-control" id="email" required>
            </div>
            <div class="form-group">
                <label for="role">Role</label>
                <select class="form-control" id="role">
                    <option value="admin">Admin</option>
                    <option value="user">User</option>
                </select>
            </div>
            <button type="submit" class="btn btn-primary">Add User</button>
        </form>
        <table class="table mt-4">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Email</th>
                    <th>Role</th>
                    <th>Actions</th>
                </tr>
            </thead>
            <tbody id="userTable">
                <!-- Users will be displayed here -->
            </tbody>
        </table>
    </div>

    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>
    <script>
        $(document).ready(function() {
            // Load users from the database
            loadUsers();

            // Handle form submission
            $('#userForm').submit(function(event) {
                event.preventDefault();
                const name = $('#name').val();
                const email = $('#email').val();
                const role = $('#role').val();

                $.ajax({
                    url: '/api/users',
                    method: 'POST',
                    data: { name, email, role },
                    success: function(response) {
                        loadUsers();
                        $('#userForm')[0].reset();
                    },
                    error: function(error) {
                        console.error(error);
                    }
                });
            });

            // Handle delete action
            $('#userTable').on('click', '.delete-btn', function() {
                const userId = $(this).data('id');
                $.ajax({
                    url: `/api/users/${userId}`,
                    method: 'DELETE',
                    success: function(response) {
                        loadUsers();
                    },
                    error: function(error) {
                        console.error(error);
                    }
                });
            });

            // Handle edit action
            $('#userTable').on('click', '.edit-btn', function() {
                const userId = $(this).data('id');
                const name = $(this).closest('tr').find('td:nth-child(2)').text();
                const email = $(this).closest('tr').find('td:nth-child(3)').text();
                const role = $(this).closest('tr').find('td:nth-child(4)').text();

                $('#name').val(name);
                $('#email').val(email);
                $('#role').val(role);

                $('#userForm').attr('action', `/api/users/${userId}`);
                $('#userForm').attr('method', 'PUT');
            });
        });

        function loadUsers() {
            $.ajax({
                url: '/api/users',
                method: 'GET',
                success: function(response) {
                    let html = '';
                    response.forEach(user => {
                        html += `
                            <tr>
                                <td>${user.id}</td>
                                <td>${user.name}</td>
                                <td>${user.email}</td>
                                <td>${user.role}</td>
                                <td>
                                    <button class="btn btn-sm btn-warning edit-btn" data-id="${user.id}">Edit</button>
                                    <button class="btn btn-sm btn-danger delete-btn" data-id="${user.id}">Delete</button>
                                </td>
                            </tr>
                        `;
                    });
                    $('#userTable').html(html);
                },
                error: function(error) {
                    console.error(error);
                }
            });
        }
    </script>
</body>
</html>

后端代码(假设使用 Node.js 和 Express)

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

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('Connected to MySQL database');
});

// Add user
app.post('/api/users', (req, res) => {
    const { name, email, role } = req.body;
    const sql = 'INSERT INTO users (name, email, role) VALUES (?, ?, ?)';
    db.query(sql, [name, email, role], (err, result) => {
        if (err) return res.status(500).send(err);
        res.status(201).send(result);
    });
});

// Get all users
app.get('/api/users', (req, res) => {
    const sql = 'SELECT * FROM users';
    db.query(sql, (err, result) => {
        if (err) return res.status(500).send(err);
        res.status(200).send(result);
    });
});

// Delete user
app.delete('/api/users/:id', (req, res) => {
    const { id } = req.params;
    const sql = 'DELETE FROM users WHERE id = ?';
    db.query(sql, [id], (err, result) => {
        if (err) return res.status(500).send(err);
        res.status(204).send();
    });
});

// Update user
app.put('/api/users/:id', (req, res) => {
    const { id } = req.params;
    const { name, email, role } = req.body;
    const sql = 'UPDATE users SET name = ?, email = ?, role = ? WHERE id = ?';
    db.query(sql, [name, email, role, id], (err, result) => {
        if (err) return res.status(500).send(err);
        res.status(200).send(result);
    });
});

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

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

  1. 数据库连接问题
    • 问题:无法连接到 MySQL 数据库。
    • 原因:可能是数据库服务器未启动、连接配置错误或权限问题。
    • 解决方法:检查数据库服务器是否启动,确认连接配置(如主机、端口、用户名、密码)是否正确,并确保数据库用户有足够的权限。
  • SQL 注入问题
    • 问题:用户输入可能导致 SQL 注入攻击。
    • 原因:直接将用户输入拼接到 SQL 查询中。
    • 解决方法:使用参数化查询或预处理语句来防止 SQL 注入。
  • 跨域请求问题
    • 问题:前端页面无法与后端 API 进行通信。
    • 原因:浏览器的同源策略限制。
    • 解决方法:在后端设置 CORS(跨域资源共享)头,允许前端域名访问 API。
  • 数据验证问题
    • 问题:用户提交的数据不符合预期格式或类型。
    • 原因:前端或后端没有进行充分的数据验证。
    • 解决方法:在前端使用表单验证,在后端使用数据验证库(如 Joi)来确保数据的正确性和安全性。

参考链接

希望这些信息对你有所帮助!如果有更多具体问题,欢迎继续提问。

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

相关·内容

mysql 主键自增语句_MySQL 自增主键

自增主键的单调性 为何会有单调性的问题? 这主要跟自增主键最大值的获取方式,以及存放位置有关系。 如果最大值是通过计算获取的,并且在某些情况下需要重新获取时,会因为最新的数据被删除而减小。...自增主键最大值怎么取的?存放到哪里?...MySQL 5.7 及之前的版本,自增主键最大值会在启动(重启)后从数据库中取出放到内存: SELECT MAX(ai_col) FROM table_name FOR UPDATE; 这样获取是通过计算的...从 MySQL 8.0 开始,自增主键最大值会在每次修改后写入到 redo log,并且在每个检查点写入引擎私有的系统表。 如果是正常重启,则读取系统表里的值。...参考文档 为什么 MySQL 的自增主键不单调也不连续 https://database.51cto.com/art/202004/614923.htm 《MySQL技术内幕——InnoDB存储引擎》

10.8K10
  • mysql主键自增策略_MySQL 自增主键机制

    Innodb引擎,mysql5.7之前,自增值保存在内存中,而且不会持久化自增值。...每次重启后第一次打开表,都会去查找自增值的最大值max(id), 并设置表当前自增值为max(id) + 1; mysql8.0, 自增值变更记录在了redo log中,重启时依靠redo log恢复重启之前的值...为了减少自增id锁带来的性能影响,mysql不会修改回去之前的自增值; 4. 自增锁的优化 a....而对于批量插入数据的语句(select … insert,replace … select 和 load data 语句),MySQL 有一个批量申请自增 id 的策略(注:该策略是导致自增 id 不连续的第三种原因...:语句执行过程中,第一次申请自增 id,会分配 1 个;1 个用完以后,这个语句第二次申请自增 id,会分配 2 个;2 个用完以后,还是这个语句,第三次申请自增 id,会分配 4 个;依此类推,同一个语句去申请自增

    9.5K50

    深入剖析 MySQL 自增锁

    在 MySQL 8.0 之前,InnoDB 锁模式默认为连续模式,值为1,而在 MySQL 8.0 之后,默认模式变成了交叉模式。至于为啥会改变默认模式,后面会讲。...交叉模式缺陷 要了解缺陷是什么,还得先了解一下 MySQL 的 Binlog。Binlog 一般用于 MySQL 的数据复制,通俗一点就是用于主从同步。...如果 MySQL 采用的格式为 Statement ,那么 MySQL 的主从同步实际上同步的就是一条一条的 SQL 语句。...基于 MySQL 默认 Binlog 格式从 Statement 到 Row 的变更,InnoDB 也将其自增锁的默认实现从连续模式,更换到了效率更高的交叉模式。...如果你可以断定你的系统后续不会使用 Binlog,那么你可以选择将自增锁的锁模式从连续模式改为交叉模式,这样可以提高 MySQL 的并发。

    3.3K40

    MySQL自增锁的探究

    2.5 自增锁 MySQL的自增锁是指在使用自增主键(Auto Increment)时,为了保证唯一性和正确性,系统会对自增字段进行加锁。...2.5.1 表的插入数据方式 我们之前在表中插入数据都是用最基本的insert,但insert语句的用法用很多,另外MySQL还提供replace语句,允许对表中的数据进行替换; insert用法: drop...1)插入原理 MySQL自增锁的实现机制是使用了一个名为"auto-increment lock"的互斥锁。...当使用INSERT语句插入一条新记录时,MySQL会自动为自增字段加锁,防止其他并发的插入操作同时获取相同的自增值。这个锁是在内部实现的,不需要用户手动创建或管理。...在搭建有MySQL主从复制的架构并且binlog日志格式为SBR时会出现主从数据不一致问题; 原因:当Master接收高并发量的insert语句时会将insert语句记录到binlog日志中,这些binlog

    17696

    深入剖析 MySQL 自增锁

    在 MySQL 8.0 之前,InnoDB 锁模式默认为连续模式,值为1,而在 MySQL 8.0 之后,默认模式变成了交叉模式。至于为啥会改变默认模式,后面会讲。...交叉模式缺陷 要了解缺陷是什么,还得先了解一下 MySQL 的 Binlog。Binlog 一般用于 MySQL 的数据复制,通俗一点就是用于主从同步。...如果 MySQL 采用的格式为 Statement ,那么 MySQL 的主从同步实际上同步的就是一条一条的 SQL 语句。...基于 MySQL 默认 Binlog 格式从 Statement 到 Row 的变更,InnoDB 也将其自增锁的默认实现从连续模式,更换到了效率更高的交叉模式。...如果你可以断定你的系统后续不会使用 Binlog,那么你可以选择将自增锁的锁模式从连续模式改为交叉模式,这样可以提高 MySQL 的并发。

    3K20
    领券