MySQL: c'è qualcosa di simile a un identificatore record interno per ogni record in una tabella di MySQL?

StackOverflow https://stackoverflow.com/questions/2258052

  •  20-09-2019
  •  | 
  •  

Domanda

Sto costruendo un'applicazione foglio di calcolo utilizzando MySQL come storage, ho bisogno di identificare i record che devono essere aggiornati sul lato client, al fine di salvare le modifiche.

C'è un modo, come una sorta di "identificatore record interno" (interna come in utilizzato dal motore di database stesso), per identificare in modo univoco i record, in modo che sarò in grado di aggiornare quella corretta?

Certamente, una query di selezione può essere utilizzato per identificare il record, compresi tutti i campi della tabella, ma, ovviamente, che ha il lato negativo di tornare più record nella maggior parte delle situazioni.

IMPORTANTE: l'applicazione foglio di calcolo si propone di lavorare su qualsiasi tavolo, anche quelli tremendamente mal progettato, senza chiavi, in modo da soluzioni come "definire un campo con un indice unico e lavorare con quel" non sono un'opzione, struttura della tabella può essere estremamente variabile e non devono materia.

Molte grazie.

È stato utile?

Soluzione

AFAIK tale identificatore univoco interno (ad esempio, un semplice ID di riga) esiste.

possono forse essere in grado di eseguire un SELECT senza alcun ordinamento e quindi ottenere la riga n-esima utilizzando un LIMIT. Quali sono le condizioni che sia affidabile e sicuro da usare, un mySQL Guru avrebbe bisogno di confermare. E probabilmente mai lo è.

Prova a giocare con phpMyAdmin , l'interfaccia web per mySQL. È stato progettato per trattare con tavoli mal progettati senza chiavi. Se non ricordo male, si usa tutti colonne si può entrare in possesso di in questi casi:

UPDATE xyz set a = b WHERE 'fieldname'  = 'value' 
                       AND 'fieldname2' = 'value2' 
                       AND 'fieldname3' = 'value3' 
                       LIMIT 0,1;

e così via.

Questo non è del tutto duplicato di sicurezza o, naturalmente.

L'unica idea che mi viene in mente è quello di aggiungere una colonna chiave in fase di esecuzione, e di togliere quando la vostra applicazione è fatto. E 'un'idea d'oca-bump-indurre, ma forse meglio di niente.

Altri suggerimenti

MySQL ha "incremento automatico" colonne numeriche che è possibile aggiungere e anche definire come chiave primaria, che darebbe un ID di record univoco generato automaticamente dal database. È possibile interrogare l'ultimo ID record appena inserito con select LAST_INSERT_ID()

esempio dalla documentazione ufficiale di MySQL qui

Per quanto ne so, MySQL non ha la funzione di ROWID implicita come si è visto in Oracle (ed esiste in altri motori con la loro sintassi). Dovrete creare il proprio AUTO_INCREMENT campo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top