Avatar billede pagh80 Nybegynder
04. november 2005 - 14:57 Der er 10 kommentarer og
1 løsning

sletning af rækker samt renumerering af id(primary key)

Hej. Jeg Jeg er ved at lave et system som indsætter data i en mysql database tabel hvert sekund. Når der er gået 20 min. skal jeg trække de 10 min. ældste data ud og slette dem fra databasen. Problemet er at hvis jeg ikke på en eller anden måde kan resette min primary key ID(som jeg har sat som auto increment) vil dette tal blive meget stort efter bare et år(det vil nå op på 35.5 mil efter et år). Er der nogen måde hvorpå jeg kan renumerere mine resterende rækker så de starter fra 1 igen.

Eks:
her er en tabel med id(primary key) og data
Ny vil jeg gerne slette de sidste 3 og indsætte 3 nye data i tabellen

id  data
1    a
2    b
3    c
4    d
5    e
6    f

Efter at have slettet de 3 ældste data vil min tabel se således ud:

id  data
4    d
5    e
6    f

Dette vil jeg gerne have ændret så det ser således ud:

id  data
1    d
2    e
3    f

OG når jeg så indsætter 3 nye data vil id automatisk blive talt en op for hver række der blive indsat.

På forhånd tak for hjælpen.
Avatar billede bromer Nybegynder
04. november 2005 - 14:59 #1
Det er en meget dårlig ide at gøre. Bare lad den køre.. det kan vel være ligemeget at den når 35.5 mil på et år?
Avatar billede bromer Nybegynder
04. november 2005 - 15:01 #2
Hvis du laver den unsigned er der nok til 120 år... ellers er der "kun" plads til 60 år.
Avatar billede pagh80 Nybegynder
04. november 2005 - 15:01 #3
ja men er der ikke nogen grænse på hvor stor denne id kan blive? Min database skal gerne køre i mange år uden at gå ned
Avatar billede pagh80 Nybegynder
04. november 2005 - 15:02 #4
ok. tak for svaret bromer. 60 år skulle være nok ;)
Så behøver jeg ikke tænke på om den pludselig kan gå ned
Avatar billede bromer Nybegynder
04. november 2005 - 15:05 #5
Jeg smider lige et svar...
Avatar billede pagh80 Nybegynder
04. november 2005 - 15:19 #6
min tabel er oprettet på følgende måde:

CREATE TABLE Test (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), Time TIMESTAMP, Power FLOAT, Wind FLOAT, RPM INT, Temp FLOAT, State VARCHAR(30))

Min primary key er sat som INT. Hvad er grænsen for INT? er der en anden værdi jeg burde bruge istedet som har en større grænse?
Avatar billede bromer Nybegynder
04. november 2005 - 15:22 #7
Jeg mener at når du bare skriver int så tager den som en signed int. Du kan oprette den som:

CREATE TABLE Test (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), Time TIMESTAMP, Power FLOAT, Wind FLOAT, RPM INT, Temp FLOAT, State VARCHAR(30))

Så er der tal nok til mere end 500000 milioner år.
Avatar billede bromer Nybegynder
04. november 2005 - 15:24 #8
Du kan læse om typerne og deres grænser på http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Avatar billede pagh80 Nybegynder
04. november 2005 - 15:27 #9
tak for hjælpen bromer :)
Du skulle have fået dine point nu
Avatar billede bromer Nybegynder
04. november 2005 - 15:27 #10
Det var så lidt.
Avatar billede bromer Nybegynder
04. november 2005 - 15:27 #11
og tak for points
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester