Back to top
Documentation SurrealQL Statements DEFINE statement

DEFINE statement

The DEFINE statement can be used to specify authentication access and behaviour, global parameters, table configurations, table events, schema definitions, and indexes.

Statement syntax

DEFINE [
	NAMESPACE @name
	| DATABASE @name
	| USER @name ON [ ROOT | NAMESPACE | DATABASE ] [ PASSWORD @pass | PASSHASH @hash ] ROLES @roles
	| TOKEN @name ON [ NAMESPACE | DATABASE | SCOPE @scope ] TYPE @type VALUE @value
	| SCOPE @name
		[ SESSION @duration ]
		[ SIGNUP @expression ]
		[ SIGNIN @expression ]
	| TABLE @name
		[ DROP ]
		[ SCHEMAFULL | SCHEMALESS ]
		[ AS SELECT @projections
			FROM @tables
			[ WHERE @condition ]
			[ GROUP [ BY ] @groups ]
		]
		[ PERMISSIONS [ NONE | FULL
			| FOR select @expression
			| FOR create @expression
			| FOR update @expression
			| FOR delete @expression
		] ]
	| EVENT @name ON [ TABLE ] @table WHEN @expression THEN @expression
	| FIELD @name ON [ TABLE ] @table
		[ [ FLEXIBLE ] TYPE @type ]
		[ VALUE @expression ]
		[ ASSERT @expression ]
		[ PERMISSIONS [ NONE | FULL
			| FOR select @expression
			| FOR create @expression
			| FOR update @expression
			| FOR delete @expression
		] ]
	| ANALYZER @name
		[ TOKENIZERS @tokenizers ]
		[ FILTERS @filters ]
	| INDEX @name ON [ TABLE ] @table [ FIELDS | COLUMNS ] @fields
		[ UNIQUE | SEARCH ANALYZER @analyzer [ BM25 [(@k1, @b)] ] [ HIGHLIGHTS ] ]
]

DEFINE NAMESPACE

Allows you to instantiate namespaces as part of SurrealDB's multi-tenancy model.

DEFINE DATABASE

Allows you to instantiate named databases.

DEFINE USER

Allows you to create user accounts.

DEFINE TOKEN

Allows you to authenticate on SurrealDB with third-party OAuth tokens.

DEFINE SCOPE

Allows you to create scopes to set authentication and access rules.

DEFINE TABLE

Declare the name of a table, make it schemafull or schemaless, create projections, and set table level permissions

DEFINE EVENT

Allows you to specify conditions that trigger the execution of custom logic.

DEFINE FUNCTION

Allows you to specify custom reusable functions that can be used across a database.

DEFINE FIELD

Allows you to instantiate named fields on a table.

DEFINE ANALYZER

Allows you to create a text analyzer.

DEFINE INDEX

Allows you to create database indexes on table fields.

DEFINE PARAM

Allows you to specify global (database-wide) parameters.