fix: 演示页移除不支持的BETWEEN/IF EXISTS语法 + 纯注释语句过滤
CI / test (18.x) (push) Waiting to run
CI / test (20.x) (push) Waiting to run
CI / test (22.x) (push) Waiting to run
CI / test (24.x) (push) Waiting to run

This commit is contained in:
thzxx
2026-07-26 17:53:33 +08:00
parent 30026ff08d
commit 287f2a2b22
+24 -22
View File
@@ -205,7 +205,12 @@ async function runQuery() {
const sql = sqlInput.value.trim(); const sql = sqlInput.value.trim();
if (!sql || !db) return; if (!sql || !db) return;
const statements = sql.split(';').map(s => s.trim()).filter(s => s.length > 0); const statements = sql.split(';').map(s => s.trim()).filter(s => {
// 过滤空语句和纯注释语句
if (s.length === 0) return false;
const nonComment = s.split('\n').filter(l => !l.trimStart().startsWith('--')).join('\n').trim();
return nonComment.length > 0;
});
try { try {
const allResults = []; const allResults = [];
@@ -390,24 +395,24 @@ WHERE id IN (
SELECT user_id FROM orders SELECT user_id FROM orders
WHERE amount = (SELECT MAX(amount) FROM orders) WHERE amount = (SELECT MAX(amount) FROM orders)
);`, );`,
tx: `-- 事务:插入用户及其订单(全部成功才提交) tx: `-- 事务演示:使用 db.transaction() API
-- 使用 db.transaction() API(这里有演示限制) -- 查询用户 Alice
-- 模拟事务场景:先查余额,再插入订单
SELECT * FROM users WHERE id = '1'; SELECT * FROM users WHERE id = '1';
-- 为 Alice 插入新订单
INSERT INTO orders VALUES ('o99', '1', 'Headphones', 199, 1); INSERT INTO orders VALUES ('o99', '1', 'Headphones', 199, 1);
-- 查看 Alice 的订单汇总
SELECT u.name, COUNT(*) as order_count, SUM(o.amount) as total SELECT u.name, COUNT(*) as order_count, SUM(o.amount) as total
FROM users u INNER JOIN orders o ON u.id = o.user_id FROM users u INNER JOIN orders o ON u.id = o.user_id
WHERE u.id = '1' WHERE u.id = '1'
GROUP BY u.name; GROUP BY u.name;
-- 回滚演示:记得用 db.transaction() 包裹`, -- 生产环境用 db.transaction() 包裹保证原子性`,
scalar: `-- 聚合无 GROUP BY → 单行结果 scalar: `-- 聚合无 GROUP BY 返回单行
SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users; SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;
-- 年龄大于平均值的用户(标量子查询) -- 年龄大于平均值的用户
SELECT name, age FROM users SELECT name, age FROM users
WHERE age > (SELECT AVG(age) FROM users); WHERE age > (SELECT AVG(age) FROM users);
@@ -416,8 +421,8 @@ SELECT u.name, SUM(o.amount) as spent
FROM users u INNER JOIN orders o ON u.id = o.user_id FROM users u INNER JOIN orders o ON u.id = o.user_id
GROUP BY u.name GROUP BY u.name
HAVING SUM(o.amount) > (SELECT AVG(amount) FROM orders);`, HAVING SUM(o.amount) > (SELECT AVG(amount) FROM orders);`,
cascade: `-- 外键级联:先创建带外键的表 cascade: `-- 外键级联:重建 orders 表带 CASCADE
DROP TABLE IF EXISTS orders; DROP TABLE orders;
CREATE TABLE orders ( CREATE TABLE orders (
id STRING PRIMARY KEY, id STRING PRIMARY KEY,
@@ -427,24 +432,24 @@ CREATE TABLE orders (
quantity NUMBER DEFAULT 1 quantity NUMBER DEFAULT 1
); );
-- 重新插入测试数据 -- 重新插入数据
INSERT INTO orders VALUES ('o1', '1', 'Laptop', 1200, 1); INSERT INTO orders VALUES ('o1', '1', 'Laptop', 1200, 1);
INSERT INTO orders VALUES ('o2', '1', 'Mouse', 50, 2); INSERT INTO orders VALUES ('o2', '1', 'Mouse', 50, 2);
INSERT INTO orders VALUES ('o3', '2', 'Keyboard', 150, 1); INSERT INTO orders VALUES ('o3', '2', 'Keyboard', 150, 1);
-- 查看用户和订单 -- 查看关联数据
SELECT u.name, o.product, o.amount SELECT u.name, o.product, o.amount
FROM users u INNER JOIN orders o ON u.id = o.user_id; FROM users u INNER JOIN orders o ON u.id = o.user_id;
-- 删除用户1 → 其订单自动级联删除 -- 删除 Alice (id=1) 订单自动级联删除
DELETE FROM users WHERE id = '1'; DELETE FROM users WHERE id = '1';
-- 确认:只剩用户2的订单 -- 确认级联结果
SELECT u.name, o.product, o.amount SELECT u.name, o.product, o.amount
FROM users u LEFT JOIN orders o ON u.id = o.user_id;`, FROM users u LEFT JOIN orders o ON u.id = o.user_id;`,
adv: `-- 复杂 WHERE:年龄20-30之间且名字不是Bob adv: `-- 复杂条件:年龄 20-30不是 Bob
SELECT * FROM users SELECT * FROM users
WHERE age BETWEEN 20 AND 30 AND name != 'Bob' WHERE age >= 20 AND age <= 30 AND name != 'Bob'
ORDER BY age DESC; ORDER BY age DESC;
-- DISTINCT 去重 -- DISTINCT 去重
@@ -458,12 +463,9 @@ WHERE o.amount >= 50
ORDER BY o.amount DESC ORDER BY o.amount DESC
LIMIT 5 OFFSET 0; LIMIT 5 OFFSET 0;
-- 子查询 + 聚合混合 -- NOT LIKE 模糊排除
SELECT u.name, ( SELECT * FROM users
SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id WHERE name NOT LIKE 'A%' AND age > 20;`
) as order_count
FROM users u
WHERE u.age >= 25;`
}; };
function loadPreset(name) { function loadPreset(name) {