update()

阅读(3227) 标签: update,

本章介绍update()函数的多种用法。

db.update()

描述:

更新数据库表

语法:

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的值更新到库里

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

 

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,USERNAME)

自增字段不用写表达式

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

T.update( P )

描述:

更新实表的记录

语法:

T.update(P)

 

备注:

根据排列P实表T的键值更新实表T的记录,保证P的结构和实表T结构一致,如果更新数据的键值在实表中不存在,则将此记录追加(或插入)到实表T中。

参数:

T

组表的实表

P

T同构的排列/序表

选项:

@i

只处理插入,键值能找到的忽略

@u

只处理更新,键值找不到的忽略

@n

返回更新和插入的记录

@w

P是游标与原表同序,重写P涉及的字段,仅列存格式,不可增加记录

返回值:

实表

 

示例:

 

 

A

 

1

=file("emp.ctx")

生成组表文件

2

=A1.create@y(#EID,NAME)

创建组表的基表

3

=connect("demo").cursor("select EID,NAME from employee where EID<20")

返回游标

4

=A2.append@i(A3)

A3游标中的数据追加到组表的基表中

5

=A2.attach(table3,SURNAME)

在基表上增加名为table3的附表,EID为键,SURNAME为字段

6

=connect("demo").cursor("select EID,SURNAME from employee where EID< 5")

返回游标

7

=A5.append@i(A6)

A6游标中的数据追加到附表table3

8

=A2.cursor().fetch()

查看基表中的数据

9

=A5.cursor().fetch()

查看附表中的数据

10

=create(EID,NAME).record([1,"A",21,"B"])

返回序表

11

=A2.update(A10)

根据A8序表更新基表中的数据

12

=A2.cursor().fetch()

此时查看基表中的数据

13

=create(EID,SURNAME).record([2,"aa",10,"bb"])

返回序表

14

=A5.update@in(A13)

使用@i选项,只处理插入,相同键值的忽略,组合使用@n选项,返回插入的记录

15

=A5.cursor().fetch()

此时查看附表中的数据

16

=create(EID,SURNAME).record([1,"ss",6,"cc"])

返回序表

17

=A5.update@un(A16)

使用@u选项,只处理更新,键值不同的忽略,组合使用@n选项,返回更新的记录

18

=A5.cursor().fetch()

此时查看附表中的数据

 

T.update(P)

描述:

更新虚表的记录

语法:

T.update(P)

 

备注:

根据排列P虚表T的键值更新虚表T的记录,保证P的结构和虚表T结构一致,如果更新数据的键值在虚表中不存在,则将此记录追加(或插入)到虚表T中。

参数:

T

虚表对象

P

T同构的排列/序表

选项:

@i

只处理插入,键值能找到的忽略

@u

只处理更新,键值找不到的忽略

@n

返回更新和插入的记录

返回值:

虚表对象

示例:

 

 

A

 

1

=create(file).record(["D:/file/pseudo/Employee.ctx"])

 

2

=pseudo(A1)

 

生成组表对象

3

=create(Dept,AvgSalary).record(["HR",7000,"CSD",6018.04])

返回序表

4

=A2.update(A3)

A3中的虚表记录按键值更新虚表A2的记录

5

=A4.import()