web sql indexedDB
了解sql
cookies
浏览器限制最大只能4k
localstorage/sessionstorage
适合小数据量的储存,firefox/chrome限制最大5m。
localStorage是以字符串形式存储的,存之前要先用 JSON.stringify 变成字符串, 取出的时候使用JSON.parse 恢复成对应的格式
复杂数据管理(webSQL)
WEB SQL 是前端数据库,它是本地储存的一种,使用SQLite实现,SQLite实现,它是一种轻量级的数据库,占用空间小,支持创建表,插入、修改、删除表格数据,但是不支持修改表结构(如删掉一纵列,修改表头等),不过可以把整张表删了
同一个域可以创建多个db,每个db有若干张表。如果单张表指定的空间太大,浏览器会提示用户是否允许使用这么多的空间。
firefox 不支持
/**
* 四个参数
* 1. dbName 2. dbVersion 3. dbDescription 4. dbMemory
*/let db = window.openDatabase("db_test","v1.0","this is webSQL ","dbMemory"
)
创建表
/**
* db.transaction,它会传入一个SQLTransaction的实例,表示一个事务,然后调用executeSql函数,传入四个参数
* 1. sql语句 2. 参数选项 3. 成功的回调函数 4. 失败的回调函数
*/
db.transaction(tx=>{tx.executeSql("create table if not exists order_data(order_id primary key,format_city,lat,lng,price,create_time)",[],null,(tx,err)=>{throw(`execute sql failed: ${err.code} ${err.message}`)})
})// 描述 : 创建一张order_data表,它的字段有6个,order_id为主键(主键用来标志这一行,并且不允许有重复的值)
插入数据
db.transaction(tx=>{console.log(tx)tx.executeSql(`insert into order_data values(${order.orderId},'${order.format_city}',${order.lat},${order.lng},${order.price},${order.createTime})`)},(err)=>{console.log("操作失败",err)
})
实例
/**
* @param dbName 数据库名字
* @param version 数据库版本
* @param description 数据库描述
* @param memory 数据库内存容量
* @param create 建表
* @param tables 表格字段
* @param values 插入字段
*/
function websql(obj){let {db,dbName,version,description,memory,create,tableName,tables,insert,values,insertTable} = objif(dbName && version && description && memory){return window.openDatabase(dbName,version,description,memory)}else if(db && tableName && create && tables){createTable(db,tableName,tables,insert,)}else if(db && insert && values){tableInsert(db,values,tableName,insertTable)}
}
function createTable(db,tableName,tables,insert,values){ // 创建db.transaction(tx=>{tx.executeSql("create table if not exists "+tableName+"(" + tables +")",[],(db,res)=>{ // 成功的函数console.log(res)insert && values && db.executeSql("insert into order_data values("+values+")")},(tx,err)=>{ // 失败回调console.log(tx)throw(`execute sql failed : ${err.code} ${err.message}`)})})
}
function tableInsert(db,values,tableName,insertTable){ // 插入db.transaction(tx=>{tx.executeSql("insert into "+tableName+"("+insertTable+") values("+values+")")},(err)=>{console.log("插入失败",err)})
}
let db = websql({dbName:'test_db',version:'v1.0',description:"qiphon's db",memory:2*1024*1024
})
// console.log(db)
db && websql({db,create:1,tableName:"student2",tables:'id integer primary key,score,create_time',
})
db && websql({db,insert:1,tableName:"student2",insertTable:"score, create_time",values:`101,${new Date().getTime()}`
})
主键约束
如果插入一个重复的主键,这里为order_id,executeSql 会报错,所以一般id是自动生成的,MySQL可以指定某个整数字段为auto_increment,而webSQL 对整数字段不指定也是auto_increment,需要在创建的时候指定当前字段为integer
create table student(id integer primary key,age,score)insert into student(age,score) values(19,87)
select 查询
select city as "城市",count(order_id) as count, sum(price) as price from table group by city order by date desc limit 0,10select id form table where id = ${order_id}
创建索引
主键,自动会有索引,其他字段需要手动创建索引,创建索引会提高查询效率
create index if not exists index_score on student(score)
关系型数据库的优缺点
1. SQL支持非常复杂的查询,可以联表查询、使用正则表达式查询、嵌套查询,还可以写一个独立的SQL脚本
2. 缺点:
1. 不方便横向扩展,如果给数据表添加一个字段,当这个字段达到亿级,操作的复杂性会变得非常高2. 海量数据用SQL联表查询性能将会非常差3. 关系型数据库为保持事物的一致性特点,难以应对高并发
非关系型数据库
- 非关系型数据库根据他的存储特点,常用的有
-
- key-value 型,如 Redis/IndexedDB,value可以为任意的数据类型
- JSON/document 型,如mongoDB,value按照一定的格式,可以对value字段做索引,IndexDB也支持
非关系型数据库也叫NoSQL数据库。是not Only SQL 的简写,意思是不仅仅是SQL,但实际它和SQL没有什么关系,只是为了让大家感觉他不是太异类。
它的特点是存储比较灵活,但是查找没有像关系型SQL一样好用,适用于数据量很大,只需要单表key查询,一致性不用很高的场景。
IndexedDB
IndexedDB 是本地存储的第三种方式,它是非关系型数据库。它的建立数据库、建表、插入数据等操作
SQL 注入
// 问题示例
select * form order_data where user_id = 2342342323 and state = '${userData.state}'// 脚本注入的方法
select * form order_data where user_id = 2342342323 and state = 'ca' union select * from order_data where '' = '';
分布式数据库
如果网站的访问量太大,一个数据库很可能扛不住,需要多搞几台相同的数据库分担压力,但是要保证这几个数据库数据一致性。有很多解决方案,最简单的如mySQL的replication
前端的应如果不需要兼容ie 和firefox 那么就可以直接使用 indexedDB 和 webSQL
web sql indexedDB相关推荐
- HTML5本地存储——Web SQL Database
在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...
- HTML5 离线存储之Web SQL
HTML5 在离线存储之Web SQL 本篇没有考虑异步,多线程及SQL注入 WebDatabase 规范中说这份规范不再维护了,原因是同质化(几乎实现者都选择了Sqlite), 且不说这些,单看在H ...
- HTML5 Web SQL数据库
HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs. 如果你是一个 We ...
- HTML5 Web SQL
Web Sql Database,中文翻译作"本地数据库",是随着HTML5规范加入的在浏览器端运行的轻量级数据库. 在HTML5中,大大丰富了客户端本地可以存储的内容,添加了很多 ...
- html日期写入数据库,javascript – 在HTML5 Web SQL数据库中对日期时间进行排序
我无法找到解决问题的方法. 我有一个HTML5 Web SQL数据库,其表格如下: db.transaction(function(tx) { tx.executeSql("CREATE T ...
- Web SQL Database 之 SQLite语法
Web SQL Database 之 SQLite语法 目录(?)[+] 转自:http://www.cnblogs.com/helloandroid/articles/2150272.html id ...
- JS 新建web sql 数据表
//新建web sql数据库数据表var tbName="tableName";var strSQL="create table if not exists tableN ...
- html 5 本地数据库(Web Sql Database)
基于HTML5的Web DataBase 可以让你在浏览器中进行数据持久地存储管理和有效查询,假设你的离线应用程序有需要规范化的存储功能 本文讲述如何使用核心方法openDatabase.transa ...
- html5 多页面共享数据库,可以跨页面使用HTML5 Web SQL数据库吗?(Can HTML5 Web SQL databases be used across pages?)...
可以跨页面使用HTML5 Web SQL数据库吗?(Can HTML5 Web SQL databases be used across pages?) 这可能是一个非常简单的问题,请原谅我的无知,但 ...
最新文章
- 让你提升命令行效率的 Bash 快捷键
- go 接收 ffmpeg avpacket
- T-SQL 2 Tips: 1.计算任意两日期之间的周一到周日分别各有几个! 2.根据出生日期计算精确年龄!...
- Properties类与IO流
- 需要vmwareinstalldisk上的文件vmnet_手机上一键就能进行PDF与其他文件的相互转换,果然厉害到不行...
- redis——redis主从复制
- 4 截图_十年漫迷舍不得删的4张截图,有大汗淋漓的香磷,满满的都是回忆
- 报错:mysqldump‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- 【100题】第三十六 比赛淘汰问题(谷歌笔试)
- 福一中招聘计算机教师,2017福建福州一中招聘拟聘公示
- 设计模式-建造者模式(Builder Pattern)
- scala问题解决sbt下载过慢的问题
- Windows Phone 地图定位 及导出GPX文件
- 120、华为9300交换机配置命令手册
- 新建web.xml文件头报错报红xmlns=http://xmlns.jcp.org/xml/ns/javaee,http://xmlns.jcp.org/xml/ns/javaee/web-ap
- office邮箱不能预览附件问题
- Scratch五子棋
- 一文搞懂PV、UV、VV、IP及其关系与计算
- PowerDesigner16.5如何导出表到word的方法
- 转载 sap FI-CO总账科目简析
热门文章
- SCD-缓慢变化维-拉链表
- 多WLAN口路由器原理分析
- 计算机组成原理 存储器
- java填充word文档_如何使Word文档可填充但不可编辑
- 扩增子图表解读4曼哈顿图:差异OTU或Taxonomy
- Chapter3-线性模型线性模型
- html5 里面的type=”search“ ,h5版,点击手机键盘上的 ‘搜索”,”前往“等按钮,进行搜索
- solidity msg.sender.transfer发送给谁
- 手机图形计算器matlab,科学图形计算器 Mathlab-科学图形计算器手机版下载V4.12-西西软件下载...
- 精准控制的开关电脉冲表征GST薄膜的相变行为(2121.8.29,cyy)