MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern?

Xearox

Mitglied
Moin moin,

ich habe da mal eine Frage. Ich habe bisher noch nie mit Funktionen in MySQL direkt gearbeitet.

Ich habe eine Tabelle, in der eine Zelle von extern gefüllt wird oder eben nicht. Falls diese Zelle leer sein sollte, soll eine andere Zelle von 1 auf 0 geändert werden. Gleiches gilt, wenn die eine Zelle Text enthält, soll die andere Zelle von 0 auf 1 geändert werden.

Ist dies mit diesen Funktionen in MySQL direkt realisierbar? Und falls ja, wie funktioniert das? Die Syntax von MySQL bzw. die für Funktionen scheint sehr stark Pascal zu ähneln.

Wäre echt dankbar, wenn mir da jemand eine Gute Seite für empfehlen kann, um sich da mal einzuarbeiten oder mir da ein passendes Snippet zu liefern =)

Vielen Dank =)

Ich weiß nicht, ob ich das im richtigen Foren Bereich poste, also bitte verschieben, wenns falsch ist ;-)
 

Tobse

Top Contributor
Ja, du musst einen Update-Trigger definieren. So in etwa:

SQL:
CREATE TRIGGER someTrigger AFTER UPDATE ON tabelle
FOR EACH ROW UPDATE tabelle SET feld2 = IF(feld1 IS NULL, 0, 1)
 

Xearox

Mitglied
Ich hab das funktioniert, allerdings hab ich dann immer wieder die Fehlermeldung:
Code:
[ERROR][15:07:38] Can't update table 'accounts' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
[ERROR][15:07:38] HY000
[ERROR][15:07:38] 1442

Habs dann bissl umgeschrieben und zwar in das hier:
SQL:
CREATE DEFINER=`root`@`localhost` TRIGGER `xfriendsdev`.`accounts_AFTER_UPDATE` AFTER UPDATE ON `accounts` FOR EACH ROW
BEGIN
    IF 'PlayingOn' <> '' THEN
        INSERT INTO `accounts`(InGame) VALUES (1);
    END IF;
    IF 'PlayingOn' = '' THEN
        INSERT INTO `accounts` (InGame) VALUES (0);
    END IF;
END

Und nun bekomme ich die Fehlermeldung:
Code:
[ERROR][15:16:14] Could not update online status in account table for 1dc3a9dc-b24e-445d-b4a6-e3ad5cccd997!
[ERROR][15:16:14] Field 'UUID' doesn't have a default value
[ERROR][15:16:14] HY000
[ERROR][15:16:14] 1364

Und das verstehe ich überhaupt nicht. Warum wird UUID im Trigger überhaupt angesprochen?!
Am Update selbst kann es nicht liegen, da sobald ich den Trigger weg nehme, läuft es ohne Probleme weiter :/

Java:
String sql = "UPDATE accounts SET InGame = ? , PlayingOn = ? WHERE UUID = ?";
 
Zuletzt bearbeitet:

Tobse

Top Contributor
In deinem Trigger insertest du ja auch. Natürlich brauchst du die UUID für eine neue Zeile. Du kannst mal dashier versuchen:

SQL:
CREATE TRIGGER trigger AFTER UPDATE ON accounts FOR EACH ROW
SET InGame = IF(PlayingOn = '', 0, 1)

P.S.: Bennene deinen Trigger besser. Dass er auf die Tabelle accounts geht und AFTER UPDATE ausgeführt wird, weiss man schon. Bennene ihn nach dem, was er macht ("z.B. consistency_playingOn_inGame")
 

Xearox

Mitglied
In deinem Trigger insertest du ja auch. Natürlich brauchst du die UUID für eine neue Zeile. Du kannst mal dashier versuchen:

SQL:
CREATE TRIGGER trigger AFTER UPDATE ON accounts FOR EACH ROW
SET InGame = IF(PlayingOn = '', 0, 1)

P.S.: Bennene deinen Trigger besser. Dass er auf die Tabelle accounts geht und AFTER UPDATE ausgeführt wird, weiss man schon. Bennene ihn nach dem, was er macht ("z.B. consistency_playingOn_inGame")

