Gibt den Standardwert einer Tabellenspalte zurück. Wenn die Spalte keinen Standardwert hat, wird ein Fehler erzeugt.
mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;
FORMAT(
X
,D
)
Formatiert die Zahl X
in ein
Format wie '#,###,###.##'
, gerundet auf
D
Dezimalstellen, und gibt das
Ergebnis als String zurück. Detaillierte Informationen
finden Sie in Abschnitt 12.3, „String-Funktionen“.
Versucht eine Sperre mit dem String
str
als Namen zu erwirken.
Hierbei wird ein Zeitüberschreitungswert von
timeout
Sekunden angewendet. Gibt
1
zurück, wenn die Sperrung erfolgreich
war, 0
, wenn es zu einer
Zeitüberschreitung kam (etwa weil zuvor ein anderer Client
den Namen gesperrt hatte), oder NULL
,
wenn ein Fehler aufgetreten ist (z. B. aufgrund von
Speichermangel oder einer Terminierung des Threads mit
mysqladmin kill). Wurde eine Sperre mit
GET_LOCK()
erwirkt, so wird diese wieder
aufgehoben, wenn Sie RELEASE_LOCK()
oder
noch einmal GET_LOCK()
ausführen oder
Ihre Verbindung – gewünscht oder unvorhergesehen –
endet.
Diese Funktion kann zur Implementierung von
Anwendungssperren oder zur Simulation von Datensatzsperren
verwendet werden. Die Namen werden serverweit gesperrt. Wenn
ein Name von einem Client gesperrt wird, blockiert
GET_LOCK()
alle weiteren Anforderungen
von gleichnamigen Sperren durch andere Clients. So wiederum
können Clients, die einem gegebenen Sperrennamen zustimmen,
diesen Namen zur Durchführung kooperativer beratender
Sperrungen verwenden. Sie müssen allerdings beachten, dass
auf diese Weise auch Clients, die nicht zu den
kooperierenden Clients gehören, unbeabsichtigt oder gezielt
einen Namen sperren und so verhindern können, dass ein
kooperierender Client den Namen sperren kann. Sie können
die Wahrscheinlichkeit hierfür verringern, indem Sie
Sperrnamen verwenden, die datenbank- oder
anwendungsspezifisch sind. Verwenden Sie beispielsweise
Sperrnamen der Form db_name.str
oder app_name.str
.
mysql>SELECT GET_LOCK('lock1',10);
-> 1 mysql>SELECT IS_FREE_LOCK('lock2');
-> 1 mysql>SELECT GET_LOCK('lock2',10);
-> 1 mysql>SELECT RELEASE_LOCK('lock2');
-> 1 mysql>SELECT RELEASE_LOCK('lock1');
-> NULL
Der zweite RELEASE_LOCK()
-Aufruf gibt
NULL
zurück, weil die Sperre
'lock1'
automatisch durch den zweiten
GET_LOCK()
-Aufruf aufgehoben wurde.
Hinweis: Wenn ein Client versucht, eine Sperre zu erwirken,
die bereits von einem anderen Client gehalten wird, dann
erfolgt die Sperrung gemäß dem Argument
timeout
. Wird der blockierte
Client beendet, dann wird der Thread erst terminiert, wenn
eine Zeitüberschreitung der Sperranforderung erfolgt.
Dieser Bug ist bekannt.
Wird eine Netzwerkadresse als String in der üblichen Schreibweise (vier punktgetrennte Oktette) übergeben, dann gibt die Funktion einen Integer zurück, der den numerischen Wert der Adresse angibt. Adressen können 4 oder 8 Byte umfassen.
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
Die Zahl wird immer in der Reihenfolge der Netzwerkbytes erzeugt. Beim obigen Beispiel wird sie als 209×2563 + 207×2562 + 224×256 + 40 berechnet.
INET_ATON()
versteht auch IP-Adressen in
der Kurzform:
mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-> 2130706433, 2130706433
Hinweis: Wenn Sie Werte
speichern, die von INET_ATON()
erzeugt
wurden, empfehlen wir die Verwendung einer INT
UNSIGNED
-Spalte. Wenn Sie eine
(vorzeichenbehaftete) INT
-Spalte
verwenden, können Werte, die IP-Adressen entsprechen, deren
erstes Oktett größer als 127 ist, nicht korrekt
gespeichert werden. Siehe auch
Abschnitt 11.2, „Numerische Datentypen“.
Wenn eine numerische Netzwerkadresse mit einer Länge von 4 oder 8 Byte übergeben wird, gibt die Funktion die punktgetrennte Darstellung der Adresse als String zurück.
mysql> SELECT INET_NTOA(3520061480);
-> '209.207.224.40'
Überprüft, ob die Sperre mit dem Namen
str
frei (d. h. nicht gesperrt)
ist und verwendet werden kann. Gibt 1
zurück, wenn die Sperre verfügbar ist (also von niemandem
benutzt wird), 0
, wenn die Sperre aktiv
ist, und NULL
, wenn ein Fehler
aufgetreten ist (z. B. bei einem falschen Argument).
Überprüft, ob die Sperre mit dem Namen
str
verwendet wird (d. h. nicht
gesperrt ist). Ist dies der Fall, dann wird die
Verbindungskennung des Clients zurückgegeben, der die
Sperre hält. Andernfalls wird NULL
zurückgegeben.
MASTER_POS_WAIT(
log_name
,log_pos
[,timeout
])
Diese Funktion ist praktisch zur Steuerung der
Master/Slave-Synchronisation. Sie blockiert, bis der Slave
alle Änderungen bis zur im Master-Log angegebenen Position
gelesen und übernommen hat. Der Rückgabewert ist die
Anzahl der Logereignisse, auf die der Slave warten musste,
um bis zur angegebenen Position fortschreiten zu können.
Die Funktion gibt NULL
zurück, wenn der
SQL-Slave-Thread nicht gestartet wurde, die Master-Daten des
Slaves nicht initialisiert wurden, die Argumente inkorrekt
sind oder ein Fehler auftritt. -1
wird
bei einer Zeitüberschreitung zurückgegeben. Wenn der
SQL-Slave-Thread endet, während
MASTER_POS_WAIT()
wartet, gibt die
Funktion NULL
zurück. Befindet sich der
Slave bereits jenseits der angegebenen Position, dann
erfolgt die Rückgabe durch die Funktion unmittelbar.
Wenn ein timeout
-Wert angegeben
wird, beendet MASTER_POS_WAIT()
den
Wartevorgang, sobald timeout
Sekunden verstrichen sind.
timeout
muss größer als 0 sein;
ein Nullwert oder ein negativer
timeout
-Wert haben die Bedeutung
„kein timeout
-Wert“.
Gibt den angegebenen Wert zurück. Wenn
NAME_CONST()
zur Erzeugung einer
Ergebnismengenspalte verwendet wird, erhält die Spalte den
angegebenen Namen.
mysql> SELECT NAME_CONST('myname', 14);
+--------+
| myname |
+--------+
| 14 |
+--------+
Die Funktion wurde in MySQL 5.0.12 hinzugefügt und ist nur zur internen Verwendung vorgesehen. Der Server verwendet sie, wenn er Anweisungen aus gespeicherten Routinen schreibt, die Referenzen auf lokale Routinenvariablen haben (siehe Beschreibung in Abschnitt 19.4, „Binärloggen gespeicherter Routinen und Trigger“). Sie sehen die Funktion unter Umständen in der Ausgabe von mysqlbinlog.
Hebt die Sperre namens str
auf,
die mit GET_LOCK()
erwirkt wurde. Gibt
1
zurück, wenn die Sperre aufgehoben
wurde, 0
, wenn die Sperre nicht durch
diesen Thread erwirkt worden war (wobei die Sperre auch
nicht aufgehoben wird), und NULL
, wenn
der Name nicht existiert. Die Sperre existiert nicht, wenn
sie niemals von einem GET_LOCK()
-Aufruf
erwirkt worden war oder zuvor bereits aufgehoben wurde.
Die DO
-Anweisung ist in Kombination mit
RELEASE_LOCK()
sehr praktisch. Siehe auch
Abschnitt 13.2.2, „DO
“.
Setzt eine Unterbrechung mit einer Länge von der durch
duration
angegebenen Anzahl von
Sekunden und gibt dann 0 zurück. Wenn
SLEEP()
unterbrochen wird, wird 1
zurückgegeben. Die Dauer kann einen in Mikrosekunden
angegebenen Bruchteil enthalten.
Gibt eine UUID (Universal Unique Identifier) gemäß „DCE 1.1: Remote Procedure Call“ (Anhang A) der CAE-Spezifikation (Common Applications Environment Specifications), veröffentlicht von The Open Group im Oktober 1997 (Dokument Nr. C706, http://www.opengroup.org/public/pubs/catalog/c706.htm), zurück.
Eine UUID ist eine Zahl, die in Raum und Zeit eindeutig ist.
Bei zwei Aufrufen von UUID()
wird die
Erzeugung zweier vollkommen unterschiedlicher Werte erwartet
– und zwar auch dann, wenn diese beiden Aufrufe auf zwei
separaten Computern erfolgen, die nicht miteinander
verbunden sind.
Die UUID ist eine 128-Bit-Zahl, die durch einen String aus
fünf Hexadezimalzahlen im Format
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
dargestellt wird:
Die ersten drei Zahlen werden aus einem Zeitstempel erzeugt.
Die vierte Zahl bewahrt die zeitbezogene Eindeutigkeit für den Fall, dass der Zeitstempel seine Monotonie verliert (z. B. aufgrund der Sommerzeit).
Die fünfte Zahl schließlich ist eine IEEE 802-Knotennummer, die die räumliche Eindeutigkeit gewährleistet. Ersatzweise wird eine Zufallszahl eingesetzt, wenn die Knotennummer nicht vorhanden ist (weil der Computer beispielsweise keine Ethernetkarte hat oder wir nicht wissen, wie man die Hardwareadresse einer Schnittstelle unter Ihrem Betriebssystem ermitteln kann). In diesem Fall ist die räumliche Eindeutigkeit nicht garantiert. Nichtsdestoweniger ist eine Kollision sehr unwahrscheinlich.
Derzeit wird die MAC-Adresse einer Schnittstelle nur unter FreeBSD und Linux berücksichtigt. Unter anderen Betriebssystemen verwendet MySQL eine zufällig erzeugte 48-Bit-Zahl.
mysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
Beachten Sie, dass UUID()
noch nicht in
Verbindung mit der Replikation funktioniert.
In einer INSERT ... ON DUPLICATE KEY
UPDATE
-Anweisung können Sie die Funktion
VALUES(
in der col_name
)UPDATE
-Klausel verwenden, um
Spaltenwerte aus dem INSERT
-Teil der
Anweisung zu referenzieren. Anders gesagt, verweist
VALUES(
in der col_name
)UPDATE
-Klausel auf den Wert von
col_name
, der eingefügt worden
wäre, wäre nicht ein Konflikt aufgrund einer
Schlüsseldublette aufgetreten. Diese Funktion ist
insbesondere bei Einfügevorgängen für mehrere Datensätze
praktisch. Die Funktion VALUES()
ist nur
sinnvoll in INSERT ... ON DUPLICATE KEY
UPDATE
-Anweisungen zu verwenden; andernfalls gibt
sie NULL
zurück.
Abschnitt 13.2.4.3, „INSERT ... ON DUPLICATE KEY UPDATE
“.
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.