Avatar billede jj30 Nybegynder
02. november 2009 - 11:33 Der er 13 kommentarer og
1 løsning

CREATE TABLE AS

Jeg er ved at lave et system der skal kunne kopiere tabeller i en MySql5 database.

Jeg bruger 'create table as' og jeg får oprettet tabeller der er magen til, men mine 'auto_increment' attributter kommer ikke med.

Nogen der har en løsning?
Avatar billede jj30 Nybegynder
02. november 2009 - 11:44 #1
Det ser ud til at min ID kolonne ikke er primary key efter kopieringen og at det måske har noget med det at gøre?
02. november 2009 - 12:08 #2
Hvis du sendte tabel og create table skripten saa kunne man kikke paa det mere konkret i stedet for at gaette.
Avatar billede jj30 Nybegynder
02. november 2009 - 12:18 #3
Scriptet er genereret i PHP, men det ser sådan her ud:

1) Opret tabellen
--------
CREATE TABLE IF NOT EXISTS `old_table1` (
  `id` int(11) NOT NULL auto_increment,
  `data` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--------


2) Indsæt lidt data
insert into old_table1 (id, data) values (null, 'test 1');
insert into old_table1 (id, data) values (null, 'test 2');
insert into old_table1 (id, data) values (null, 'test 3');


3) Kopier tabellen
create table new_table1 select * from old_table1

4) Kontroller om ID kolonnen i den nye tabel 'new_tabel1' har auto_increment på.
Avatar billede michael_stim Ekspert
02. november 2009 - 12:40 #4
Du kan ikke have NULL i dit id felt.

insert into old_table1 (data) values ('test 1');
insert into old_table1 (data) values ('test 2');
insert into old_table1 (data) values ('test 3');
Avatar billede jj30 Nybegynder
02. november 2009 - 12:56 #5
Har ikke noget med problemet at gøre jo
Avatar billede jj30 Nybegynder
02. november 2009 - 12:56 #6
Uanset om der er indsat data i tabellen eller ej er problemet der!
02. november 2009 - 12:59 #7
Med "CREATE TABLE new_table1 SELECT * FROM old_table1" faar du, som du har konstateret, ikke auto_increment med.

Hvis du vil have en ny tabel med det gamle indhold og autoincrement saa er det en to-trins raket:

"CREATE TABLE new_table1 LIKE old_table1"

Kopierer strukturen, inklusiv auto_increment, men ingen data.

INSERT INTO new_table SELECT * FROM old_table1

Saa er de gamle data infyldt.

INSERT INTO new_table1(id, data) VALUES (null, "test 1");

indsaetter saa en ny rekord med korrekt auto-incremented id.
Avatar billede jj30 Nybegynder
02. november 2009 - 13:00 #8
// For Prins Knud
Scriptet er genereret i PHP, men det ser sådan her ud:

1) Opret tabellen
--------
CREATE TABLE IF NOT EXISTS `old_table1` (
  `id` int(11) NOT NULL auto_increment,
  `data` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--------


2) Indsæt lidt data
insert into old_table1 (id, data) values ('test 1');
insert into old_table1 (id, data) values ('test 2');
insert into old_table1 (id, data) values ('test 3');


3) Kopier tabellen
create table new_table1 select * from old_table1

4) Kontroller om ID kolonnen i den nye tabel 'new_tabel1' har auto_increment på.
Avatar billede jj30 Nybegynder
02. november 2009 - 13:07 #9
Fik dette svar på forum.mysql.com.
---------------------------------------------
CREATE TABLE with AS SELECT clause allows to specify column attributes explicitly.
CREATE TABLE table2 (PRIMARY KEY(id)) AS SELECT * FROM table1;

But there is a LIKE clause that creates new table with appropriate structure.
CREATE TABLE table2 LIKE table1;

After, populate your data:
INSERT INTO table2 SELECT * FROM table1;

Devart Company,
Database development tools
http://www.devart.com/dbforge.
-------------------------------------------------

Løsningen er så:
----------------------------
CREATE TABLE new_table1 LIKE old_table1
INSERT INTO new_table1 SELECT * FROM old_table1

Jeg har testet det og det virker :)

Tak for hurtigt svar herinde!
Avatar billede jj30 Nybegynder
02. november 2009 - 13:09 #10
Undskyld Christian.

Nåede ikke at se dit svar da jeg var ved at teste svaret fra mysql.com, du har svaret præcis det samme :) Og det var 100% det jeg havde brug for.

Mange tak for hurtigt svar:)
Avatar billede jj30 Nybegynder
02. november 2009 - 13:10 #11
Lukker her!
02. november 2009 - 13:24 #12
Lukker du ved at give points?
Avatar billede jj30 Nybegynder
03. november 2009 - 10:23 #13
Har forsøgt at lukke og give points igår 'Lukker her', men ingen points blev tildelt???

Jeg har nu igen sat hak i 'Acceptér dette svar', og jeg klikker så på 'Opret'.
Avatar billede jj30 Nybegynder
03. november 2009 - 10:24 #14
Ok, der kommer simpelthen, når man i toppen af siden sætter hak i 'Accepter svar' en firkant med Pointafgivelse :) Svært at få øje på når der er så langt imellem de 2 steder.

Klikker nu på afgiv 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