描述:
更新数据库表。
语法:
db.update(A:A',tbl,Fi:xi,…;P,…) |
根据序列/排列更新数据库表。 |
db.update(cs,tbl,Fi:xi,…;P,…) |
根据游标更新数据库表。 |
备注:
根据A更新tbl表中的Fi,更新值为A中同名字段进行xi计算后的值。Fi和x省略时用A的同名字段名和字段值。
P,…是tbl的键。有A'时先用键与A'做对比,并生成删除指令(删除数据库中A'有A没有的记录),当主键在A中存在A'中不存在时在数据库中插入该条记录,如果主键同时在A'和A中存在,再比较数据值,即比较A中同名字段执行xi计算后的字段值与Fi 的值是否相同,若不同则将A执行xi计算后的字段值更新到数据库。
无A'参数时,只进行插入与更新操作,无删除操作。
参数:
db |
数据库连接。 |
A |
序列/排列。 |
cs |
游标。 |
A' |
原始序列/排列,一般认为和数据库中数据一致。 |
tbl |
数据库里的表名。 |
Fi |
tbl 的字段。 |
xi |
A的表达式,利用A算出xi,作为Fi的值更新到库里。xi省略时认为与Fi相同。 |
P |
tbl的键,省略将从tbl中读,读不出用A的。 |
选项:
@u |
对比主键只生成UPDATE。无A'时不再对比,直接用A更新到数据库。 |
@i |
对比主键只生成 INSERT。无A'时不再对比,直接用A插入到数据库。 |
@a |
执行前清空目标表。先清空数据库表中的数据,再执行db.update(A:A',tbl,Fi:xi,…;P,…)。 |
@k |
|
@1 |
第一个字段是自增字段,没有对应表达式。 |
@d(A:A',tbl,Fi:xi,…;P,…) |
只删除,此时必须有A'。 |
返回值:
无
示例:
|
A |
|
1 |
=demo.query("select * from EMPLOYEE").keys(EID) |
|
2 |
=file("D:/employee1.txt").import@t() |
|
3 |
>demo.update(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
EID字段是键,键字段得包含在更新字段里。A1和A2字段名相同。对比主键先删除A1中有A2中没有的记录,再插入A2中有A1中没有的记录,最后对比主键更新记录值,并对有变化的记录的SALARY字段值更新为A2.SALARY+10。 |
4 |
>demo.update@u(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
使用@u选项时只更新记录值,并对有变化的记录的SALARY字段值更新为A2.SALARY+10。 |
5 |
>demo.update@u(A2,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
无A'时不再对比,直接将进行xi计算后的A2的记录更新到数据库。 |
6 |
>demo.update@i(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
使用@i选项时只插入记录值,并对记录的SALARY字段做SALARY+10运算。 |
7 |
>demo.update@i(A2,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
无A'时不再对比,直接将进行xi计算后的A2的记录插入到数据库。 |
8 |
>demo.update@a(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
先清空数据库中EMPLOYEE表中的数据,再执行db.update(A:A',tbl,Fi:xi,…;P,…)。 执行结果数据库中只有EID为512的记录。 |
9 |
=file("D:/data_user.txt").import@t() |
|
10 |
=mysql.query("select * from user_test").keys(USERID) |
mysql数据库中user_test表中的键userid为自增字段。 |
11 |
>mysql.update@1(A9:A10,user_test,USERID:#,USERNAME;USERID) |
忽略自增字段表达式的值。 |
12 |
>demo.update@k(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
完成后不提交事务。 |
13 |
>demo.update@d(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
对比键只删除数据库中A1中有A2中没有的记录。执行结果数据库中只有EID分别为为1、2、3的记录。 |
14 |
=file("D://data.txt").cursor@t() |
|
15 |
>demo.update(A14,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
A14为游标。 |