【发布时间】:2014-09-23 13:27:06
【问题描述】:
据此link
在SQL中使用主键(student_id)创建一个表,如下所示:
CREATE TABLE students(student_id CHAR(4) NOT NULL,
lastname CHAR(15), firstname CHAR(15), PRIMARY KEY(student_id));
在 Berkeley DB 中,我们可以这样做,使用以下代码:
struct student_record {
char student_id[4];
char last_name[15];
char first_name[15];
};
DB *dbp, *sdbp;
int ret;
/* Open/create primary */
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
handle_error();
if ((ret = dbp->open(dbp,
"students.db", NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
handle_error();
从应用程序的角度来看,将内容放入数据库的工作方式与没有二级索引的情况完全相同;可以简单地将记录插入主数据库。在 SQL 中,会执行以下操作:
INSERT INTO student
VALUES ("WC42", "Churchill ", "Winston ");
在伯克利数据库中,有一个:
struct student_record s;
DBT data, key;
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
memset(&s, 0, sizeof(struct student_record));
key.data = "WC42";
key.size = 4;
memcpy(&s.student_id, "WC42", sizeof(s.student_id));
memcpy(&s.last_name, "Churchill ", sizeof(s.last_name));
memcpy(&s.first_name, "Winston ", sizeof(s.first_name));
data.data = &s;
data.size = sizeof(s);
if ((ret = dbp->put(dbp, txn, &key, &data, 0)) != 0)
handle_error(ret);
我的问题:
当我们调用db_create()时,我们是否设置了主键(student_id)?如果不是,如何根据student_id 字段使行唯一?
【问题讨论】:
-
@PraveenKumar:什么是“C/C++”?
标签: sql berkeley-db