Schlüsselwörter in SQL (Schlüsselwörter in SQL), Lektion, Seite 723462
https://www.purl.org/stefan_ram/pub/schluesselwoerter_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Schlüsselwörter in SQL  (MySQL )

Wir zeigen im folgenden die Syntax einer Schemadefinition von SQL.

Schemadefinition
     .------.      .------.     .------------.
--->( CREATE )--->( SCHEMA )--->| Bezeichner |--->
'------' '------' '------------'

Wörter, die in gerundeten Kästchen von Syntaxdiagrammen vorkommen, werden Schlüsselwörter  genannt und dürfen in der Regel nicht als Namen verwendet werden.

Das obenstehende Diagramm liefert also die Schlüsselwörter: »CREATE« und »SCHEMA«.

Das folgende Protokoll zeigt eine Fehlermeldung, die nach dem Versuch, ein Schlüsselwort als Name eines Schemas zu verwenden, ausgegeben wird.

Konsole
CREATE SCHEMA SCHEMA;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SCHEMA' at line 1

Wenn man besonders vorsichtig sein will, sollte man auch noch Wörter mit nur einem Zeichen (wie »A«) und Wörter, die am Anfang von Schlüsselwörtern vorkommen (wie »OCTET«, das ein Wort aus einer der untenstehenden Tabellen einleitet) oder eine Wortform von Schlüsselwörtern (wie »SCHEMAS«) darstellen, vermeiden, um zu erreichen, daß Namen unter möglichst vielen verschiedenen Datenbanksystemen verwendet werden können.

Anmerkung zu »NAME« und »BEZEICHNUNG«

Das Wort »NAME« ist “vendor reserved ”, das heißt, er wird von einigen großen Herstellern für eigene Zwecke (Erweiterungen) reserviert. Daher wird in diesem Kurs statt dessen vorsichtshalber oft »BEZEICHNUNG« verwendet, obwohl unter MySQL  auch »NAME« verwendet werden könnte.

Übungsfragen

?   Reservierte Schlüsselwörter

Welche der folgenden Anweisungen könnten Probleme bereiten?

Reservierte Schlüsselwörter in Standard-SQL  *

Ein Benutzer der Sprache darf beispielsweise einem Schema einen Namen geben. Dabei sollte er allerdings einen bestimmten Teil der Schlüsselwörter vermeiden, nämlich die sogenannten reservierten Schlüsselwörter.

Reservierte Schlüsselwörter sollten nicht als Namen verwendet werden, wenn der Benutzer selber etwas in der Datenbank benennt.

Neben den reservierten  Schlüsselwörtern gibt es auch noch einige nicht-reservierte  Schlüsselwörter. Es gibt aber keinen wichtigen Grund, die nicht-reservierten Schlüsselwörter zu kennen. Die dem Autor zum Zeitpunkt der Niederschrift bekannten reservierten  Schlüsselwörter werden im folgenden genannt.

Man kann davon ausgehen, daß ein Wort ein Schlüsselwort ist, wenn es in einem Syntaxdiagramm vorkommt oder es ein feststehendes Wort ist, das einen Befehl oder einen Teil eines Befehls einleitet. Die Bedeutung dieser Schlüsselwörtern wird durch die SQL -Sprachdefinition  festgelegt.

Reservierte Schlüsselwörter von Standard-SQL
»ABS«, »ALL«, »ALLOCATE«, »ALTER«, »AND«, »ANY«, »ARE«, »ARRAY«, »ARRAY_AGG«, »AS«, »ASENSITIVE«, »ASYMMETRIC«, »AT«, »ATOMIC«, »AUTHORIZATION«, »AVG«, »BEGIN«, »BETWEEN«, »BIGINT«, »BINARY«, »BLOB«, »BOOLEAN«, »BOTH«, »BY«, »CALL«, »CALLED«, »CARDINALITY«, »CASCADED«, »CASE«, »CAST«, »CEIL«, »CEILING«, »CHAR«, »CHAR_LENGTH«, »CHARACTER«, »CHARACTER_LENGTH«, »CHECK«, »CLOB«, »CLOSE«, »COALESCE«, »COLLATE«, »COLLECT«, »COLUMN«, »COMMIT«, »CONDITION«, »CONNECT«, »CONSTRAINT«, »CONVERT«, »CORR«, »CORRESPONDING«, »COUNT«, »COVAR_POP«, »COVAR_SAMP«, »CREATE«, »CROSS«, »CUBE«, »CUME_DIST«, »CURRENT«, »CURRENT_CATALOG«, »CURRENT_DATE«, »CURRENT_DEFAULT_TRANSFORM_GROUP«, »CURRENT_PATH«, »CURRENT_ROLE«, »CURRENT_SCHEMA«, »CURRENT_TIME«, »CURRENT_TIMESTAMP«, »CURRENT_TRANSFORM_GROUP_FOR_TYPE«, »CURRENT_USER«, »CURSOR«, »CYCLE«, »DATE«, »DAY«, »DAYS«, »DEALLOCATE«, »DEC«, »DECIMAL«, »DECLARE«, »DEFAULT«, »DELETE«, »DENSE_RANK«, »DEREF«, »DESCRIBE«, »DETERMINISTIC«, »DISCONNECT«, »DISTINCT«, »DOUBLE«, »DROP«, »DYNAMIC«, »EACH«, »ELEMENT«, »ELSE«, »END«, »END-EXEC«, »ESCAPE«, »EVERY«, »EXCEPT«, »EXEC«, »EXECUTE«, »EXISTS«, »EXP«, »EXTERNAL«, »EXTRACT«, »FALSE«, »FETCH«, »FILTER«, »FIRST_VALUE«, »FLOAT«, »FLOOR«, »FOR«, »FOREIGN«, »FOREVER«, »FREE«, »FROM«, »FULL«, »FUNCTION«, »FUSION«, »GET«, »GLOBAL«, »GRANT«, »GROUP«, »GROUPING«, »HAVING«, »HOLD«, »HOUR«, »HOURS«, »IDENTITY«, »IN«, »INDICATOR«, »INNER«, »INOUT«, »INSENSITIVE«, »INSERT«, »INT«, »INTEGER«, »INTERSECT«, »INTERSECTION«, »INTERVAL«, »INTO«, »IS«, »JOIN«, »KEEP«, »LAG«, »LANGUAGE«, »LARGE«, »LAST_VALUE«, »LATERAL«, »LEAD«, »LEADING«, »LEFT«, »LIKE«, »LIKE_REGEX«, »LN«, »LOCAL«, »LOCALTIME«, »LOCALTIMESTAMP«, »LOWER«, »MATCH«, »MAX«, »MAX_CARDINALITY«, »MEMBER«, »MERGE«, »METHOD«, »MIN«, »MINUTE«, »MINUTES«, »MOD«, »MODIFIES«, »MODULE«, »MONTH«, »MULTISET«, »NATIONAL«, »NATURAL«, »NCHAR«, »NCLOB«, »NEW«, »NO«, »NONE«, »NORMALIZE«, »NOT«, »NTH_VALUE«, »NTILE«, »NULL«, »NULLIF«, »NUMERIC«, »OCTET_LENGTH«, »OCCURRENCES_REGEX«, »OF«, »OFFSET«, »OLD«, »ON«, »ONLY«, »OPEN«, »OR«, »ORDER«, »OUT«, »OUTER«, »OVER«, »OVERLAPS«, »OVERLAY«, »PARAMETER«, »PARTITION«, »PERCENT_RANK«, »PERCENTILE_CONT«, »PERCENTILE_DISC«, »POSITION«, »POSITION_REGEX«, »POWER«, »PRECISION«, »PREPARE«, »PRIMARY«, »PROCEDURE«, »RANGE«, »RANK«, »READS«, »REAL«, »RECURSIVE«, »REF«, »REFERENCES«, »REFERENCING«, »REGR_AVGX«, »REGR_AVGY«, »REGR_COUNT«, »REGR_INTERCEPT«, »REGR_R2«, »REGR_SLOPE«, »REGR_SXX«, »REGR_SXY«, »REGR_SYY«, »RELEASE«, »RESULT«, »RETURN«, »RETURNS«, »REVOKE«, »RIGHT«, »ROLLBACK«, »ROLLUP«, »ROW«, »ROW_NUMBER«, »ROWS«, »SAVEPOINT«, »SCOPE«, »SCROLL«, »SEARCH«, »SECOND«, »SECONDS«, »SELECT«, »SENSITIVE«, »SESSION_USER«, »SET«, »SIMILAR«, »SMALLINT«, »SOME«, »SPECIFIC«, »SPECIFICTYPE«, »SQL«, »SQLEXCEPTION«, »SQLSTATE«, »SQLWARNING«, »SQRT«, »START«, »STATIC«, »STDDEV_POP«, »STDDEV_SAMP«, »SUBMULTISET«, »SUBSTRING«, »SUBSTRING_REGEX«, »SUM«, »SYMMETRIC«, »SYSTEM«, »SYSTEM_USER«, »TABLE«, »TABLESAMPLE«, »THEN«, »TIME«, »TIMESTAMP«, »TIMEZONE_HOUR«, »TIMEZONE_MINUTE«, »TO«, »TRAILING«, »TRANSLATE«, »TRANSLATE_REGEX«, »TRANSLATION«, »TREAT«, »TRIGGER«, »TRUNCATE«, »TRIM«, »TRIM_ARRAY«, »TRUE«, »UESCAPE«, »UNION«, »UNIQUE«, »UNKNOWN«, »UNNEST«, »UPDATE«, »UPPER«, »USER«, »USING«, »VALUE«, »VALUES«, »VAR_POP«, »VAR_SAMP«, »VARBINARY«, »VARCHAR«, »VARYING«, »VERSION«, »VERSIONING«, »VERSIONS«, »WHEN«, »WHENEVER«, »WHERE«, »WIDTH_BUCKET«, »WINDOW«, »WITH«, »WITHIN«, »WITHOUT«, »YEAR« und »YEARS«.

