MySQL筆記(三)由txt文件導入數據


改編自學校實驗,涉及一些字符集相關的問題。

索引

  1. 建庫
  2. 導入數據
  3. 最終腳本

 

下載數據 點擊這里

建庫

create.sql

DROP DATABASE IF EXISTS orderdb;
CREATE DATABASE orderdb;
USE orderdb;

CREATE TABLE employee (
        employee_no VARCHAR(8),
        employee_name VARCHAR(10),
        sex CHAR(1),
        birthday DATE,
        address VARCHAR(50),
        telephone VARCHAR(20),
        hiredate DATE COMMENT '聘用日期',
        department VARCHAR(30),
        headship VARCHAR(10) COMMENT '職務',
        salary DECIMAL(8,2),

        PRIMARY KEY(employee_no)

)       ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE customer (
        customer_no VARCHAR(9),
        customer_name VARCHAR(40),
        telephone VARCHAR(20),
        address VARCHAR(40),
        zip VARCHAR(6),

        PRIMARY KEY(customer_no)

)       ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE product (
        product_no VARCHAR(9),
        product_name VARCHAR(40),
        product_class VARCHAR(20),
        product_price DECIMAL(7,2),

)       ENGINE=INNODB DEFAULT CHARSET=utf8;

        order_no VARCHAR(12),
        customer_no VARCHAR(9),
        saler_no VARCHAR(8),
        order_date DATE,
        order_sum DECIMAL(9,2),
        invoiceno CHAR(10) COMMENT '發票號碼',

        PRIMARY KEY (order_no),

        FOREIGN KEY (customer_no)
                REFERENCES customer(customer_no)

)       ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE order_detail (
        order_no VARCHAR(12),
        product_no VARCHAR(9),
        quantity INT,
        price DECIMAL(7,2),

        PRIMARY KEY (order_no, product_no),

        FOREIGN KEY (order_no)
                REFERENCES order_master(order_no),
        FOREIGN KEY (product_no)
                REFERENCES product(product_no)

)       ENGINE=INNODB DEFAULT CHARSET=utf8;

Linux 環境下運行腳本:

root@xkfx:~/sql-exercise# readlink -f create.sql 
/root/sql-exercise/create.sql # 復制這個路徑
root@xkfx:~/sql-exercise# mysql -uroot -p
mysql > SOURCE /root/sql-exercise/create.sql # 運行腳本

 

導入數據

在 Linux 環境下或許需要修改 txt 的編碼格式:

root@xkfx:~/sql-exercise# iconv -f gb18030  -t utf8 customer.txt -o customer.txt

並且待導入的 txt 文件必須放在特定目錄下,查看特定目錄:

mysql> show variables like '%secure%'; +------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_auth      | OFF                   |
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

如上所示 /var/lib/mysql-files/ 就是特定的目錄。導入數據:

LOAD DATA INFILE 'file_path' INTO TABLE table_name
FIELDS TERMINATED BY 'xxx'
LINES TERMINATED BY 'xxxx'

示范如下:

mysql> USE orderdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> LOAD DATA INFILE '/var/lib/mysql-files/customer.txt' INTO TABLE customer
    -> FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY '\n';
Query OK, 10 rows affected, 10 warnings (0.00 sec)
Records: 10  Deleted: 0  Skipped: 0  Warnings: 10

 這個時候試着 SELECT 一下 customer 中的數據,有很大概率是亂碼的,這個時候不要着急,你需要重新設定字符集再來一遍:

SHOW VARIABLES LIKE "%char%"; # 顯示字符集的設定情況
SET character_set_database=utf8; # 像這樣,把不是 utf8 的設定為 utf8
SET NAMES 'utf8';

SOURCE /root/sql-exercise/create.sql

LOAD DATA INFILE '/var/lib/mysql-files/customer.txt' INTO TABLE customer
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

補充:平時創建表的時候要保證 ↓

以及:

CREATE TABLE xxxxx (
  
)    ENGINE=INNODB DEFAULT CHARSET=utf8;

才不容易出現亂碼。

 

最終腳本

為了方便起見,只需要把相應文件放在 特定位置,修改一下腳本中的路徑,最后運行最終腳本就可以了:

 populate.sql 

LOAD DATA INFILE '/var/lib/mysql-files/customer.txt' INTO TABLE customer
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

LOAD DATA INFILE '/var/lib/mysql-files/employee.txt' INTO TABLE employee
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

LOAD DATA INFILE '/var/lib/mysql-files/ordermaster.txt' INTO TABLE order_master
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

LOAD DATA INFILE '/var/lib/mysql-files/product.txt' INTO TABLE product
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

LOAD DATA INFILE '/var/lib/mysql-files/orderdetail.txt' INTO TABLE order_detail
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

最終腳本.sql

SET character_set_database = utf8; 
SET character_set_server = utf8;
SET NAMES 'utf8';
SHOW VARIABLES LIKE "%char%"; 
SOURCE /root/sql-exercise/create.sql
SOURCE /root/sql-exercise/populate.sql
mysql> SOURCE /root/sql-exercise/orderdb.sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM