programming:mysql
Inhaltsverzeichnis
MySQL
Variablen
Datumsüberschneidung
Blob als String
manche Befehle (u.a. CONCAT/CONCAT_WS/GROUP_CONCAT) erzeugen u.U. einen Binärwert (Blob) statt einen String.
CAST(CONCAT_WS(";",h.id,h.starttime,h.endtime,count(t.id)) AS CHAR)
Update mit Join
Delete mit Join
delete s from head h inner join text t on t.id=h.description inner join status s on s.head_id=h.id where xxx
mehrstufiges Join
um nur Datensätze ranzuhängen, wenn verteilte (über mehrere Tabellen) Bedingungen zutreffen
left join ticket_head th inner join ticket t ON t.id=th.ticket_id inner join apptype ta ON ta.id=t.apptype_system_id ON th.head_id=h.id and ta.name='tickettype'
insert/update
höchsten Wert beim Update:
INSERT INTO monthlystats (id, server, time, uptime, players, rank) VALUES (09126, 6, 0912, 302, 0, 1) ON DUPLICATE KEY UPDATE uptime = GREATEST(uptime, VALUES(uptime)), players = GREATEST(players, VALUES(players)), rank = GREATEST(rank, VALUES(rank))
nachfolgender Datensatz mit join
SELECT * FROM `table` t1 LEFT JOIN `table` as t2 ON t2.name=t1.name and t2.`date`<t1.date /*last date (where) and the one before it with same name*/ WHERE t1.`name`='search for name' and t1.`date`='2020-10-12' ORDER BY t1.`date` desc,t2.`date` desc /*sort by both tables date-column*/ limit 1 /*get only first dataset*/
Zeitzonen
SELECT @@global.time_zone, @@session.time_zone;
beim wert system muss man via shell auf dem Server schauen
$ date +"%Z %z" CEST +0200
die DB solte eigentlich auf UTC sein und für die session kann man dann die entsprechende Zeitzone setzen:
SET time_zone = 'Europe/Berlin'
sollte mysql hier einen Fehler bringen, müssen die Zeitzonen im System importiert werden:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo/|mysql -u root mysql -p
Insert select
INSERT INTO status (ressort_id,head_id) SELECT 54,h.id FROM head h LEFT JOIN text txt ON txt.id=h.description WHERE txt.text LIKE '%test%'
programming/mysql.txt · Zuletzt geändert: 2023/06/08 17:06 von 127.0.0.1