db.update()

阅读(6749) 标签: 更新, 数据表,

描述:

更新数据库表。

语法:

db.update(A:A',tbl,Fi:xi,…;P,…)

根据序列/排列更新数据库表。

db.update(cs,tbl,Fi:xi,…;P,…)

根据游标更新数据库表。

备注:

根据A更新tbl表中的Fi,更新值为A中同名字段进行xi计算后的值。Fix省略时用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字段是键,键字段得包含在更新字段里。A1A2字段名相同。对比主键先删除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,…)

执行结果数据库中只有EID512的记录。

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分别为为123的记录。

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为游标。