对比理解:sqlite3和mysql的自增id特性
发布于 作者:苏南大叔 来源:程序如此灵动~
在讲述sqlite
的数据插入语句api
之前,苏南大叔有必要和大家讲述sqlite
中的自增id
的有关事项。sqlite
的自增id
和mysql
中的自增id
是完全不一样的体验。请大家看完本篇文章之后,再研究相关node-sqlite3
的数据插入api
。
sqlite
数据表自带rowid
sqlite
的数据表里面,有个隐藏的rowid
字段。注意这个rowid
是隐藏的,任何表都有这个字段,自增类型的。不用主动建立就存在,这个rowid
和myql
上的id非常类似。也就是说,完全可以使用这个隐藏的rowid带代替传统意义上的id
。不过,两者并不等同,是有区别的。大家可以清空表之后,再增加数据,看看两者对比。
sqlite
建立自增id
sqlite
也可以建立类似mysql的自增id。不过,这个自增的id的类型必须为integer
,不能是int
(int
和integer
类型同时存在于sqlite
中,mysql
中只有int
类型),并且integer
作为主键的时候,不能指定长度。
在sqlitestudio
中,必须先设置为integer
,然后保存之后,才能修改为autoincrement
,似乎有些不是很智能,差评。
sqlite的自增id语句
id INTEGER PRIMARY KEY AUTOINCREMENT
mysql建立自增id
这个mysql的自增id,大家应该都比较熟悉了。一般都会设置为int(11)
。
`id` int(11) NOT NULL AUTO_INCREMENT
demo截图
下面的demo中,对于一个没有自增id的数据表,演示了如何利用sqlite的rowid查出id来。
db.serialize(function() {
db.run("CREATE TABLE if not exists lorem (info TEXT)");
var stmt = db.prepare("INSERT INTO lorem(info) VALUES (?)");
for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
console.log(row.id + ": " + row.info);
});
});
结论
sqlite中的自增id和mysql中的自增id,有着较大的区别。不仅表现为类型,长度,甚至自增单词的拼写方法上。sqlite中的rowid就可以代替我们传统意义上的id。这点是最重要的区别所在。
sqlite数据库当然会和mysql数据库有所区别,否则就不会自成一派了,您说,对吧?更多sqlite的经验文章,请点击苏南大叔的相关文章:https://newsn.net/tag/sqlite/ 。