Ich glaub, ich stehe Mega aufm Schlauch.
Habe das nun so wie in deinem Beispiel.
SQL:
CREATE TRIGGER change_ingame_status AFTER UPDATE ON accounts FOR EACH ROW
SET InGame = IF(PlayingOn = '', 0, 1)

Fehler:
Code:
ERROR 1193: Unknown system variable 'InGame'
SQL Statement:
CREATE TRIGGER change_ingame_status AFTER UPDATE ON accounts FOR EACH ROW
SET InGame = IF(PlayingOn = '', 0, 1)

Füge ich nun ein NEW hinzu vor InGame:
SQL:
CREATE TRIGGER change_ingame_status AFTER UPDATE ON accounts FOR EACH ROW
SET NEW.InGame = IF(PlayingOn = '', 0, 1)

erhalte ich diese Fehlermeldung:
Code:
ERROR 1362: Updating of NEW row is not allowed in after trigger
SQL Statement:
CREATE TRIGGER change_ingame_status AFTER UPDATE ON accounts FOR EACH ROW
SET NEW.InGame = IF(PlayingOn = '', 0, 1)

Dazu habe ich das hier gefunden:
http://stackoverflow.com/questions/8061041/syntax-error-defining-mysql-trigger
http://stackoverflow.com/questions/25983350/error-creating-trigger-unknown-system-variable
http://stackoverflow.com/questions/...-trigger-causes-unknown-system-variable-error

Im Kern wird gesagt, das man NEW davor setzen sollte, aber das geht wiederum nur im Before.
 

Xearox

Mitglied
Und was hindert dich daran daraus einen before trigger zu machen?

Ich habe eigentlich nach einem Weg gesucht, das ganze automatisch machen zu lassen, ohne einen Trigger, wie z.B. in Excel, das wenn eine Zelle Leer ist, soll eine andere einen bestimmten Wert bekommen. Daher hatte ich im Eingangsposting geschrieben, ob es eine Möglichkeit über Functions das zu machen. Dann hat Tobse Trigger vorgeschlagen.

Der Grund warum ich das ganze automatisiert haben möchte ist, dass es manchmal vorkommt, dass die Java Anwendung die Spalte InGame nicht ändert. Hab den Bug noch nicht gefunden, warum er das macht. Deswegen wollte ich, das die Datenbank das macht.

Nutze MySQL 5.6, wäre eventuell noch wichtig zu sagen.
 

Thallius

Top Contributor
Mal ganz davon abgesehen, dass alleine das vorhanden sein einer solchen Abhängigkeit schon zu 99% ein Designfehler in der Datenbank ist. Wenn eine Zeile oder Spalete etwas enthalten soll, wenn eine andere Zeile oder Spalte etwas enthältvoder nicht, dann ist das eine Redundanz die man niemals haben sollte.

Gruß

Claus
 

Meniskusschaden

Top Contributor
Ich habe eigentlich nach einem Weg gesucht, das ganze automatisch machen zu lassen, ohne einen Trigger, wie z.B. in Excel, das wenn eine Zelle Leer ist, soll eine andere einen bestimmten Wert bekommen. Daher hatte ich im Eingangsposting geschrieben, ob es eine Möglichkeit über Functions das zu machen. Dann hat Tobse Trigger vorgeschlagen.
Wenn die Datenbank automatisch etwas tun soll, sind Trigger schon der richtige Weg. Es ist aber keine gute Idee, in einem AfterUpdate-Trigger ein Update auf dieselbe Tabelle aufzurufen, denn das würde ja wieder den AfterUpdate-Trigger auslösen und der wieder ein Update und ... . Im BeforeTrigger hätte man aber noch die Möglichkeit, die Werte zu manipulieren, ohne einen weiteren Update-Befehl abzusetzen.

Wenn man viel Logik in die Datenbank legen möchte, können Trigger schon ein guter Weg sein. Aber als WorkAround um einen nicht auffindbaren Programmierfehler zu kompensieren, finde ich den Ansatz auch fragwürdig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
kaoZ HyperSQL vs. MYSQL Datenbankprogrammierung 4
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
V Internationalization mit MySql Datenbankprogrammierung 1
K Adressverwaltung mit MySql und Java? Datenbankprogrammierung 11
M Java Mysql verbinden Datenbankprogrammierung 3
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3
L MySQL App/Java Zugriff auf Mysql-DB funktioniert nicht Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben