Hej alla,
Jag har en MySQL databas och jag har lite problem med att ÖKA en auto_increment och letar efter korrekt SQL syntax.
Jag visar med kod mina försök och försöker förklara och kanske någon kan ge mig lite hanvisningar eller kanske tom rätt kod=)..
Om man bara vill sätta autoincrementen är det inga problem:
ALTER TABLE log_entry AUTO_INCREMENT=10;
det fungerar utmärkt.. Men jag vill ÖKA som sagt var, inte sätta.
Så jag provar
ALTER TABLE log_entry AUTO_INCREMENT=AUTO_INCREMENT+100;
och med en subquery
ALTER TABLE log_entry AUTO_INCREMENT = (SELECT MAX(id)+100 FROM log_entry)
SELECT @maxinc:= MAX(id)+100 FROM log_entry;
ALTER TABLE log_entry AUTO_INCREMENT=@maxinc;
Men ingen av dessa fungerar utan ger endast felaktig syntax.=(
Tyvärr har server inte tillgång till något programmeringsspråk utan är endast ren linux.. Annars hade jag löst det på 3 röda sekunder med en variabel=)..
Är det någon som vet hur man gör detta i ren MySQL?
Tacksam för snabbt svar!
Mvh
-- Jon
GunnarDMedlem sedan juni 20014 290 inlägg "ALTER TABLE" används när du vill modifiera en tabels struktur.
Har du AUTO_INCREMENT på en kolum så ökas den automatiskt när du gör en INSERT till tabellen.
Se http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html för exempel.
Tack Gunnar.
Men jag behöver öka på auto incrementen med någon fin jämn siffra. Anledningen för detta är ett relativt komplext distribuerat system, som får problem vid omstart..
Så jag måste få upp autoincrementen en heldel så att nästa system insert ökar på..
Någon som vet hur man gör detta utan att göra massa inserts?
Mvh
-- Jon
Jag har inga bättre förslag på kod. Men om du nu bara vill göra det en gång kanske du helt enkelt kan hämta ut/räkna ut ett lämpligt värde och sedan skriva "ALTER TABLE log_entry AUTO_INCREMENT=41368;" manuellt vid prompten?
Hej Nitro2k01..
Mjo.. det kan jag förståss göra, men det hade varit smidigt att bara göra ett script (såsom jag försöker åvan) som alla anställda kan köra när just omstarer sker..=)
GunnarDMedlem sedan juni 20014 290 inlägg Ett snabbt sätt hur man skulle kunna göra det:
mysql> create table wfinc (
-> id int auto_increment primary key,
-> namn varchar(255));
Query OK, 0 rows affected (0.17 sec)
mysql> insert into wfinc (namn) values('aaa');
Query OK, 1 row affected (0.00 sec)
mysql> insert into wfinc (namn) values('bbb');
Query OK, 1 row affected (0.00 sec)
mysql> insert into wfinc (id, namn) values(100, 'ccc');
Query OK, 1 row affected (0.00 sec)
mysql> insert into wfinc (namn) values('ddd');
Query OK, 1 row affected (0.00 sec)
mysql> select * from wfinc;
+-----+------+
| id | namn |
+-----+------+
| 1 | aaa |
| 2 | bbb |
| 100 | ccc |
| 101 | ddd |
+-----+------+
mysql> update wfinc set id=200 where namn='ddd';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> insert into wfinc (namn) values('eee');
Query OK, 1 row affected (0.00 sec)
mysql> select * from wfinc;
+-----+------+
| id | namn |
+-----+------+
| 1 | aaa |
| 2 | bbb |
| 100 | ccc |
| 200 | ddd |
| 201 | eee |
+-----+------+
5 rows in set (0.00 sec)
Så gör ett script som gör en "INSERT INTO tabel SET id=startvärde" så kommer den räkna från startvärde, om du samtidigt sätter ett annat vält med anleningen varför id sattes så får du en liten log vad som hände.
Fungerar även med update kommandot.
Hittade ett sätt från ren linux shell som löste problemet:
jag lade detta i en fil som jag sedan lade på executable på...
!/bin/sh
result=$(mysql -u myuser db_log -sN -e "SELECT MAX(id) FROM log_entry")
result=$(expr $result + 1000)
mysql -u myuser db_log -sN -e "ALTER TABLE log_entry AUTO_INCREMENT=$result"
echo "log_entry was set to next auto_increment [" $result "] and will be set on the next insert... (thats an add with 1000)"
Hoppas detta hjälper någon annan=)..
Mvh
-- Jon