Zusätzlich zu den Wörtern, die vom SQL -Sprachstandard reserviert wurden, könnten einzelne Datenbankprodukte noch weitere Wörter für ihren eigenen Gebrauch reservieren, die dann ebenfalls vermieden werden sollten. Leider dürfte es aber keine vollständige Liste aller dieser herstellerspezifischen reservierten Wörter geben. Ein Beispiel für ein Wort, das von einigen Datenbankprodukten, aber nicht vom Sprachstandard reserviert ist, ist »NAME«.

Ältere SQL -Standards

Der voranstehende Teil dieser Lektion hier bezieht sich auf den neuesten dem Autor bekannten Entwurf des Sprachstandards. Ältere Versionen des Sprachstandards (wie SQL 1992, SQL 1999 oder SQL 2003) enthalten wieder andere  Listen von Wörtern, die reserviert sind und reservieren möglicherweise alle Schlüsselwörter.

SQL 92 (SQL2)
»ABSOLUTE«, »ACTION«, »ADD«, »ALL«, »ALLOCATE«, »ALTER«, »AND«, »ANY«, »ARE«, »AS«, »ASC«, »ASSERTION«, »AT«, »AUTHORIZATION«, »AVG«, »BEGIN«, »BETWEEN«, »BIT«, »BIT_LENGTH«, »BOTH«, »BY«, »CASCADE«, »CASCADED«, »CASE«, »CAST«, »CATALOG«, »CHAR«, »CHARACTER«, »CHAR_LENGTH«, »CHARACTER_LENGTH«, »CHECK«, »CLOSE«, »COALESCE«, »COLLATE«, »COLLATION«, »COLUMN«, »COMMIT«, »CONNECT«, »CONNECTION«, »CONSTRAINT«, »CONSTRAINTS«, »CONTINUE«, »CONVERT«, »CORRESPONDING«, »COUNT«, »CREATE«, »CROSS«, »CURRENT«, »CURRENT_DATE«, »CURRENT_TIME«, »CURRENT_TIMESTAMP«, »CURRENT_USER«, »CURSOR«, »DATE«, »DAY«, »DEALLOCATE«, »DEC«, »DECIMAL«, »DECLARE«, »DEFAULT«, »DEFERRABLE«, »DEFERRED«, »DELETE«, »DESC«, »DESCRIBE«, »DESCRIPTOR«, »DIAGNOSTICS«, »DISCONNECT«, »DISTINCT«, »DOMAIN«, »DOUBLE«, »DROP«, »ELSE«, »END«, »END-EXEC«, »ESCAPE«, »EXCEPT«, »EXCEPTION«, »EXEC«, »EXECUTE«, »EXISTS«, »EXTERNAL«, »EXTRACT«, »FALSE«, »FETCH«, »FIRST«, »FLOAT«, »FOR«, »FOREIGN«, »FOUND«, »FROM«, »FULL«, »GET«, »GLOBAL«, »GO«, »GOTO«, »GRANT«, »GROUP«, »HAVING«, »HOUR«, »IDENTITY«, »IMMEDIATE«, »IN«, »INDICATOR«, »INITIALLY«, »INNER«, »INPUT«, »INSENSITIVE«, »INSERT«, »INT«, »INTEGER«, »INTERSECT«, »INTERVAL«, »INTO«, »IS«, »ISOLATION«, »JOIN«, »KEY«, »LANGUAGE«, »LAST«, »LEADING«, »LEFT«, »LEVEL«, »LIKE«, »LOCAL«, »LOWER«, »MATCH«, »MAX«, »MIN«, »MINUTE«, »MODULE«, »MONTH«, »NAMES«, »NATIONAL«, »NATURAL«, »NCHAR«, »NEXT«, »NO«, »NOT«, »NULL«, »NULLIF«, »NUMERIC«, »OCTET_LENGTH«, »OF«, »ON«, »ONLY«, »OPEN«, »OPTION«, »OR«, »ORDER«, »OUTER«, »OUTPUT«, »OVERLAPS«, »PAD«, »PARTIAL«, »POSITION«, »PRECISION«, »PREPARE«, »PRESERVE«, »PRIMARY«, »PRIOR«, »PRIVILEGES«, »PROCEDURE«, »PUBLIC«, »READ«, »REAL«, »REFERENCES«, »RELATIVE«, »RESTRICT«, »REVOKE«, »RIGHT«, »ROLLBACK«, »ROWS«, »SCHEMA«, »SCROLL«, »SECOND«, »SECTION«, »SELECT«, »SESSION«, »SESSION_USER«, »SET«, »SIZE«, »SMALLINT«, »SOME«, »SPACE«, »SQL«, »SQLCODE«, »SQLERROR«, »SQLSTATE«, »SUBSTRING«, »SUM«, »SYSTEM_USER«, »TABLE«, »TEMPORARY«, »THEN«, »TIME«, »TIMESTAMP«, »TIMEZONE_HOUR«, »TIMEZONE_MINUTE«, »TO«, »TRAILING«, »TRANSACTION«, »TRANSLATE«, »TRANSLATION«, »TRIM«, »TRUE«, »UNION«, »UNIQUE«, »UNKNOWN«, »UPDATE«, »UPPER«, »USAGE«, »USER«, »USING«, »VALUE«, »VALUES«, »VARCHAR«, »VARYING«, »VIEW«, »WHEN«, »WHENEVER«, »WHERE«, »WITH«, »WORK«, »WRITE«, »YEAR« und »ZONE«.
SQL 1999 (SQL3)
»ABSOLUTE«, »ACTION«, »ADD«, »ALL«, »ALLOCATE«, »ALTER«, »AND«, »ANY«, »ARE«, »AS«, »ASC«, »ASSERTION«, »AT«, »AUTHORIZATION«, »AVG«, »BEGIN«, »BETWEEN«, »BIT«, »BIT_LENGTH«, »BOTH«, »BY«, »CASCADE«, »CASCADED«, »CASE«, »CAST«, »CATALOG«, »CHAR«, »CHARACTER«, »CHAR_LENGTH«, »CHARACTER_LENGTH«, »CHECK«, »CLOSE«, »COALESCE«, »COLLATE«, »COLLATION«, »COLUMN«, »COMMIT«, »CONNECT«, »CONNECTION«, »CONSTRAINT«, »CONSTRAINTS«, »CONTINUE«, »CONVERT«, »CORRESPONDING«, »COUNT«, »CREATE«, »CROSS«, »CURRENT«, »CURRENT_DATE«, »CURRENT_TIME«, »CURRENT_TIMESTAMP«, »CURRENT_USER«, »CURSOR«, »DATE«, »DAY«, »DEALLOCATE«, »DEC«, »DECIMAL«, »DECLARE«, »DEFAULT«, »DEFERRABLE«, »DEFERRED«, »DELETE«, »DESC«, »DESCRIBE«, »DESCRIPTOR«, »DIAGNOSTICS«, »DISCONNECT«, »DISTINCT«, »DOMAIN«, »DOUBLE«, »DROP«, »ELSE«, »END«, »END-EXEC«, »ESCAPE«, »EXCEPT«, »EXCEPTION«, »EXEC«, »EXECUTE«, »EXISTS«, »EXTERNAL«, »EXTRACT«, »FALSE«, »FETCH«, »FIRST«, »FLOAT«, »FOR«, »FOREIGN«, »FOUND«, »FROM«, »FULL«, »GET«, »GLOBAL«, »GO«, »GOTO«, »GRANT«, »GROUP«, »HAVING«, »HOUR«, »IDENTITY«, »IMMEDIATE«, »IN«, »INDICATOR«, »INITIALLY«, »INNER«, »INPUT«, »INSENSITIVE«, »INSERT«, »INT«, »INTEGER«, »INTERSECT«, »INTERVAL«, »INTO«, »IS«, »ISOLATION«, »JOIN«, »KEY«, »LANGUAGE«, »LAST«, »LEADING«, »LEFT«, »LEVEL«, »LIKE«, »LOCAL«, »LOWER«, »MATCH«, »MAX«, »MIN«, »MINUTE«, »MODULE«, »MONTH«, »NAMES«, »NATIONAL«, »NATURAL«, »NCHAR«, »NEXT«, »NO«, »NOT«, »NULL«, »NULLIF«, »NUMERIC«, »OCTET_LENGTH OF«, »ON«, »ONLY«, »OPEN«, »OPTION«, »OR«, »ORDER«, »OUTER«, »OUTPUT«, »OVERLAPS«, »PARTIAL«, »POSITION«, »PRECISION«, »PREPARE«, »PRESERVE«, »PRIMARY«, »PRIOR«, »PRIVILEGES«, »PROCEDURE«, »PUBLIC«, »READ«, »REAL«, »REFERENCES«, »RELATIVE«, »RESTRICT«, »REVOKE«, »RIGHT«, »ROLLBACK«, »ROWS«, »SCHEMA«, »SCROLL«, »SECOND«, »SECTION«, »SELECT«, »SESSION«, »SESSION_USER«, »SET«, »SIZE«, »SMALLINT«, »SOME«, »SQL«, »SQLCODE«, »SQLERROR«, »SQLSTATE«, »SUBSTRING«, »SUM«, »SYSTEM_USER«, »TABLE«, »TEMPORARY«, »THEN«, »TIME«, »TIMESTAMP«, »TIMEZONE_HOUR«, »TIMEZONE_MINUTE«, »TO«, »TRAILING«, »TRANSACTION«, »TRANSLATE«, »TRANSLATION«, »TRIM«, »TRUE«, »UNION«, »UNIQUE«, »UNKNOWN«, »UPDATE«, »UPPER«, »USAGE«, »USER«, »USING«, »VALUE«, »VALUES«, »VARCHAR«, »VARYING«, »VIEW«, »WHEN«, »WHENEVER«, »WHERE«, »WITH«, »WORK«, »WRITE«, »YEAR« und »ZONE«.

