insert
¶
Insert or append records to a table
x insert y insert[x;y]
Where
x
is a symbol atom naming a non-splayed tabley
is one or more records that match the columns ofx
; or ifx
is undefined, a table
inserts y
into the table named by x
and returns the new row indexes.
The left argument is the name of a table as a symbol atom.
q)show x:([a:`x`y];b:10 20)
a| b
-| --
x| 10
y| 20
q)`x insert (`z;30)
,2
q)x
a| b
-| --
x| 10
y| 20
z| 30
q)tnew
'tnew
[0] tnew
^
q)`tnew insert ([c1:`a`b];c2:10 20)
0 1
q)tnew
c1| c2
--| --
a | 10
b | 20
If the table is keyed, the new records must not match existing keys.
q)`x insert (`z;30)
'insert
Several records may be appended at once:
q)`x insert (`s`t;40 50)
3 4
q)x
a| b
-| --
x| 10
y| 20
z| 30
s| 40
t| 50
insert
can insert to global variables only.
If you need to insert to function-local tables, use x,:y
or Update instead.
Type¶
Values in y
must match the type of corresponding columns in x
; otherwise, q signals a type
error.
Empty columns in x
with general type assume types from the first record inserted.
q)meta u:([] name:(); age:())
c | t f a
----| -----
name|
age |
q)`u insert (`tom`dick;30 40)
0 1
q)meta u
c | t f a
----| -----
name| s
age | j
Foreign keys¶
If x
has foreign key/s the corresponding values of y
are checked to ensure they appear in the primary key column/s pointed to by the foreign key/s.
A cast
error is signalled if they do not.
Errors¶
cast y value not in foreign key
insert y key value defined in x
type y value wrong type
With keyed tables, consider upsert
as an alternative.