Our database now has two schemaless tables.
INFO FOR DB;
Response{ accesses: {}, analyzers: {}, configs: {}, functions: {}, models: {}, params: {}, tables: { place: 'DEFINE TABLE place TYPE ANY SCHEMALESS PERMISSIONS NONE', town: 'DEFINE TABLE town TYPE ANY SCHEMALESS PERMISSIONS NONE' }, users: {} }
Schemaless means that the table is free to accept any sort of data that we give it. If the tables were SCHEMAFULL
, they would have been much more strict. A schemafull table will ignore input for any field except id
unless they are defined in advance.
DEFINE TABLE schemafull_town SCHEMAFULL; -- schemafull_town only has one defined field DEFINE FIELD population ON schemafull_town TYPE number; -- So the query succeeds, but 'name' data is ignored CREATE schemafull_town SET name = "Riverdale", population = 75000; REMOVE TABLE schemafull_town;
CREATE query output[ { id: schemafull_town:q9olode057qz1vdzruuv, population: 75000 } ]
The INFO FOR
command works for other items too, like tables.
INFO FOR TABLE place; INFO FOR TABLE town;
Response-------- Query -------- { events: {}, fields: {}, indexes: {}, lives: {}, tables: {} } -------- Query -------- { events: {}, fields: {}, indexes: {}, lives: {}, tables: {} }
The empty input shows that place
and town
are schemaless, without any defined fields. That means that we could create a town with a name
that is a completely different type, like a number.
CREATE town SET name = 9999.999999;
Response[ { id: town:x1hy1y4d21x5dlhndprc, name: 9999.999999f } ]
We don’t want people to create towns with names like 9999.999999, so we will create a schema on the next page to ensure that this won’t happen. Let’s first delete this unwanted town.
DELETE town WHERE name = 9999.999999 RETURN BEFORE;
Response[ { id: town:2ciozta7zj7b8yvqfkpm, name: 9999.999999f } ]