那什么是SQL呢?SQL是一种操作关系型DB的说话,支撑创建表,插入表,修改和删除等等,还供给异常强大年夜的萌芽功能。
常见的关系型数据库厂商有MySQL、SQLite、SQL Server、Oracle,因为MySQL是免费的,所以企业一般用MySQL的居多。
Web SQL是前端的数据库,它也是本地存储的一种,应用SQLite实现,SQLite是一种轻量级数据库,它占的空间小,支撑创建表,插入、修改、删除表格数据,然则不支撑修改表构造,如删掉落一纵列,修改表头字段名等。然则可以把整张表删了。同一个域可以创建多个DB,每个DB有若干张表,如下图示意:
(2)创建一个DB
如下代码所示:
应用openDatabase,传4个参数,指定命据库大年夜小,如不雅指定太大年夜,浏览器会提示用户是否许可应用这么多空间,如Safari的提示:
如不雅不许可,浏览器将会抛异常:
QuotaExceededError (DOM Exception 22): The quota has been exceeded.
如许就创建了一个数据库叫order_test,返回了一个db对象,应用这个db对象创建一张表
(3)创建表
如下代码所示:
- db.transaction(function(tx){
- tx.executeSql("create table if not exists order_data(order_id primary key, format_city, lat, lng, price, create_time)", [], null, function(tx, err){
- throw(`execute sql failed: ${err.code} ${err.message}`);
- });
- });
传一个回调给db.transaction,它会传一个SQLTransaction的实例,它表示一个事务,然后调executeSql函数,传四个参数,第一个参数为要履行的SQL语句,第二个参数为选项,第三个为成功回调函数,第四个为掉败回调函数,这里我们抛一个异常,打印掉败的描述。我们履行的SQL语句为:
NoSQL做不了复杂萌芽,如膳绫擎的案例要按照日期/city归类的话,须要本身打开一个游标轮回做处理。所以我选择用Web SQL主如果这个原因。
create table if not exists order_data(order_id primary key, format_city, lat, lng, price, create_time)
意思是创建一张order_data表,它的字段有6个,第一个order_id为主键,主键用来标记这一列,并且不许可有反复的值。
如今往这张表插入数据。
(4)插入数据
预备好原始数据和对数据做一些处理,如下所示:
- var order = {
- orderId: 100314, format_city: "New York, NY, USA",
- lat: 40.7127837, lng: -74.0059413, price: 150, createTime: 1473884040000};//把时光戳转成年代日2017-06-08类型的var date = dataProcess.getDateStr(order.createTime);
然后履行插入:
就可以在浏览器控制台看到方才创建的数据库、表,如下图所示:
如不雅把方才的那条数据再插入一遍会怎么样呢?如刷新一下页面,它又从新履行。
(5)主键独一束缚
所以一般id是主动生成的,mysql可以指定某个整数字段为auto_increment,而web sql半数数字段不指定也是auto_increment,须要在创建的时刻指定当缁ぶ段为integer,如下语句: