webForumDet fria alternativet

Öka på autoincrement i MySQL

6 svar · 987 visningar · startad av rincewind

rincewindMedlem sedan nov. 2003104 inlägg
#1

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
#2

"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.

rincewindMedlem sedan nov. 2003104 inlägg
#3

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

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

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?

rincewindMedlem sedan nov. 2003104 inlägg
#5

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
#6

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.

rincewindMedlem sedan nov. 2003104 inlägg
#7

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

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)