Antes de olhar as soluções, faça o que foi pedido no exercício, a saber:
mysql> create database CidadeEstado;
Query OK, 1 row affected (0.16 sec)
mysql> use CidadeEstado
Database changed
mysql> create table Cidades( C_id int AUTO_INCREMENT,E_id int,Cidade varchar(40) );
ERROR 1075 (42000): Incorrect table definition;
there can be only one auto column and it must be defined as a key
# ---------------------------------------------------------------------------
# veja aqui que precisamos definir o campo auto-increment como chave primária.
# ---------------------------------------------------------------------------
mysql> create table Cidades( C_id int AUTO_INCREMENT,UF char(2),Cidade varchar(40),PRIMARY KEY(C_id) );
Query OK, 0 rows affected (0.39 sec)
mysql> create table Estados(id int AUTO_INCREMENT,sigla char(2),Estado varchar(20),PRIMARY KEY(id) );
Query OK, 0 rows affected (0.44 sec)
mysql> show tables;
+------------------------+
| Tables_in_CidadeEstado |
+------------------------+
| Cidades |
| Estados |
+------------------------+
2 rows in set (0.01 sec)
# ---------------------------------------------------------------------------
# veja aqui que podemos inserir os valores da sigla e o do estado apenas, pois o campo id é "auto-increment"
# ---------------------------------------------------------------------------
mysql> insert into Estados(sigla,Estado)
-> values('AC','ACRE'),
-> ('AL','ALAGOAS'),
-> ('AP','AMAPÁ'),
-> ('AM','AMAZONAS'),
-> ('BA','BAHIA'),
-> ('CE','CEARÁ'),
-> ('DF','DISTRITO FEDERAL'),
-> ('ES','ESPÍRITO SANTO'),
-> ('GO','GOIÁS'),
-> ('MA','MARANHÃO'),
-> ('MT','MATO GROSSO'),
-> ('MS','MATO GROSSO DO SUL'),
-> ('MG','MINAS GERAIS'),
-> ('PA','PARÁ'),
-> ('PB','PARAÍBA'),
-> ('PR','PARANÁ'),
-> ('PE','PERNAMBUCO'),
-> ('PI','PIAUÍ'),
-> ('RJ','RIO DE JANEIRO'),
-> ('RN','RIO GRANDE DO NORTE'),
-> ('RS','RIO GRANDE DO SUL'),
-> ('RO','RONDONIA'),
-> ('RR','RORAIMA'),
-> ('SC','SANTA CATARINA'),
-> ('SP','SÃO PAULO'),
-> ('SE','SERGIPE'),
-> ('TO','TOCANTINS');
Query OK, 27 rows affected (0.05 sec)
Records: 27 Duplicates: 0 Warnings: 0
Podemos criar a tabela Estados como apresentado e depois inserir os dados via terminal, digitando (ou copiando e colando) os dados.
Uma outra opção é fazer a inserção (e também a criação da tabela) via um arquivo SQL.
Um arquivo que contenha somente instruções válidas do mysql pode ser carregado para que as instruções sejam executadas (na ordem em que aparecem no arquivo).
Para carregarmos o arquivo (geralmente colocamos a extensão .sql, mas não é obrigatório). Por exemplo, podemos ter o arquivo texto (.sql, por opção) com o conteúdo mostrado na figura
Tendo o arquivo sql com as instruções que deseja executar, basta carregá-lo com o comando source. Veja:
mysql> source BancoDados_CidadeEstado_cria_tabela_Estados.sql
Query OK, 0 rows affected (0.23 sec)
Query OK, 0 rows affected (0.21 sec)
Query OK, 27 rows affected (0.07 sec)
Records: 27 Duplicates: 0 Warnings: 0
No botão abaixo ("Veja Tabela") apresento uma tabela com dois municípios por estado.
Você pode inserir dados na tabela Cidades usando os procedimentos mostrados acima (Inserindo na linha de comando ou inserindo via arquivo .sql) ou carregando os dados via um arquivo CSV.
CSV é um arquivo texto em que dados são separados por vírgulas. CSV vem do termo comma-separated values, ou "valores separados por vírgula"
Quando temos muitos dados ou quando nos passam os dados em uma planilha, podemos usar um arquivo texto no formato CSV e carregá-lo no mysql.Podemos criar um arquivo CSV a partir de uma planilha, gerá-lo a partir de programas (um executável que exporte arquivo texto, por exemplo) ou criá-lo manualmente.
O arquivo CSV da tabela dada acima pode ser encontrado aqui.
Tendo o arquivo CSV para ser salvo, podemos carregá-lo no mysql usando o comando load, como mostrado a seguir.
Defina o banco de dados.
Crie a tabela com os mesmos campos do seu arquivo CSV.
Carregue o arquivo CSV usando o comando LOAD DATA INFILE
Importante: você precisa de ter permissão de escrita.
A seguir são mostrados os passos para carregarmos o arquivo CSV dado acima, em um banco que acabamos de criar.
#1) certificar que o arquivo CSV está no diretório correto
mf@mf-dell:~$ cd /mysqlfiles/
mf@mf-dell:/mysqlfiles$ cp ~/Lista_dois_municipios_por_estado.csv .
#2) criamos o banco de dados
mysql> create database teste8;
Query OK, 1 row affected (0.08 sec)
#3) definimos o banco como banco corrente
mysql> use teste8
Database changed
#4a) criamos a tabela
mysql> create table Cidades
-> (
-> id int auto_increment,
-> UF char(2),
-> Cidade varchar(30),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.32 sec)
#4b)Verificamos a tabela criada
mysql> show tables;
+------------------+
| Tables_in_teste8 |
+------------------+
| Cidades |
+------------------+
1 row in set (0.00 sec)
#4c) Verificamos a estrutura da tabela
mysql> describe Cidades;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| UF | char(2) | YES | | NULL | |
| Cidade | varchar(30) | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
#5) Verificamos qual a pasta temos permissão de ler o arquivo
mysql> show variables like 'secure_file%';
+------------------+--------------+
| Variable_name | Value |
+------------------+--------------+
| secure_file_priv | /mysqlfiles/ |
+------------------+--------------+
1 row in set (0.01 sec)
#6) Usamos o LOAD
# repare a estrutura do comando LOAD
mysql> load data infile
-> '/mysqlfiles/Lista_dois_municipios_por_estado.csv'
-> into table Cidades
-> fields terminated by ','
-> enclosed by '"'
-> lines terminated by '\n';
Query OK, 53 rows affected (0.12 sec)
Records: 53 Deleted: 0 Skipped: 0 Warnings: 0
# ATENÇÃO: caso o arquivo CSV tenha na sua primeira linha
# os nomes dos campos, nós devemos acrescentar no comando acima
# a opção "IGNORE 1 ROWS".
#7) Visualizamos algus dados da tabela
mysql> select * from Cidades limit 5;
+----+------+------------------------+
| id | UF | Cidade |
+----+------+------------------------+
| 1 | AC | Acrelândia |
| 2 | AC | Assis Brasil |
| 3 | AL | Água Branca |
| 4 | AL | Anadia |
| 5 | AM | Alvarães |
+----+------+------------------------+
5 rows in set (0.00 sec)
#8) Uma forma de saber quantas linhas a tabela possui.
mysql> select count(*) as 'Número de Cidades' from Cidades;
+--------------------+
| Número de Cidades |
+--------------------+
| 53 |
+--------------------+
1 row in set (0.01 sec)
#9) Outra forma de saber quantas linhas a tabela possui.
mysql> select max(id) as 'Número de Cidades' from Cidades;
+--------------------+
| Número de Cidades |
+--------------------+
| 53 |
+--------------------+
1 row in set (0.01 sec)
Nesse link temos um tutorial sobre o uso de arquivos CSV no mysql.