Namen in SQL (Namen in SQL), Lektion, Seite 723287
https://www.purl.org/stefan_ram/pub/namen_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Begrenzte Namen in SQL  (MySQL )

Zeichenfolgen, welche normalerweise nicht  als Name verwendet werden dürfen, können doch verwendet werden, wenn sie in Anführungszeichen  »"« eingeschlossen werden.

Konsole

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE " 0!" ( "0/1" VARCHAR ( 255 ));
INSERT INTO " 0!" ( "0/1" ) VALUES ( '5' );

SELECT "0/1" FROM " 0!";

+------+
| 0/1 |
+------+
| 5 |
+------+

Betrachtet man nur die ausgegebene Tabelle, könnte man denken, daß hier ein Rechenfehler vorliegt!

Der Name der Tabelle ist nun » 0!« (drei Zeichen: Leerzeichen, Null, Ausrufezeichen), und der Name der Spalte ist »0/1«.

Einen Namen ohne Anführungszeichen nennt man einen regulären Namen, einen Namen mit Anführungszeichen einen begrenzten Namen.

Hier noch ein anderes Beispiel, in dem Namen verwendet werden, die als reguläre Namen nicht erlaubt wären.

Konsole

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE "FROM" ( "SELECT" VARCHAR ( 255 ));
INSERT INTO "FROM" ( "SELECT" ) VALUES ( '0' );

SELECT "SELECT" FROM "FROM";

+--------+
| SELECT |
+--------+
| 0 |
+--------+

Man kann sich auf einen regulären Namen auch durch einen begrenzten Namen beziehen, der den regulären Namen in Anführungszeichen enthält.

Konsole

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE ANTON ( BERTA VARCHAR ( 255 ));
INSERT INTO ANTON ( BERTA ) VALUES ( '0' );

SELECT "BERTA" FROM "ANTON";

+-------+
| BERTA |
+-------+
| 0 |
+-------+

Zitieren ohne »ANSI_QUOTES«

Das Zeichen »`« wird Gravis  genannt.

Falls der Modus »ANSI_QUOTES« nicht  aktiv ist, verwendet MySQL  eine nicht-standardkonforme Notation, bei welche zum Zitieren Gravis »`« verwendet werden, während die Anführungszeichen »"« wie Apostrophe »'« zum Schreiben von Zeichenfolgenliteralen verwendet werden können.

Konsole

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
SET div_precision_increment = 4;
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE ` 0!` ( `0/1` VARCHAR ( 255 ));
INSERT INTO ` 0!` ( `0/1` ) VALUES ( "5" );

SELECT `0/1` FROM ` 0!`;

+------+
| 0/1 |
+------+
| 5 |
+------+

Der Modus »ANSI« schließt den Modus »ANSI_QUOTES« ein.

Zitieren in Skripten

In MySQL-Skripten werden von manchen Programmierern alle Name sicherheitshalber in Gravis eingeschlossen. Dies ist aber meistens nicht nötig. Verschiedene Datenbanksysteme verwenden verschiedene Schreibweisen für das Zitieren. Wenn man in Skripten unnötig viele Gravis verwendet, dann wird dadurch das Übertragen des Skripts auf ein anderes Datenbanksystem erschwert.

Es empfiehlt sich für Namen (beispielsweise von Schemata, Tabellen und Spalten) nur Buchstaben zu verwenden. Wenn man dann noch in SQL  und vielen Datenbanksystemen reservierte Schlüsselwörter und reservierte Namen vermeidet, sollte das Begrenzen selten nötig sein.

Zitat *

9075-2 7.12 (Entwurf 2010, vereinfacht)
<factor> ::= [ <sign> ] <numeric primary>
<numeric primary> ::= <value expression primary>
<value expression primary> = <column reference>
<column reference> ::= <basic identifier chain>
<basic identifier chain> ::= <identifier chain>
<identifier chain> ::= <identifier> [ { <period> <identifier> }... ]
9075-2 5.2 (Entwurf 2010, vereinfacht)
<identifier> ::= <actual identifier>
<actual identifier> ::= <regular identifier> | <delimited identifier> | <Unicode delimited identifier>
<regular identifier> ::= <identifier body>
<identifier body> ::= <identifier start> [ <identifier part>... ]
<identifier part> ::= <identifier start> | <identifier extend>
An <identifier start> is any character in the Unicode General Category classes “Lu” (upper-case letter), “Ll” (lower-case letter), “Lt” (title-case letter), “Lm” (modifier letter), “Lo” (other letter), or “Nl” (letter number).
An <identifier extend> is U+00B7, “Middle Dot”, or any character in the Unicode General Category classes “Mn” (nonspacing marks), “Mc” (spacing combining marks), “Nd” (decimal numbers), “Pc” (connector punctuations [this includes the underscore »_«]), or “Cf” (formatting codes).
9075-2 5.4 (Entwurf 2010, vereinfacht)
NOTE 111 — It is the intention that no <key word> specified in ISO/IEC 9075 or revisions thereto shall end with an <underscore>.

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 stefanram723287 stefan_ram:723287 Namen in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723287, slrprddef723287, 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/namen_sql