AlaSQL 4.x 完全指南:在浏览器与 Node.js 中运行的 JavaScript SQL 数据库引擎

发布时间:2026/9/28 6:50:06
AlaSQL 4.x 完全指南:在浏览器与 Node.js 中运行的 JavaScript SQL 数据库引擎 嵌入式数据库数据工程【免费下载链接】alasqlAlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.项目地址https://gitcode.com/gh_mirrors/al/alasql点击查看免费下载AlaSQL读作à la SQL/ [ælæ ɛskju:ɛl]是一个开源 JavaScript SQL 数据库核心目标是查询速度与数据源灵活性可同时处理传统关系型表和无模式schema-lessJSON 数据。它运行于浏览器、Node.js 与移动应用既支持完整的数据操纵也支持从 Excel、CSV、JSON、TAB、IndexedDB、LocalStorage、SQLite 等异构来源直接导入、导出与查询。阅读本文后你将掌握 AlaSQL 的安装方式、SQL 基本用法、Promise 与异步文件查询、自定义函数与编译执行、CLI 工具、Web Worker 使用以及各类存储与 ETL 集成方案。本文以仓库根目录的 README.md 为主体并结合 package.json 与 src/ 目录下的源码实现逐条印证文档所述能力的真实落地细节。AlaSQL 是什么根据 README.md 的定义AlaSQL 是for JavaScript 的开源 SQL 数据库重点强调查询速度与数据源灵活性面向关系型数据和无模式数据两类场景适用的典型用途包括在胖客户端fat clients上进行快速的内存 SQL 数据处理用于 BI 与 ERP 应用通过多格式数据的导入、操作、导出实现轻量 ETL 与持久化方案支持所有主流浏览器、Node.js 与移动应用。项目追求速度的方式是充分利用 JavaScript 的动态特性来构建查询追求灵活性的方式是允许你直接对存储在 Excel.xls与.xlsx、CSV、JSON、TAB、IndexedDB、LocalStorage 与 SQLite 文件中的数据执行查询与导入导出。从仓库 package.json 可以看到项目当前版本为 4.19.1主入口为dist/alasql.fs.jsNode 环境浏览器构建为dist/alasql.min.js并同时提供exports字段与 TypeScript 类型声明types/alasql.d.tsNode 环境要求15。其定位正如 README 所述AlaSQL 正在朝一个符合 SQL-99 绝大部分语法、并额外加入 NoSQL 与图数据语法的完整数据库引擎发展。安装通过包管理器安装yarn add alasql # yarn npm install alasql # npm npm install -g alasql # 全局安装命令行工具从 package.json 的bin字段可以看到全局安装后项目会注册alasql命令对应脚本为./bin/alasql-cli.js另外还注册了alaserver命令对应./bin/alaserver.jsREADME 中称为 Alaserver 简易数据库服务器。在浏览器中以script引入script srchttps://cdn.jsdelivr.net/npm/alasql4/scriptREADME 明确指出浏览器引入的是alasql.min.js该构建对应 package.json 中的browser字段。需要注意调用文件类查询时总是异步的因此多文件查询需要链式调用。快速上手四种典型用法README 用四个最小可运行示例勾勒出 AlaSQL 的四大核心场景这里逐一展开并补充源码层面的说明。1. 传统 SQL 表/* create SQL Table and add data */ alasql(CREATE TABLE cities (city string, pop number)); alasql(INSERT INTO cities VALUES (Paris,2249975),(Berlin,3517424),(Madrid,3041579)); /* execute query */ var res alasql(SELECT * FROM cities WHERE pop 3500000 ORDER BY pop DESC); // res [ { city: Madrid, pop: 3041579 }, { city: Paris, pop: 2249975 } ]这是最经典的建表-插入-查询链路。alasql主函数定义在 src/10start.js统一入口alasql(sql, params, cb, scope)支持同步调用返回结果数组、回调异步调用、以及无参数时返回 fluent 接口的调用方式。当传入参数是数组时会自动走alasql.promise(...)的 Promise 通道见 src/18promise.js。2. 直接查询 JavaScript 对象数组var data [ {a: 1, b: 10}, {a: 2, b: 20}, {a: 1, b: 30}, ]; var res alasql(SELECT a, SUM(b) AS b FROM ? GROUP BY a, [data]); // res [ { a: 1, b: 40},{ a: 2, b: 20 } ]?占位符会绑定到第二个参数传入的数组。这是 AlaSQL 最常用的能力无需建表直接用 SQL 对内存中的 JS 数据做分组聚合。分组与聚合的底层实现在 src/423groupby.js其中SUM(b)这样的聚合函数会经由alasql.aggr注册表编译进生成的查询函数。3. 读取电子表格文件异步// file is read asynchronously (Promise returned when SQL given as array) alasql([ SELECT * FROM XLS(./data/mydata) WHERE lastname LIKE A% and city London GROUP BY name , ]) .then(function (res) { console.log(res); // output depends on mydata.xls }) .catch(function (err) { console.log(Does the file exist? There was an error:, err); });当传给alasql的是一个 SQL 字符串数组时函数返回 Promise见 src/10start.js。文件类数据源XLS/XLSX/CSV/TXT等读取总是异步的因此这里用.then/.catch接收结果。文件类 FROM 函数的注册表是alasql.from见 src/17alasql.js。4. 批量加载数据alasql(CREATE TABLE example1 (a INT, b INT)); // alasqls data store for a table can be assigned directly alasql.tables.example1.data [ {a: 2, b: 6}, {a: 3, b: 4}, ]; // ... or manipulated with normal SQL alasql(INSERT INTO example1 VALUES (1,5)); var res alasql(SELECT * FROM example1 ORDER BY b DESC); console.log(res); // [{a:2,b:6},{a:1,b:5},{a:3,b:4}]这里演示了一个重要特性alasql.tables中每张表的data属性可以直接整体赋值作为批量加载手段之后再通过 SQL 继续操作。README 特别提示如果熟悉 SQL应该明白合理使用索引对性能至关重要。配置选项AlaSQL 提供若干配置选项来改变行为既可以在 SQL 语句中设置也可以在调用前通过alasql.options对象设置。README 中重点提到如果经常在查询中使用NOW()把alasql.options.dateAsString设为false会加速查询——它将直接返回 JS Date 对象而不是日期的字符串表示。这个选项的默认值在 src/17alasql.js 中确认为dateAsString: true。该文件同时列出了完整的默认选项集这里整理成表均为 README 未展开、但源码可确认的配置项选项默认值作用errorlogfalse出错时记录到alasql.error而非抛出valueoftrue排序函数中是否使用 valueOfdatetimeformatsqlDATE/DATETIME 类型的格式化方式casesensitivetrue表名/列名大小写敏感并转小写modifierundefined默认修饰符RECORDSET/VALUE/ROW/COLUMN/MATRIX/TEXTSTRING/INDEXcolumnlookup10推断列名时预扫描的行数autocommittrue是否自动提交cachetrue是否启用编译查询缓存joinstaroverwriteSELECT * FROM a,b时重名字段的处理方式loopbreak100000循环语句的默认中断上限maxCteIterations1000递归 CTE 的最大迭代次数防止死循环dateAsStringtrueGETDATE()/NOW()是否返回字符串false 时返回 Date 对象csvStringToNumbertrue读取 CSV 时是否自动把字符串转换为数字false 则保留字符串类型其中cache选项直接关系编译执行链路在 src/17alasql.js 的alasql.dexec中SQL 会先按sql |joinstar: alasql.options.joinstar生成哈希命中db.sqlCache且dbversion未变化时直接复用编译后的函数缓存上限为alasql.MAXSQLCACHESIZE 10000。此外该文件还展示了各数据库方言的兼容开关tsql、mysql、postgres、oracle、sqlite、orientdb默认均为true以及 Excel 读取选项excel: {cellDates: true}。性能设计README 明确列出 AlaSQL 内置的经典 SQL 引擎优化手段查询以编译函数形式缓存对应上面提到的db.sqlCache与 AST 缓存db.astCache连接JOIN的表会被预建索引WHERE表达式会在连接前预过滤。配合 src/17alasql.js 中的alasql.compile实现可以看得更清楚compile会把单条 SQL 语句解析成 AST 并编译为一个可复用的 JavaScript 函数src/17alasql.js且该函数自带.promise(params)方法。README 给出的编译用法var ins alasql.compile(INSERT INTO one VALUES (?,?)); ins(1, 10); ins(2, 20);这里ins(1,10)等价于ins([1,10])参数以数组形式传入编译函数。测试 test/test020.js 也印证了自定义函数 编译的组合用法。你可能会喜欢的功能传统 SQL 全特性README 声明 AlaSQL 支持多层次的JOIN、VIEW、GROUP BY、UNION、PRIMARY KEY、ANY、ALL、IN、ROLLUP()、CUBE()、GROUPING SETS()、CROSS APPLY、OUTER APPLY、WITH SELECT以及子查询。对应的源码实现分布在 src/45union.jsUNION、src/43rollup.jsROLLUP/CUBE、src/46apply.jsAPPLY、src/67withselect.jsWITH SELECT等文件中。SQL 中使用自定义函数UDF把 JavaScript 与 SQL 的优点结合只需向alasql.fn对象添加新函数alasql.fn.myfn function (a, b) { return a * b 1; }; var res alasql(SELECT myfn(a,b) FROM one);alasql.fn是自定义标量函数注册表alasql.aggr是自定义聚合函数注册表src/17alasql.js。在编译阶段src/55functions.js 会检查函数名是否命中alasql.fn或alasql.aggr命中则直接以该注册函数参与代码生成。测试 test/test020.js 中定义了double/cubic后直接写SELECT a, double(a) AS b, cubic(a) AS c ...即验证了这一机制。自定义聚合函数类似自己写一个SUM(...)的完整签名可以从测试 test/test185.js 得到聚合函数接收(value, accumulator, stage)其中stage 1表示首个值返回初值stage 2表示累加返回v s之类stage 3表示最终输出。例如alasql.aggr.Summa function (v, s, stage) { if (stage 1) return v; else if (stage 2) return v s; else return s; }; var res alasql(VALUE OF SELECT Summa(b) FROM ?, [data]);直接对 JS 数据执行 SELECT按字段分组并统计每组记录数var data [ {a: 1, b: 1, c: 1}, {a: 1, b: 2, c: 1}, {a: 1, b: 3, c: 1}, {a: 2, b: 1, c: 1}, ]; var res alasql(SELECT a, COUNT(*) AS b FROM ? GROUP BY a, [data]);该能力本质上是把内存 JS 数组当作 FROM 数据源通过?参数传入底层实现在 src/420from.js。JavaScript Sugar 语法扩展AlaSQL 对传统 SQL 做了贴近 JavaScript 的扩展README 列出的语法糖包括直接书写 JSON 对象{a:1,b:[1,2,3]}用-访问对象属性obj-property-subproperty访问对象与数组元素obj-(a*1)调用 JS 函数obj-valueOf()用SELECT VALUE, ROW, COLUMN, MATRIX控制查询输出形态用INTO OBJECT()把箭头-展开的扁平列还原为嵌套对象用var SQL function(){/*SELECT MY MULTILINE SQL*/}的写法传入多行 SQL压缩代码后不可用。其中INTO OBJECT()的用法 README 给出了对照示例var data [{name: Oslo, info: {country: Norway, population: 700000}}]; // Standard output (flattened) alasql(SELECT name, info-country FROM ?, [data]); // [{ name: Oslo, info-country: Norway }] // With INTO OBJECT() (nested) alasql(SELECT name, info-country INTO OBJECT() FROM ?, [data]); // [{ name: Oslo, info: { country: Norway } }]INTO子句的底层分发逻辑在 src/830into.jsalasql.into注册表定义了所有INTO目标对象、表、文件等。读写 Excel 与原始数据文件AlaSQL 可以导入、导出 CSV、TAB、TXT 与 JSON 文件。文件扩展名可省略但调用文件总是异步的多文件查询需要链式串行执行var tabFile mydata.tab; alasql .promise([ SELECT * FROM txt(MyFile.log) WHERE [0] LIKE M%, // parameter-less query [SELECT * FROM tab(?) ORDER BY [1], [tabFile]], // [query, array of params] SELECT [3] AS city,[4] AS population FROM csv(./data/cities), SELECT * FROM json(../config/myJsonfile), ]) .then(function (results) { console.log(results); }) .catch(console.error);这里.promise的输入是一个数组元素可以是纯 SQL 字符串也可以是[query, params]二元组。对应实现见 src/18promise.jspromiseAll会校验每个元素长度必须在 1 到 2 之间并把所有语句按顺序串行执行sequentialPromiseResolver逐条.then累积结果数组。README 特别解释这样做是因为并行执行 CREATE TABLE 类语句时 IndexedDB 的版本号不会及时更新导致部分 DML 不执行。README 还给出了一个完整的CSV 转 ExcelETL 三步示例alasql([ CREATE TABLE IF NOT EXISTS geo.country, SELECT * INTO geo.country FROM CSV(country.csv,{headers:true}), SELECT * INTO XLSX(asia) FROM geo.country WHERE continent_name Asia, ]).then(function (res) { // results from the file asia.xlsx });三步分别是建表若不存在→ 从带表头的 CSV 读入 → 筛选出亚洲国家并导出为asia.xlsx。CSV(...)的第二个参数可以传配置对象例如{headers: true}表示首行作为列名。Excel 读写能力在 README 中被单列为特色AlaSQL ♥ Excel支持导出 Excel 2003.xls与 Excel 2007.xlsx并支持单元格着色等格式化相关源码见 src/831xls.js 与 src/833xlsx.js。读取 SQLite 数据库文件AlaSQL 可以读取但不能写入SQLite 数据文件底层依赖 SQL.js 库script srcalasql.js/script script srcsql.js/script script alasql([ ATTACH SQLITE DATABASE Chinook(Chinook_Sqlite.sqlite), USE Chinook, SELECT * FROM Genre, ]).then(function (res) { console.log(Genres:, res.pop()); }); /script流程是先用ATTACH SQLITE DATABASE把.sqlite文件挂载为数据库再用USE切换当前库最后正常执行SELECT。sql.js的调用总是异步的因此结果通过 Promise 获取示例中res.pop()取出最后一个语句——即SELECT * FROM Genre——的结果。SQLite 方言相关代码在 src/825sqlite.js 与 src/93sqljs.js。命令行工具CLINode 模块自带alasql命令行工具。README 给出的示例$ npm install -g alasql ## install the module globally $ alasql -h ## shows usage information $ alasql SET data [{a:1,b:?},{a:2,b:?}]; SELECT a, b FROM data; 10 20 [ 1, [ { a: 1, b: 10 }, { a: 2, b: 20 } ] ] $ alasql VALUE OF SELECT COUNT(*) AS abc FROM TXT(README.md) WHERE LENGTH([0]) ? 140 // Number of lines with more than 140 characters in README.md从 bin/alasql-cli.js 的实现可以确认更多细节命令行支持-h/--help、-v/--version输出版本号、-m/--minify压缩 JSON 输出、-f/--file从文件读取 SQL、-ast输出解析得到的 AST 而不是执行结果。命令行参数SQL 之后的数字参数会自动做数字转换bin/alasql-cli.js。它还支持管道当 SQL 包含txt()且标准输入不是 TTY 时会把 stdin 的内容作为数据传入例如alasql select count(*) from txt() city.txt可统计city.txt的行数。实验性功能README 将以下内容标记为实用但可能有坑的实验功能。图GraphAlaSQL 是多范型数据库支持对图进行搜索与操作// Who loves lovers of Alice? var res alasql(SEARCH / ANY( #Alice) name); console.log(res); // [Olga,Helen]图查询实现见 src/63createvertex.jsCREATE VERTEX与 src/35search.jsSEARCH。localStorage 与 DOM-storage可以把浏览器 localStorage 或 DOM-storage 当作持久化数据存储alasql(CREATE localStorage DATABASE IF NOT EXISTS Atlas); alasql(ATTACH localStorage DATABASE Atlas AS MyAtlas); alasql(CREATE TABLE IF NOT EXISTS MyAtlas.City (city string, population number)); alasql(SELECT * INTO MyAtlas.City FROM ?, [ [ {city: Vienna, population: 1731000}, {city: Budapest, population: 1728000}, ], ]); var res alasql(SELECT * FROM MyAtlas.City);README 特别说明Atlas是 localStorage 中的数据库名MyAtlas是内存中的 AlaSQL 数据库作为镜像。localStorage 有两种写入模式SET AUTOCOMMIT ON每条语句执行后立即写入 localStorage或SET AUTOCOMMIT OFF需要显式执行COMMIT把内存镜像中的全部数据一次性写回 localStorage。相关实现见 src/92localstorage.js 与 src/81commit.js。插件AlaSQL 支持插件通过REQUIRE语句安装相关实现见 src/88require.js。Alaserver简易数据库服务器甚至可以把 AlaSQL 当作一个极其简单的测试用服务器$ alaserver然后打开http://127.0.0.1:1337/?SELECT%20VALUE%20(2*2)。从 bin/alaserver.js 源码可见它基于 Node 内置http模块把 URL 查询串解码为 SQL 并执行返回 JSON端口默认 1337也可作为第一个参数传入。README 明确警告Alaserver 不是多线程、不支持并发、也不安全。Web Worker 使用AlaSQL 可以在 Web Worker 中运行但运行期间与 AlaSQL 的所有交互都必须是异步的。README 给出三种方式方式一浏览器构建自动使用 Web Worker。引入alasql-worker.min.js后所有调用自动转发给 Workerscript srcalasql-worker.min.js/script script var arr [{a: 1}, {a: 2}, {a: 1}]; alasql([[SELECT * FROM ?, [arr]]]).then(function (data) { console.log(data); }); /script方式二标准构建中手动启用。引入alasql.min.js后调用alasql.worker()script srcalasql.min.js/script script alasql.worker(); alasql([SELECT VALUE 10]) .then(function (res) { console.log(res); }) .catch(console.error); /script从 src/99worker.js 的实现可以看到alasql.worker()的完整机制当环境中存在Worker时它会根据页面已加载的script标签自动推断 alasql 脚本路径生成一个 Blob内容是importScripts(...)onmessage处理函数创建Worker实例并在onmessage回传时按id找到之前缓存的回调执行。非浏览器环境无Worker下alasql.worker()会直接抛错。方式三从 Worker 内部引入。用importScripts加载alasql.min.js后在 Worker 内使用importScripts(alasql.min.js);Webpack、Browserify、Vue 与 React Native 集成当面向浏览器打包时Webpack 与 Browserify 等工具可能会引入你不需要的模块。README 列出 AlaSQL 在不同环境可能依赖的模块Node.jsfs、net、tls、request、pathReact Nativereact-native、react-native-fs、react-native-fetch-blobVertxvertx平台无关AgonosticXLSX/XLS 支持依赖cptable、jszip、xlsx、cpexcel另有es6-promise。Webpack 的三种处理方式1. IgnorePlugin想手动控制引入哪些模块时最理想var IgnorePlugin require(webpack).IgnorePlugin; module.exports { ... // Will ignore the modules fs, path, xlsx, request, vertx, and react-native modules plugins:[new IgnorePlugin(/(^fs$|cptable|jszip|xlsx|^es6-promise$|^net$|^tls$|^forever-agent$|^tough-cookie$|cpexcel|^path$|^request$|react-native|^vertx$)/)] };2. module.noParse自 AlaSQL 0.3.5 起可用直接让 Webpack 不解析 AlaSQL从而避开所有动态require警告并避免eval与 CSP 冲突... //Dont parse alasql {module:noParse:[/alasql/]}3. script-loader上述两种都不满足时用 script-loader 在全局作用域加载 alasql//Load alasql in the global scope with script-loader import script!alasql;README 提示这种方式在 CSP 不允许eval的环境下可能引发问题。BrowserifyREADME 建议阅读 aboutexcluding/ignoring/shimming三篇文档并给出excluding示例var browserify require(browserify); var b browserify(./main.js).bundle(); //Will ignore the modules fs, path, xlsx [fs,path,xlsx, ... ].forEach(ignore { b.ignore(ignore) });Vue对于 Vue 等框架AlaSQL 无法自行访问 XLSX 库README 建议这样显式注入import alasql from alasql; import XLSX from xlsx; alasql.utils.isBrowserify false; alasql.utils.global.XLSX XLSX;alasql.setXLSX(XLSX)是源码中对应的另一种注入方式见 src/17alasql.js。jQuery使用 jQuery 时请务必传递原始事件对象event.originalEvent而不是 jQuery 包装后的事件。JSON 对象字面量可以在 SQL 中直接使用 JSON 对象深层比较请使用与!运算符alasql SELECT VALUE {a:1,b:2} {a:1,b:2} alasql SELECT VALUE {a:1,b:2} {a:1,b:2} true alasql SELECT VALUE {a:1,b:2}-b 2 alasql SELECT VALUE {a:1,b:(2*2)}-b 4这里SELECT VALUE表示只返回单值-b表示取出对象的b属性{a:1,b:(2*2)}中的(2*2)会被当作表达式求值。对象字面量的解析定义在 src/50expression.js 与 src/58json.js。已知限制README 明确指出项目存在 bug 与若干已知限制使用前应当了解保留字需转义AlaSQL 有很长的关键字清单用作列名时必须转义。例如字段名为key时应写SELECT key FROM ...类似需要转义的还有value,read,count,by,top,path,deleted,work,offset等。数据规模SELECT100 万条记录、或 JOIN 各含 1 万条记录的两张表是可行的更大的数据源可使用流式函数见 test/test143.js但负载是相乘的从 8 张以上、每张仅 100 行的表 SELECT 会明显变慢这是项目最高优先级改进项之一。事务受限目前仅 localStorage 支持事务因为项目改用了更复杂的 PRIMARY KEY / FOREIGN KEY 处理方式未来版本会重新全面开启事务。多表连接超过 2 张表的(FULL) OUTER JOIN与RIGHT JOIN结果不符合预期INNER JOIN与LEFT JOIN正常。同名字段不同表取同名字段时请使用别名SELECT a.id AS a_id, b.id AS b_id FROM ?。JSZip 版本当前不支持 JSZip 3.0.0请使用 2.x。子查询 JOIN直接JOIN一个子SELECT目前不可用建议改用WITH结构或先把子查询取到变量再作为参数传入。文件保存浏览器端保存文件依赖 FileSaver.js注意它在 Safari 8.0 中无法保存文件。测试与回归README 说明 AlaSQL 目前有 1200 多个回归测试使用mocha运行方式$ npm test或打开test/index.html进行浏览器内测试需要通过 localhost 提供服务例如http-server。从 package.json 可以看到当前npm test实际执行的是sh build.sh yarn test-only而test-only使用bun test --dots --preload ./test/bun-setup.js ./test/test[0-9]*.js ./test/test-*.js运行全部test/testNNN.js用例。AlaSQL 还提供 SQL 内的ASSERT语句来断言上一条语句的执行结果CREATE TABLE one (a INT); ASSERT 1; INSERT INTO ONE VALUES (1),(2),(3); ASSERT 3; SELECT * FROM one ORDER BY a DESC; ASSERT [{a:3},{a:2},{a:1}];ASSERT的实现见 src/89assert.js。此外项目使用SQLLOGICTEST进行 SQL-99 兼容性测试涉及约 200 万条查询与语句测试运行日志见 TESTLOG.md。重建解析器AlaSQL 的 SQL 解析器基于 Jison 生成语法源文件为 src/alasqlparser.jison生成产物为 src/alasqlparser.js。README 给出的重建步骤修改alasqlparser.jisonnpm install -g jisonnpm run jisonnpm test验证改动提交alasqlparser.jison与alasqlparser.js两个文件。对应 package.json 中的脚本为jison: jison ./src/alasqlparser.jison -o ./src/alasqlparser.js。周边生态与许可README 提到与 AlaSQL 搭配良好的生态D3.js整合数据子集用于可视化、Excel.xls/.xlsx导出与格式化、Meteor直接对 Meteor 集合查询、Angular.js把当前 scope 导出到 Excel、Google Maps从 Excel/CSV 准备地图数据源、Google Spreadsheets直接查询在线表格数据。仓库采用 MIT 许可见 LICENSE贡献规范见 CONTRIBUTING.md。项目被描述为OPEN Open Source Project欢迎各类贡献。小结从 README.md 与仓库源码的对照可以看到AlaSQL 的定位始终是内存优先、数据源灵活的 JavaScript SQL 引擎通过 src/10start.js 的统一入口接受同步/回调/Promise/fluent 四种调用方式通过 src/17alasql.js 完成 SQL 缓存与编译执行通过alasql.fn/alasql.aggr注册表实现 JavaScript 与 SQL 的无缝融合再通过alasql.from/alasql.into注册表打通 Excel、CSV、JSON、SQLite、localStorage、IndexedDB 等异构数据源。无论你是想用 SQL 处理内存中的 JS 数组、做浏览器端 ETL、还是想为 Node 应用加一个嵌入式 SQL 层都可以从本文给出的示例出发在仓库 test/ 目录下 1200 多个回归用例中找到更多可复制的实战场景。赞分享嵌入式数据库数据工程【免费下载链接】alasqlAlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.项目地址https://gitcode.com/gh_mirrors/al/alasql点击查看免费下载相关推荐AlaSQL完全指南JavaScript中的极速SQL数据库引擎你还在为前端数据处理效率低而烦恼还在为客户端SQL查询实现复杂而头疼AlaSQLà la SQL作为一款开源的JavaScript SQL数据库引擎正嵌入式数据库数据工程AlaSQL浏览器中的JavaScript SQL数据库革命AlaSQL浏览器中的JavaScript SQL数据库革命 AlaSQL是一个革命性的开源JavaScript SQL数据库引擎它将传统SQL的强大功能与嵌入式数据库数据工程AlaSQL轻量级JavaScript SQL数据库引擎AlaSQL轻量级JavaScript SQL数据库引擎 项目介绍 AlaSQL是一款开源的JavaScript SQL数据库引擎专注于查询速度和数据源的灵嵌入式数据库数据工程上一篇零基础开发Seal插件3步让你的App支持任意视频网站下载下一篇超实用DBeaver性能监控仪表板模板3步打造专属数据库监控视图创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考