SQL bietet Befehle für die Datendefinition an (DDL statements, data definition language). Mit diesen Befehlen legt man zum Beispiel die Domänen der einzelnen Attribute der Relationen fest. Weil man Relationen in einfacher Weise auch als Tabellen darstellen kann, spricht SQL in der Regel von Tabellen (tables). Man darf sich aber dabei nicht verleiten lassen zu glauben, daß die Anordnung der einzelnen Tupel innerhalb der Tabelle irgendeine Bedeutung hätte.
Im folgenden wird eine kurze Übersicht über die einzelnen Datendefinitionsbefehle gegeben.
nnnnnn¯ CREATE TABLE tableNameCREATE TABLE dient zum Erstellen einer neuen Relation (Tabelle) mit den angegebenen Attributen (Spalten). Zusätzlich kann man Integritätsbedingungen definieren. Im folgenden Beispiel ist das Attribut no jeweils der Primärschlüssel der Relationen, weiters muß für jeden Eintrag in der Relation Addresses ein Eintrag in der Relation Friends mit entsprechendem Wert von no existieren (referentielle Integrität)."
("
colElem {"
,"
colElem}"
)"
colElem = colDefinition
tableConstraint.
colDefinition = colIdent dataType [DEFAULT defValue] {colConstraint}.
defValue = literal
NULL
USER.
colConstraint = NOT NULL
UNIQUE
PRIMARY KEY
REFERENCES tableName referencedColumns
CHECK
"
("
searchCondition"
)"
.tableConstraint = UNIQUE
"
("
colIdent {"
,"
colIdent}"
)"
PRIMARY KEY
"
("
colIdent {"
,"
colIdent}"
)"
CHECK
"
("
searchCondition"
)"
FOREIGN KEY referencingCols REFERENCES
referencedTable referencedColumns.
firstName CHAR(32), lastName CHAR(32) NOT NULL)
CREATE TABLE Addresses (no INTEGER NOT NULL PRIMARY KEY
REFERENCES Friends no, street CHAR(50), town CHAR(20),
zipCode INTEGER)
nn¯ ALTER TABLE tableName (ADD colIdent dataTypeALTER TABLE dient zum Hinzufügen und Entfernen von Attributen (Spalten) zu beziehungsweise von einer Relation (Tabelle). Die neuen Attribute in bestehenden Tupeln erhalten entweder Nullwerte oder die Werte, die man bei der Tabellendefinition voreingestellt hat ( DEFAULT defValue).
ADD
"
("
colIdent dataType {"
,"
colIdent dataType}"
)"
DROP [COLUMN] colIdent [CASCADE
RESTRICT])
nn¯ DROP TABLE tableName [CASCADEDROP TABLE löscht die angegebene Relation (Tabelle).RESTRICT]
nn¯ CREATE [UNIQUE] INDEX indexName ON tableNameCREATE INDEX erstellt einen neuen Index über Spalten einer Tabelle. Mittels eines Indizes können gewisse Abfragen wesentlich schneller abgearbeitet werden.colIdent [ASC
DESC] {
"
,"
colIdent [ASCDESC]}
nn¯ DROP INDEX indexNameDROP INDEX löscht den angegebenen Index.
nnnn¯ CREATE VIEW viewName [CREATE VIEW erstellt eine neue logische Sicht auf eine bestehende Tabelle oder auf das Ergebnis einer Abfrage. Eine Erklärung der Syntax von Abfragen folgt weiter hinten. Der Stern im folgenden Beispiel ist synonym mit dem Schlüsselwort ALL."
("
colIdent {"
,"
colIdent}"
)"
] AS queryquery = SELECT [ALL
DISTINCT] selectList FROM tableList
[WHERE searchCondition]
[GROUP BY colName {
"
,"
colName}][HAVING searchCondition].
WHERE town = 'LINZ'
nn¯ DROP VIEW viewName [CASCADEDROP VIEW löscht eine logische Sicht.RESTRICT]
nnnn¯ GRANT (ALLGRANT dient zum Erteilen von Rechten auf Relationen.grantPrivilege {
"
,"
grantPrivilege} ON tableName)TO (PUBLIC
userName {, userName})
grantPrivilege = DELETE
INSERT
SELECT
UPDATE [colIdent {
"
,"
colIdent}]
REFERENCES [colIdent {
"
,"
colIdent}].
nnnn¯ REVOKE (ALLREVOKE widerruft Rechte auf Relationen.revokePrivilege {
"
,"
revokePrivilege} ON tableName)FROM (PUBLIC
userName {
"
,"
userName}) [CASCADERESTRICT]
revokePrivilege = DELETE
INSERT
SELECT
UPDATE
REFERENCES.