您的位置:首页> HTML5教程> indexedDB

indexedDB 內键与外键

2019-7-21 21:26| 作者: admin| 查看: 401| 评论: 0|来自: 蚂蚁部落

indexedDB 內键与外键是对于主键来源的分类,非常简单的概念。

关于主键更多内容可以参阅indexedDB 数据库主键一章节。

一.內键(in-line key):

顾名思义,所谓內键就是以存储数据中的某个属性作为主键。

通过IDBDatabase.createObjectStore()方法的第二个对象参数的keyPath属性设置。

二.外键(out-of-line key):

与內键相对应,外键自然是非存储数据的属性,比如自增长数值作为主键。

三.代码实例:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script>
let students=[
  { 
    id:1001, 
    name:"张三", 
    age:21,
    sex:"男"
  },{ 
    id:1002, 
    name:"李四", 
    age:20,
    sex:"女"
  },{ 
    id:1003, 
    name:"王五", 
    age:19,
    sex:"女"
  }
];
let request = window.indexedDB.open("antzone", 1);
request.onupgradeneeded = (ev) => {
  let db = ev.target.result;
  if (!db.objectStoreNames.contains('students')) {
    let objectStore = db.createObjectStore('students',{keyPath:"id"});
    objectStore.createIndex("xingbie","sex",{ unique: false });
}
}
request.onsuccess = (ev) => {
  let db = ev.target.result;
  let transaction = db.transaction(['students'], 'readwrite');
  let objectStore = transaction.objectStore('students');
  for(let i=0;i<students.length;i++){
    objectStore.add(students[i]);
  }
}
</script>
</head>
<body>
  <p>为对象仓库批量添加数据</p>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/21/212805nc6o63v8dfrxzz6s.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).上述主键是內键。

(2).因为主键值是采用被存储数据中的一个属性。

(3).之所以叫做內键,通俗的理解就是主键属于数据内部的一个属性。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script>
let students=[
  { 
    id:1001, 
    name:"张三", 
    age:21,
    sex:"男"
  },{ 
    id:1002, 
    name:"李四", 
    age:20,
    sex:"女"
  },{ 
    id:1003, 
    name:"王五", 
    age:19,
    sex:"女"
  }
];
let request = window.indexedDB.open("antzone", 1);
request.onupgradeneeded = (ev) => {
  let db = ev.target.result;
  if (!db.objectStoreNames.contains('students')) {
    let objectStore = db.createObjectStore('students',{autoIncrement:true});
    objectStore.createIndex("xingbie","sex",{ unique: false });
  }
}
request.onsuccess = (ev) => {
  let db = ev.target.result;
  let transaction = db.transaction(['students'], 'readwrite');
  let objectStore = transaction.objectStore('students');
  for(let i=0;i<students.length;i++){
    objectStore.add(students[i]);
  }
}
</script>
</head>
<body>
  <p>为对象仓库批量添加数据</p>
</body>
</html>

上面代码中,主键采用自增长方式,代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/21/212835fttti924c117c2tw.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).主键采用自增长方式。

(2).上述主键是一个外键,因为它不是数据内部的属性。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部