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

原文地址:https://www.cnblogs.com/xkxf/p/8746962.html

时间: 2024-08-29 13:53:09

MySQL 笔记(三)由 txt 文件导入数据的相关文章

ubuntu下面mysql,通过载入txt文件初始化数据表

环境:ubuntu12.04   mysql(通过apt安装) (1)根据数据表中的属性列,对应在txt中构造记录(一行对应一条记录),不同属性之间通过tab键(以/root目录下构建的init.txt为例): (2)构建好txt文件后,直接载入会出现错误 原因之一:local是针对客户端而言,缺省local只能载入服务器上的txt文件:本来是直接在服务器上测试的,所以去掉local,再次运行指令 出现error 13:查阅网上资料,是root权限不够,为了免去一些麻烦,直接通过chmod 77

txt文件导入mysql

http://blog.csdn.net/piaolankeke/article/details/6272214 MySQL写入数据通常用insert语句,如 [c-sharp] view plaincopy insert into person values(张三,20),(李四,21),(王五,70)…; 但有时为了更快速地插入大批量数据或交换数据,需要从文本中导入数据或导出数据到文本. 一. 建立测试表,准备数据 首先建立一个用于测试的表示学生信息的表,字段有id.姓名.年龄.城市.薪水.

如何使用navicat for mysql连接本地数据库,并且导入数据文件

如何使用navicat for mysql连接本地数据库,并且导入数据文件 1. 简介 navicat for mysql是一种数据库管理工具, 专门用于简化, 开发和管理MySQL.我们可以使用navicat for mysql来连接远程数据库,也可以连接本地数据库.使用这个工具,查看表的数据非常方便,也可以输入SQL命令来实现查询.但是输入创建表等命令就不是很方便了.好了,我们一起来看看怎么使用navicat for mysql 创建并查询数据库中的数据. 2. 连接数据库 首先,你得确认你

.NET从EXCEL文件导入数据

.NET com组件 这种方法在计算机没有安装office套件时,也是能够使用的.所以不依赖于软件, 但是还是需要xcel.exe编译后的dll文件打包到相应的程序中来引用.这样将dll文件" 随身携带",就可以了.还是挺不错的! 1.注册Microsoft.Office.Interop.Excel.dll 在office安装文件夹下找到excel.exe,路径D:\Program Files(x86)\Microsoft Office\Office15.将excel.exe文件复制到

python操作txt文件中数据教程[1]-使用python读写txt文件

python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = './test/test.txt' contents = [] DNA_sequence = [] # 打开文本并将所有内容存入contents中 with open(filename, 'r') as f: for line in f.readlines(): contents.append(line

SQL LOADER 的用法 TXT文件导入非常之快

前提,需要本地安装ORACLE 客户端 控制文件 cms.ctl load dataCHARACTERSET UTF8infile 'oracle.txt'APPEND INTO TABLE JR fields terminated by '|'(BUKRS,LONNO,WAERS,BLDAT,BUDAT,SHKZG,DLCOD,HKONT,FPGRP,FPNAM,LONPR,WRBTR,ECNMA,DLNAM,EVTCD,SEVTC,SEVTD,CITYC,CITY,LONTP,PAYER,R

txt文件导入mysql--转

MySQL写入数据通常用insert语句,如 insert into person values(张三,20),(李四,21),(王五,70)…; 但有时为了更快速地插入大批量数据或交换数据,需要从文本中导入数据或导出数据到文本. 一. 建立测试表,准备数据 首先建立一个用于测试的表示学生信息的表,字段有id.姓名.年龄.城市.薪水.Id和姓名不 能为空. create table person( id int not null auto_increment, name varchar(40) 

从MySQL向Greenplum集群中导入数据

我们要从MySQL当中导出数据到Greenplum当中,按照以下步骤就可以 1:将MySQL当中的表导出外部文件 以schema_name.table_name为例 select product_id, number, name, english_name, purchase_name, system_name, bar_code, category_one, category_two, category_three, parent_id, parent_number, brand_id, su

国产达梦数据库-通过Excel文件导入数据

考虑到完整性,我这里就啰嗦一点,从新建达梦数据库的数据库,再新建表.表结构开始. 一.新建数据库:模式 --> 右键 --> 新建模式:这里的新建模式就是MySQL中的新建库 二.弹出如下新建模式对话框: 三.输入模式名,并选择模式拥有者,操作如下: 四.再点两次确定按钮,即可完成新建模式,完成后,列表会显示刚新建的模式OASYS,如下图: 五.既然现在有了模式(数据库),就可以新建具体要使用的表了,操作如下: 六.打开新建表对话框,填写输入具体表信息.字段信息,如下图: 七.点击确定以后,结