Benutzer-Werkzeuge

Webseiten-Werkzeuge



programming:mysql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
programming:mysql [2018/06/11 21:41] frankprogramming:mysql [2023/06/08 17:06] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== MySQL ======
  
 +===== Variablen =====
 +
 +<code mysql>
 +set @d="2018-06-14";
 +set @st=CONCAT(@d," 00:00:00");
 +set @et=CONCAT(@d," 06:00:00");
 +</code>
 +
 +===== Datumsüberschneidung =====
 +
 +<code mysql>
 +where (h.starttime< @et) and (h.endtime> @st)
 +</code>
 +
 +===== Blob als String =====
 +
 +manche Befehle (u.a. CONCAT/CONCAT_WS/GROUP_CONCAT) erzeugen u.U. einen Binärwert (Blob) statt einen String.
 +<code mysql>
 +CAST(CONCAT_WS(";",h.id,h.starttime,h.endtime,count(t.id)) AS CHAR)
 +</code>
 +
 +===== Update mit Join =====
 +<code mysql>
 +UPDATE TABLEA a 
 +   JOIN TABLEB b ON a.join_colA = b.join_colB  
 +SET a.columnToUpdate = [something]
 +</code>
 +===== Delete mit Join =====
 +<code mysql>
 +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
 +</code>
 +
 +===== mehrstufiges Join =====
 +
 +um nur Datensätze ranzuhängen, wenn verteilte (über mehrere Tabellen) Bedingungen zutreffen
 +<code mysql>
 +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'
 +</code>
 +
 +===== insert/update =====
 +
 +höchsten Wert beim Update:
 +<code>
 +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))
 +</code>
 +===== nachfolgender Datensatz mit join =====
 +
 +<code mysql>
 +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*/
 +</code>
 +===== 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%'