改编自学校实验,涉及一些字符集相关的问题。

索引

  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

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

  1. Linux下通过txt文件导入数据到MySQL数据库

    1.修改配置文件 在 /etc/my.conf 中添加 local_infile=1 2.重启MySQL >service mysqld restart 3.登录数据库 登录时添加参数 --lo ...

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

    环境:ubuntu12.04   mysql(通过apt安装) (1)根据数据表中的属性列,对应在txt中构造记录(一行对应一条记录),不同属性之间通过tab键(以/root目录下构建的init.tx ...

  3. 记录一次从txt文件导入数据的python下的MySQL实现

    环境: python2.7 ComsenzXP自带MySQL 安装python-MySQL模块 数据格式:txt格式的账号信息. 数据一行一条数据. 难点:有的行只有账号,没有密码:有的为空行:有的行 ...

  4. 用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表

    用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表 下面的内容的实验环境我是在SQLSERVER2005上面做的 之前在园子里看到两篇文章<C# 读取纯真 ...

  5. 将TXT文件 导入 sqlserver数据库

    情景一:​ 数据库已存在旧表名 old_table,列名old_column_name. 将TXT文件导入数据库已存在旧表old_table中,导入过程中需注意 数据源中列名可全部不修改 或 全部修改 ...

  6. Selenium(九)测试用例数据分离与从文件导入数据

    一.测试用例数据与代码分离 1.从之前的脚本来看,我还是把数据写在了脚本中,这样脚本的通用性很差.全局的数据其实可以从数据库.文本文件.Excel中直接读取. 2.代码和用户数据分离: 3.数据设计- ...

  7. win10安装mysql过程&&链接过程&&备份和导入数据&&grant命令

    win10安装mysql过程&&链接过程&&备份和导入数据&&grant命令   一 .安装 一开始在mysql官网(https://www.mysql ...

  8. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

  9. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

随机推荐

  1. centos6.9环境下JDK安装

    1.准备jdk安装文件: 这里我使用的是 jdk-7u79-linux-x64.tar.gz 2.在 /usr/local 目录下创建 sotfware目录,并上传JDK文件: 解压文件并修改文件夹为 ...

  2. 存储opline的内存地址可以实时跟踪opcode的执行

    static intphp_handler(request_rec *r) { /* Initiliaze the context */ php_struct * volatile ctx; void ...

  3. poj1611 The suspects【并查集】

    严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not-Spreading-Y ...

  4. Oracle安装部署之dbca静默建库和删除库

    dbca查看帮助: [oracle@wen ~]$ dbca -help 1).运行静默建库语句 [oracle@wen ~]$ dbca -silent -cloneTemplate -gdbNam ...

  5. 使用Intel IPT技术保护您的帐号安全

    使用Intel IPT技术保护您的帐号安全

  6. android bluetooth

    Android bluetooth介绍(一):基本概念及硬件接口 BlueZ为调试和与蓝牙子系统通信提供很多设置命令行工具,包含下面这些: hciconfig hcitool hcidump sdpt ...

  7. Java8 Collectors.toMap的坑

    按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Collectors.toMap反其道而行之,它默认给抛异常,抛 ...

  8. 问题:bower git is not installed or not in the path

    用bower install jquery安装jquery,bower提示错误bower git is not installed or not in the path. 根据错误信息的知道出现错误两 ...

  9. javaScript错误(一)Cannot call method 'addEventListener' of null

    Cannot call method 'addEventListener' of null 原因很简单,JavaScript代码中要引用到DOM对象,但是这个DOM对象在JavaScript执行后才会 ...

  10. qt——QT中QWidget、QDialog及QMainWindow的区别

    QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...