MySQL 

MySQL  (außer denen, die schon oben unter „SQL3“ erwähnt wurden)
»ANALYZE«, »ASENSITIVE«, »BEFORE«, »BIGINT«, »BINARY«, »BLOB«, »CALL«, »CHANGE«, »CONDITION«, »DATABASE«, »DATABASES«, »DAY_HOUR«, »DAY_MICROSECOND«, »DAY_MINUTE«, »DAY_SECOND«, »DELAYED«, »DETERMINISTIC«, »DISTINCTROW«, »DIV«, »DUAL«, »EACH«, »ELSEIF«, »ENCLOSED«, »ESCAPED«, »EXIT«, »EXPLAIN«, »FLOAT4«, »FLOAT8«, »FORCE«, »FULLTEXT«, »HIGH_PRIORITY«, »HOUR_MICROSECOND«, »HOUR_MINUTE«, »HOUR_SECOND«, »IF«, »IGNORE«, »INDEX«, »INFILE«, »INOUT«, »INT1«, »INT2«, »INT3«, »INT4«, »INT8«, »ITERATE«, »KEYS«, »KILL«, »LABEL«, »LEAVE«, »LIMIT«, »LINES«, »LOAD«, »LOCALTIME«, »LOCALTIMESTAMP«, »LOCK«, »LONG«, »LONGBLOB«, »LONGTEXT«, »LOOP«, »LOW_PRIORITY«, »MEDIUMBLOB«, »MEDIUMINT«, »MEDIUMTEXT«, »MIDDLEINT«, »MINUTE_MICROSEC-«, »OND«, »MINUTE_SECOND«, »MOD«, »MODIFIES«, »NO_WRITE_TO_BINLOG«, »OPTIMIZE«, »OPTIONALLY«, »OUT«, »OUTFILE«, »PURGE«, »RAID0«, »READS«, »REGEXP«, »RELEASE«, »RENAME«, »REPEAT«, »REPLACE«, »REQUIRE«, »RETURN«, »RLIKE«, »SCHEMAS«, »SECOND_MICROSECOND«, »SENSITIVE«, »SEPARATOR«, »SHOW«, »SONAME«, »SPATIAL«, »SPECIFIC«, »SQLEXCEPTION«, »SQLWARNING«, »SQL_BIG_RESULT«, »SQL_CALC_FOUND_ROWS«, »SQL_SMALL_RESULT«, »SSL«, »STARTING«, »STRAIGHT_JOIN«, »TERMINATED«, »TINYBLOB«, »TINYINT«, »TINYTEXT«, »TRIGGER«, »UNDO«, »UNLOCK«, »UNSIGNED«, »USE«, »UTC_DATE«, »UTC_TIME«, »UTC_TIMESTAMP«, »VARBINARY«, »VARCHARACTER«, »WHILE«, »X509«, »XOR«, »YEAR_MONTH« und »ZEROFILL«.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723462 stefan_ram:723462 Schlüsselwörter in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723462, slrprddef723462, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/schluesselwoerter_sql