🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【可复制运行】SQL入门:为网页创作者量身打造的数据库操作第一步

“数据库和SQL看起来好复杂……”“总觉得要在黑屏上敲一堆命令,好难接近。”如果你是网页开发人员,这样的感觉或许并不少见。数据库似乎是属于服务器端的领域,感觉离自己很遥远。

但是,如果你可以直接在浏览器上运行SQL,而不需要任何复杂的环境设置,你会不会想试一试呢?

本文就是为像你这样初次接触SQL的网页创作者准备的“体验式入门工具包”。目的只有一个:通过“复制就能运行的代码”,让你亲身感受到SQL的有趣与强大。当你阅读完本篇文章时,相信你已经踏出了操作数据库的第一步,对SQL的畏惧也将转化为期待和兴奋。

SQL和数据库到底是什么?

如果用身边的事物来比喻的话……

我们先从术语整理开始。为了避免技术门槛太高,下面用生活中常见的事物做个比喻:

所以说,掌握SQL,就像掌握了一种“魔法指令”,可以自由地从庞大的数据仓库中提取你想要的信息。

热身运动!先创建一个练习用的表

任何事情都要从准备开始。我们来准备一个练习用的表,名字叫“Users”,里面将存储用户的ID、姓名、年龄和城市等信息。

以下SQL代码将创建该表并插入5条示例数据。现在你只需要浏览了解它的写法即可,不需要完全理解。

示例代码:创建表并插入数据

CREATE TABLE Users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

INSERT INTO Users (id, name, age, city) VALUES
(1, '田中', 25, '东京'),
(2, '佐藤', 32, '大阪'),
(3, '铃木', 20, '东京'),
(4, '高桥', 40, '福冈'),
(5, '渡边', 28, '大阪');

SQL基础!使用SELECT提取数据

在SQL中最常用的就是SELECT语句,它用于从表中提取数据,是学习SQL的基础。

比如,我们想获取Users表中的所有数据,写法如下:

示例代码:提取所有数据

SELECT * FROM Users;

来逐条解释一下:

是不是很简单?你就是在告诉数据库:“把Users表中所有内容都拿出来!”

进阶应用:只获取你需要的数据

大多数时候我们并不需要所有数据,而是“只想要符合某些条件的数据”。这时就需要使用WHERE子句。

比如,只想看住在东京的用户,可以在SELECT语句中加上WHERE city = '东京'

示例代码:按条件提取数据

SELECT * FROM Users WHERE city = '东京';

SELECT * FROM Users WHERE age >= 30;

你只需要更换WHERE后的条件,就可以从庞大的数据中提取出你需要的内容,这正是SQL强大的魅力所在。

【正式体验】只用HTML即可运行SQL!

终于等到这一步了!现在,你可以实际体验SQL的运行了。以下是完全可以独立运行的HTML代码,复制它就可以开始操作。

请将代码复制到VSCode等文本编辑器中,并保存为“sql-practice.html”。然后用Chrome等浏览器打开这个文件,你将看到一个属于你的SQL执行环境!

在左边的文本框中输入上面学到的SELECT语句,然后点击“执行SQL”按钮,右边就会显示结果表格。可以自由修改SQL语句试试看!

示例代码:纯HTML即可运行的SQL环境

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>SQL 执行环境</title>
    <style>
        body { font-family: sans-serif; display: flex; gap: 20px; padding: 20px; background-color: #f9f9f9; }
        .container { flex: 1; display: flex; flex-direction: column; background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
        textarea { height: 150px; border: 1px solid #ccc; border-radius: 4px; padding: 10px; font-family: monospace; font-size: 14px; margin-top: 10px;}
        button { background-color: #007bff; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; margin-top: 10px; font-size: 16px; }
        button:hover { background-color: #0056b3; }
        table { border-collapse: collapse; width: 100%; margin-top: 10px; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        #error { color: #d9534f; font-weight: bold; margin-top: 10px; }
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.10.3/sql-wasm.js"></script>
</head>
<body>
    <div class="container">
        <h3>输入 SQL</h3>
        <textarea id="sql-input">SELECT * FROM Users;</textarea>
        <button onclick="executeSql()">执行 SQL</button>
        <div id="error"></div>
    </div>
    <div class="container">
        <h3>执行结果</h3>
        <div id="result-table"></div>
    </div>
    <script>
        let db;
        async function initDb() {
            try {
                const config = { locateFile: filename => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.10.3/${filename}` };
                const SQL = await initSqlJs(config);
                db = new SQL.Database();
                const initialSql = `
                    CREATE TABLE Users (id INT, name VARCHAR(50), age INT, city VARCHAR(50));
                    INSERT INTO Users (id, name, age, city) VALUES
                    (1, '田中', 25, '东京'), (2, '佐藤', 32, '大阪'), (3, '铃木', 20, '东京'),
                    (4, '高桥', 40, '福冈'), (5, '渡边', 28, '大阪');
                `;
                db.run(initialSql);
                executeSql();
            } catch (e) { document.getElementById('error').textContent = "初始化数据库失败: " + e.message; }
        }
        function executeSql() {
            const sqlInput = document.getElementById('sql-input').value;
            const errorEl = document.getElementById('error');
            const resultEl = document.getElementById('result-table');
            errorEl.textContent = '';
            resultEl.innerHTML = '';
            try {
                const results = db.exec(sqlInput);
                if (results.length > 0) { resultEl.appendChild(createTable(results[0])); }
            } catch (e) { errorEl.textContent = "错误: " + e.message; }
        }
        function createTable(result) {
            const table = document.createElement('table');
            const thead = document.createElement('thead');
            const tbody = document.createElement('tbody');
            const headerRow = document.createElement('tr');
            result.columns.forEach(col => {
                const th = document.createElement('th');
                th.textContent = col;
                headerRow.appendChild(th);
            });
            thead.appendChild(headerRow);
            result.values.forEach(row => {
                const tr = document.createElement('tr');
                row.forEach(cell => {
                    const td = document.createElement('td');
                    td.textContent = cell;
                    tr.appendChild(td);
                });
                tbody.appendChild(tr);
            });
            table.appendChild(thead);
            table.appendChild(tbody);
            return table;
        }
        initDb();
    </script>
</body>
</html>

必须了解!使用 SQL 时的注意事项

SQL 功能强大,但在 Web 应用中使用时需要特别注意,最重要的问题就是 SQL 注入攻击

SQL 注入是一种攻击方式,攻击者通过网站输入表单注入恶意 SQL 语句,可能导致数据库被非法操作或数据被盗。

防范的关键在于不要将用户输入直接拼接到 SQL 语句中。在实际开发中,应使用“占位符”机制(Prepared Statements)来安全处理用户输入。

总结:迈出下一步

通过这次“复制即运行”的体验,希望你对 SQL 感到更亲切了。不需要黑色终端,只要用对的“语言”就能让数据动起来。

本文主要介绍了 SELECT 查询,其实还有 UPDATE 更新、DELETE 删除等命令,欢迎在提供的 HTML 环境中尽情尝试。

当你能够熟练使用 SQL 操作数据库时,作为 Web 开发者的能力将得到极大提升!