View Full Version : [MySQL] Inserimento dati in db
Fabietto206
12-03-2009, 16:07
Ho creato un database con mysql e ora dovrei caricarci sopra dei dati, come faccio?
Nel senso, so ke devo usare il comando:
LOAD DATA LOCAL INFILE 'percorso/nomefile.txt' INTO TABLE nometabella;
xò volevo sapere se i dati da scrivere nel file.txt devo formattarli in qualke modo?
alucard82
13-03-2009, 19:23
Ho creato un database con mysql e ora dovrei caricarci sopra dei dati, come faccio?
Nel senso, so ke devo usare il comando:
LOAD DATA LOCAL INFILE 'percorso/nomefile.txt' INTO TABLE nometabella;
xò volevo sapere se i dati da scrivere nel file.txt devo formattarli in qualke modo?
Ti posso dire come faccio io, visto che il tuo metodo non l'ho mai utilizzato:
Premettendo che DEVI AVERE UN FILE "GIUSTO" (ovvero con la sintassi mysql giusta), il comando per caricare tutto nel mysql è (ovviamente da riga di comando):
entri nel mysql:
mysql -u root -p
crei un database (se non è stato già creato)
CREATE DATABASE IF NOT EXISTS nomeDatabase;
utilizzi il database creato
USE nomeDatabase;
carichi il file (nomeFile può essere per esempio nomefile.txt . ATTENZIONE A NON METTERE IL ; ALLA FINE)
./nomeFile
oppure in alternativa
source nomeFile
(nn mi ricordo perfettamente ma dovrebbero essere questi i comandi)
p.s.: per questo passaggio ti consiglio di copiare il file nella cartella del mysql.exe che in genere è mysql/bin/
in questo modo dovrebbe caricarti tutto.
nel file dovresti avere qualcosa del tipo:
CREATE TABLE employees (
SSN varchar (30) NOT NULL,
firstName varchar (30) NOT NULL,
lastName varchar (30) NOT NULL,
birthday date NOT NULL,
employeeType varchar (30) NOT NULL,
departmentName varchar (30) NOT NULL,
PRIMARY KEY (SSN)
);
INSERT INTO employees VALUES ('920-58-4918', 'Patricia', 'Johnson', '1961-4-5',
'hourlyEmployee', 'R&D');
In pratica nel file dovrai scrivere esattamente quello che scrivi da riga di comando.
Non sò se ho reso l'idea :D spero di si. se ti serve altro chiedi pure.
Io ho inserito de valori con questa formattazione e poi l'ho caricati con quel comando ovvero :
load data local infile 'NOME_FILE.txt' into table NOME_TAB fields terminated by ';' enclosed by '\'';
0;'skipper';
1;'grinder';
2;'tattico';
3;'timoniere';
4;'velista';
5;'armatore';
prova e se hai bisogno ancora fatti pure sentire....ciaoooo :D
Fabietto206
14-03-2009, 13:19
Ti posso dire come faccio io, visto che il tuo metodo non l'ho mai utilizzato:
Premettendo che DEVI AVERE UN FILE "GIUSTO" (ovvero con la sintassi mysql giusta), il comando per caricare tutto nel mysql è (ovviamente da riga di comando):
entri nel mysql:
mysql -u root -p
crei un database (se non è stato già creato)
CREATE DATABASE IF NOT EXISTS nomeDatabase;
utilizzi il database creato
USE nomeDatabase;
carichi il file (nomeFile può essere per esempio nomefile.txt . ATTENZIONE A NON METTERE IL ; ALLA FINE)
./nomeFile
oppure in alternativa
source nomeFile
(nn mi ricordo perfettamente ma dovrebbero essere questi i comandi)
p.s.: per questo passaggio ti consiglio di copiare il file nella cartella del mysql.exe che in genere è mysql/bin/
in questo modo dovrebbe caricarti tutto.
nel file dovresti avere qualcosa del tipo:
CREATE TABLE employees (
SSN varchar (30) NOT NULL,
firstName varchar (30) NOT NULL,
lastName varchar (30) NOT NULL,
birthday date NOT NULL,
employeeType varchar (30) NOT NULL,
departmentName varchar (30) NOT NULL,
PRIMARY KEY (SSN)
);
INSERT INTO employees VALUES ('920-58-4918', 'Patricia', 'Johnson', '1961-4-5',
'hourlyEmployee', 'R&D');
In pratica nel file dovrai scrivere esattamente quello che scrivi da riga di comando.
Non sò se ho reso l'idea :D spero di si. se ti serve altro chiedi pure.
Non è quello ke intendevo io.
Io ho già il database creato con tutte le mie belle tabelle (ke al momento sono vuote).
X riempirle senza fare una ad una con il comando INSERT INTO volevo riempirle passando x riga di comando un file .txt, la mia domanda era: nel riempire il file txt devo tenere qualke formattazione particolare? Tipo spazi tra i dati da inserire, ecc...
Fabietto206
14-03-2009, 13:21
Io ho inserito de valori con questa formattazione e poi l'ho caricati con quel comando ovvero :
load data local infile 'NOME_FILE.txt' into table NOME_TAB fields terminated by ';' enclosed by '\'';
0;'skipper';
1;'grinder';
2;'tattico';
3;'timoniere';
4;'velista';
5;'armatore';
prova e se hai bisogno ancora fatti pure sentire....ciaoooo :D
Tu dici di scrivere tutto di seguito con i vari campi tra ' ' e separati dal ;? Ora provo...
PS: ho provato e mi dice ke non trova il file nn capisco il motivo!!!!
ho scritto così:
load data local infile 'C:\Documents and Settings\Fabietto\Desktop\Nuova cartella\medico.txt' into table medico;
Fabietto206
14-03-2009, 14:53
Un altra domanda: se ho 2 tabelle in cui in una ce un'attributo ke è chiave esterna nell'altra, i valori di quell'attibuto devono essere identici nell 2 tabelle giusto?
Ad esempio ho:
Dati (cf, nome, cognome) con cf chiave primaria
recapito (cf, indirizzo, città, tel) con cf chiave primaria e chiave esterna nella tabella dati.
Ecco i valori di cf nelle 2 tabelle devono essere gli stessi??
alucard82
14-03-2009, 15:32
Un altra domanda: se ho 2 tabelle in cui in una ce un'attributo ke è chiave esterna nell'altra, i valori di quell'attibuto devono essere identici nell 2 tabelle giusto?
Ad esempio ho:
Dati (cf, nome, cognome) con cf chiave primaria
recapito (cf, indirizzo, città, tel) con cf chiave primaria e chiave esterna nella tabella dati.
Ecco i valori di cf nelle 2 tabelle devono essere gli stessi??
vedo che di database ne capisci poco. Ti consiglio di leggere qualche guida.
Cmq nella tabella Recapito dovresti avere una chiave primaria e poi anche una colonna con la chiave esterna (FOREIGN KEY) al campo "cf" della tabella dati. quindi i valori di questa colonna devono essere corrispondenti alla tabella dati
es:
Dati
cf | nome | cognome
-----------------------------
01 | pippo | pippa
02 | pluto | pluta
Recapito
cf | fkcfdati | indirizzo | tel | ecc
--------------------------------------------
01 | 01 | via vla vla | 000 | ecc
02 | 02 | aspdoapd | 022 | ecc
03 | 01 | clalcalcla | 1212 | ecc
come vedil terzo campo punta sempre al primo cliente.
Cmq ti volevo dire che "logicamente" è inutile separare queste due tabelle perchè fai soltanto casino e non serve a nulla...a meno che tu non voglia associare più recapiti alla stessa persona. (spero sia un esempio)
Era meglio lasciare tutto insieme.
Ritornando al fatto del file, il mio era un esempio! basta che invece di scrivere create table ecc ecc, tu scriva soltanto:
INSERT into Dati (nome, cognome) VALUES ('pippo', 'pippa');
INSERT into Dati (nome, cognome) VALUES ('pluto', 'pluta');
tutte le volte che vuoi e poi basta che richiami come ti ho scritto sopra il caricamento del file.
IL FILE METTILO NELLA STESSA CARTELLA del file mysql.exe altrimenti ti potrebbe dare errori (come è successo)!
si io li separo cosi x convenzione ma puoi separarli come vuoi...cmq non ti trova il file perche essendoci uno spazio nel nome della cartella (nuova cartella ) quest'ultima va messa tra " " cosi:
"nuova cartella" oppure separi le 2 parole con un underscore _...e poi devi scriverlo con la sintassi che ti ho detto prima xk se no nn ti riconosce i ; e il \n.....cmq io nn userei un attributo sia come k primaria che come k esterna...cmq il valore della k esterna si deve essere uguale alla primaria corrispettiva...
Fabietto206
14-03-2009, 17:56
si io li separo cosi x convenzione ma puoi separarli come vuoi...cmq non ti trova il file perche essendoci uno spazio nel nome della cartella (nuova cartella ) quest'ultima va messa tra " " cosi:
"nuova cartella" oppure separi le 2 parole con un underscore _...e poi devi scriverlo con la sintassi che ti ho detto prima xk se no nn ti riconosce i ; e il \n.....cmq io nn userei un attributo sia come k primaria che come k esterna...cmq il valore della k esterna si deve essere uguale alla primaria corrispettiva...
Ho fatto quello ke mi hai detto te rinominado nuova_cartella e aggiungendo field..... e dopo aver premuto enter il cursore va a capo cn il simbolo '> e nn so ke fare....
Fabietto206
14-03-2009, 18:00
vedo che di database ne capisci poco. Ti consiglio di leggere qualche guida.
Cmq nella tabella Recapito dovresti avere una chiave primaria e poi anche una colonna con la chiave esterna (FOREIGN KEY) al campo "cf" della tabella dati. quindi i valori di questa colonna devono essere corrispondenti alla tabella dati
INSERT into Dati (nome, cognome) VALUES ('pippo', 'pippa');
INSERT into Dati (nome, cognome) VALUES ('pluto', 'pluta');
tutte le volte che vuoi e poi basta che richiami come ti ho scritto sopra il caricamento del file.
IL FILE METTILO NELLA STESSA CARTELLA del file mysql.exe altrimenti ti potrebbe dare errori (come è successo)!
Questo lo sapevo anke io, ma volevo caricare i dati da un file esterno senza star li tt le volte a scrivere insert into....values......
alucard82
15-03-2009, 12:11
Questo lo sapevo anke io, ma volevo caricare i dati da un file esterno senza star li tt le volte a scrivere insert into....values......
Proprio non lo capisci il fatto....eppure mi sembra di essere stato chiaro!
SCRIVI TUTTO NEL FILE (TUTTE LE INSERT O QUELLO CHE CAVOLO VUOI FARE)
ENTRI NEL MYSQL E FAI UNA DELLE DUE (IL TXT METTILO NELLA CARTELLA DOVE STA mysql.exe):
source nomefile
./nomefile
COSì TI CARICA TUTTO!!!!!!
dopo questa ci rinuncio
ah scusa ho sbagliato io l'ultima parte...è cosi la sintassi giusta....cmq se ti spunta il > vuol dire che si aspetta una parte del comando.....usa questa sintassi:
LOAD DATA LOCAL INFILE 'NOME_FILE.txt' INTO TABLE NOME_TAB FIELDS TERMINATED BY ';' ENCLOSED BY '\'';'\";
ti darà dei warnings e il > ma tu premi CTRL+C appena spunta il > e poi li inserisce cmq.....
ciao
Fabietto206
15-03-2009, 14:53
ah scusa ho sbagliato io l'ultima parte...è cosi la sintassi giusta....cmq se ti spunta il > vuol dire che si aspetta una parte del comando.....usa questa sintassi:
LOAD DATA LOCAL INFILE 'NOME_FILE.txt' INTO TABLE NOME_TAB FIELDS TERMINATED BY ';' ENCLOSED BY '\'';'\";
ti darà dei warnings e il > ma tu premi CTRL+C appena spunta il > e poi li inserisce cmq.....
ciao
Ho provato a fare cm dici e premendo CTRL+C mi kiude il prompt di mySQL.
Lo apro con la SELECT * FROM nome_tab vado a vedere se mi ha inserito i valori, ma niente, mi dice ke il campo è vuoto
strano...a me lo da perfettamente.....prova a vedere bene il percorso del file o a controllare l'ultima parte del comando.....al massimo è sbagliato lì qualcosa....
mi dispiace....ciao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.