由于自己的孤陋寡闻, 也由于之前的项目中, 很少参与过数据库模块的开发, 以至于前几天才知道Sqlite数据库也支持replace语句。 本文主要讲解在Sqlite中replace语句的行为,也算是学习笔记。此外, replace语句和update语句有相似的地方, 但是也有很多不同之处。 本文还要对比一下Sqlite中的 replace语句和update语句 。
在本例中使用如下数据库表:
(图 1)
该表的表名为student, 存储学生信息。 所有字段的数据类型都是TEXT 。 其中id和name作为复合主键。 email字段加上了唯一约束。建表语句如下:
?
1 2 3 4 5 6 7 8 9 10 CREATE TABLE IF NOT EXISTS student ( "id" TEXT, "name" TEXT NOT NULL, "sex" TEXT, "email" TEXT UNIQUE, "fenshu" TEXT CHECK(fenshu > 0), "tecid" TEXT REFERENCES teacher(id), "class" TEXT, PRIMARY KEY(id, name) )replace语句的行为
1 replace语句会删除原有的一条记录, 并且插入一条新的记录来替换原记录。
为了验证这个结论, 下面打开Sqlite命令行, 执行以下语句来替换id为2的记录。
?
1 2 sqlite> replace into student (id, name, sex, email, fenshu, tecid, class) values ('2', 'lisi', '*F', [email protected]', '80', '2', '1');执行完这条语句之后, student表中的数据变成下图所示:
(图 2)
对比图1和图2 , 可以发现: 在图1中, id为2 的记录是表中的第一条记录, 当执行完上述的replace语句之后, id为2的记录位于整张表的最后。 这就说明, 这条replace语句删除了原有的id为2的记录, 有插入了一条新的id为2的记录。
2 一般用replace语句替换一条记录的所有列, 如果在replace语句中没有指定某列, 在replace之后这列的值被置空 。
下面我们还是以id为2 的记录做实验, 执行如下语句:
?
1 2 sqlite> replace into student (id, name, sex, email, fenshu, tecid) values ('2', 'lisi', '*F', [email protected]', '80', '2');新闻热点
疑难解答