SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

39丨WebSQL:如何在H5中存储一个本地数据库?

陈旸 2019-09-02
上一篇文章中,我们讲到了如何在 Excel 中使用 SQL 进行查询。在 Web 应用中,即使不通过后端语言与数据库进行操作,在 Web 前端中也可以使用 WebSQL。WebSQL 是一种操作本地数据库的网页 API 接口,通过它,我们就可以操作客户端的本地存储。
今天的课程主要包括以下几方面的内容:
本地存储都有哪些,什么是 WebSQL?
使用 WebSQL 的三个核心方法是什么?
如何使用 WebSQL 在本地浏览器中创建一个王者荣耀英雄数据库,并对它进行查询和页面的呈现?

本地存储都有哪些?什么是 WebSQL?

我刚才讲到了 WebSQL 实际上是本地存储。其实本地存储是个更大的概念,你现在可以打开 Chrome 浏览器,看下本地存储都包括了哪些。
Cookies 是最早的本地存储,是浏览器提供的功能,并且对服务器和 JS 开放,这意味着我们可以通过服务器端和客户端保存 Cookies。不过可以存储的数据总量大小只有 4KB,如果超过了这个限制就会忽略,没法进行保存。
Local Storage 与 Session Storage 都属于 Web Storage。Web Storage 和 Cookies 类似,区别在于它有更大容量的存储。其中 Local Storage 是持久化的本地存储,除非我们主动删除数据,否则会一直存储在本地。Session Storage 只存在于 Session 会话中,也就是说只有在同一个 Session 的页面才能使用,当 Session 会话结束后,数据也会自动释放掉。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • Middleware
    ```php
    <body>
        <div class="content">
            <label for="name"></label>
            <input id="name" type="text" name="name">
            <input type="button" value="查询" onclick="query()">
        </div>
        <script type="text/javascript">
            if(!window.openDatabase)
            {
                alert('您的浏览器不支持 WebSQL');
            }
            var db = openDatabase('wucai', '1.0', '王者荣耀数据库', 1024 * 1024);

            db.transaction(function (tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS heros (id unique, name, hp_max, mp_max, role_main)');
                tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10000, "夏侯惇", 7350, 1746, " 坦克 ")');
                tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10001, "钟无艳", 7000, 1760, " 战士 ")');
                tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10002, "张飞", 8341, 100, " 坦克 ")');
                tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10003, "牛魔", 8476, 1926, " 坦克 ")');
                tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10004, "吕布", 7344, 0, " 战士 ")');
                msg = ' 数据表创建成功,一共插入 5 条数据';
                
                console.log(msg);
             });

             function query(){
                var name = document.getElementById('name').value;
                
                var sql = 'SELECT * FROM heros where name like ?';
                 // 查询数据
                db.transaction(function (tx) {
                    tx.executeSql(sql, ['%'+name+'%'], function (tx, data) {
                    var len = data.rows.length;
                    console.log('查找到:' +len +'条记录');
                    console.log(data.rows);
                    });

                });
             }
        </script>
    </body>
    ```
    2019-09-02
    1
    2
  • Middleware
    WebSQL 这项标准已经废弃了吧

    https://dev.w3.org/html5/webdatabase/
    2019-09-02
    2
  • 许童童
    WebSQL的功能确实很强大,但是在目前的项目中还没有用到过。
    2019-09-02
    2
  • nimil
    这个功能厉害了

    作者回复: 嗯 虽然标准已经废弃了,不过在一些浏览器中还是可以使用

    2019-09-02
    2
  • ABC
    localForage这个库可以兼容处理IndexDB,localStorage,webSQL等
    2019-11-25
  • 雪飞鸿
    看了下文档IndexedDB虽然是NoSql,但也是基于事务来处理数据的。

    作者回复: 对的 IndexedDB有自己的事务处理机制

    2019-11-12
  • asdf100
    这两个都是长期有效,只能用户手动删除才可以的吗?

    作者回复: 除了在浏览器里手动删除以外,完全可以通过程序来控制本地的SQLite。
    同样使用executeSql函数即可,在executeSql函数后面可以有两个function分别代表成功之后的调用,以及SQL执行失败的调用。比如想要删除本地SQLite的heros数据表,可以使用:
    tx.executeSql("DROP TABLE heros",[],
    function(tx, result) {alert('Drop 成功');},
    function(tx, error) {alert('Drop 失败' + error.message);});

    2019-09-03
    1
  • humor
    session是什么概念呢?http请求不是无状态的么,难道一次http请求就是一个session吗
    2019-09-02
    1
收起评论
8
返回
顶部