Zitat von
Jelly:
Das halte ich für einen total misslungenen Versuch, noch eine weitere Lösung zu suchen. Deine SP schlägt fehl, nämlich an 2 Stellen:
1. Was, wenn die ID=-1 tatsächlich in der Tabellenspalte ID existiert
Manno, dann eben auf -1000, NULL, 123234545 oder sonstwas prüfen.
Zitat von
Jelly:
2. Was, wenn mehrere Datensätze mit der gesuchten ID existieren. Dann gibts wohl ne
Exception
Bei
mySQL weiss ich das nicht, bei
MSSQL jedenfalls nicht. Aber es gibt doch ein 'Select TOP 1' oder so auch bei
mySQL, oder?
Zitat von
Jelly:
select count(id) as N from Tabelle where id = 123
Und was ist, wenn es 1000000 Einträge der ID=123 gibt? Dann dauert die Integritätsprüfung ziemlich lange... Ist natürlich weit hergeholt, entspricht aber deinem Kritkniveau.
Aggregatfunktionen sollten nicht für solche fundamentalen Abfragen auf Integrität verwendet werden, dafür sind sie einfach nicht gedacht. Aber klar, gehen tut alles.
Soweit ich weiss, gibt es einen exists-Operator bei
SQL, inwieweit
mySQL das kann, weiss ich aber nicht:
If Exists (select * from Tabelle where id = 123)
Das bricht sofort ab, sobald ein Eintrag gefunden wurde, vermeidet also den Extemfall der 1000000 Einträge von Jellys Idee.
Falls
mySQL das nicht kennt, würde ich Hansas Version verwenden. Sie ist dann optimal (sofern es ein "Select TOP 1") gibt.
Natürlich muss die Spalte
IDE indiziert sein, das nur so am Rande.