Sqlite数据库的Update

2012-08-21   来源:站长日记       编辑:沧海桑田   类别:数据库    转载到:    发表评论

Sqlite数据库的Update知多少?
虽然号称对Sqlite的使用有一年多的经验,但实际上并没有对Sqlite的各种语法有深入的了解,毕竟大多数时候选择Sqlite这种微型数据库,表结构设计上都十分的简单,一些复杂的sql操作很少会用到。另一方面Sqlite居然理论上可以支持2TB的数据,相信随着各路神仙对Sqlite的推崇,日后还是会大有作为的。

今天着重想谈一谈Sqlite中的Update。

1.典型的Update(支持)    Update            T1    Set           Column1 = v1,           Column2 =V2    Where           key = V3;

2.Update…From(很不幸,Sqlite不支持)    UPDATE           t1    SET           Column1= t2. Column1    FROM           t2, t1    WHERE           t2.key = t1.key;

要进行表间更新Update…From是必须的,居然Sqlite不支持,有什么别的办法吗?还确实有,替代方法有两种:

首先,Sqlite里面有一个新鲜玩意“INSERT OR REPLACE”,跟Mysql类似,这个结构能够保证在存在的情况下替换,不存在的情况下更新,用这个机制就可以轻松实现Update…From 了。    INSERT OR REPLACE INTO           t1( key, Column1, Column2)    SELECT           t2.key, t2. Column1,t2. Column2    FROM           t2, t1    WHERE           t2.key = t1.key;

备注:这种方法要避免插入操作,首先要确保是依照主键执行的更新,如果where条件不是主键可能就有点麻烦了。

要是不是主键的更新怎么办能?另外还有其他的办法吗?我们在这中情况下只能向典型的Update…where寻求帮助了,下面是一个例子:    UPDATE           t1    SET           Column1 = ( SELECT Columnx FROM t2 WHERE t2.key =t1.key ),           Column2 = ( SELECT Columny FROM t2 WHERE t2.key =t1.key ),    WHERE t1.key = ( SELECT key FROM t2 WHERE t2.key=t1.key);

下面举一个主从表的例子,一个部门表,一个成员表,成员表中的部门名称和代码是冗余的信息,以部门表中的部门名称和代码更新成员表中的冗余信息:    update           userlogins    set            deptname = (select deptname from DepartMents where DepartMents.[DeptID] = userlogins.[DeptID]),           deptcode = (select deptcode from DepartMents where DepartMents.[DeptID] = userlogins.[DeptID])    where           userlogins.[DeptID] = ( SELECT [DeptID] FROM DepartMents where DepartMents.[DeptID] = userlogins.[DeptID]);

1

0
1|0 | 鲜花 VS 砸蛋 | 76阅读 0评论
 
不想登录?直接点击发布即可作为游客留言。
昵称  邮箱 网站 验证码 = 1+1