MySQL (10): MySQL 構文の詳細

データの種類

3 つの主なタイプ: Text(文本)Number(数字)およびDate/Time(日期/时间)タイプ

テキストタイプ

データの種類 説明する
CHAR(サイズ) 固定長の文字列を保存します (文字、数字、特殊文字を含めることができます)。括弧内に文字列の長さを指定します。最大 255 文字。
VARCHAR(サイズ) 可変長文字列 (文字、数字、特殊文字を含めることができます) を保存します。文字列の最大長を括弧内に指定します。最大 255 文字。注: 値の長さが 255 を超える場合は、TEXT 型に変換されます。
小さなテキスト 最大 255 文字の文字列を格納します。
文章 最大長65,535文字の文字列を格納します。
BLOB BLOB (バイナリ ラージ オブジェクト) に使用されます。最大 65,535 バイトのデータを保存します。
メディアテキスト 最大長16,777,215文字の文字列を格納します。
ミディアムブロブ BLOB (バイナリ ラージ オブジェクト) に使用されます。最大 16,777,215 バイトのデータを保存します。
長文 最大長 4,294,967,295 文字の文字列を格納します。
ルングブロブ BLOB (バイナリ ラージ オブジェクト) に使用されます。最大 4,294,967,295 バイトのデータを保存します。
ENUM(x、y、zなど) 可能な値のリストを入力できます。ENUM リストには最大 65535 個の値をリストできます。挿入された値がリストに存在しない場合は、null 値が挿入されます。注: 値は入力した順に並べ替えられます。可能な値は次の形式で入力できます: ENUM('X','Y','Z')
セット ENUM と似ていますが、SET にはリスト項目を最大 64 個までしか含めることができず、SET には複数の選択を保存できる点が異なります。

数値型

注: これらの整数型には追加オプション UNSIGNED があります。一般に、整数は負または正の値になります。UNSIGNED 属性を追加すると、範囲は負の数値ではなく 0 から始まります。

データの種類 説明する
TINYINT(サイズ) -128 ~ 127 通常。0 ~ 255 符号なし*。括弧内に最大桁数を指定します。
SMALLINT(サイズ) -32768 ~ 32767 一般。0 ~ 65535 符号なし*。括弧内に最大桁数を指定します。
ミディアムミント(サイズ) -8388608 ~ 8388607 通常。0 ~ 16777215 符号なし*。括弧内に最大桁数を指定します。
INT(サイズ) -2147483648 ~ 2147483647 一般。0 ~ 4294967295 符号なし*。括弧内に最大桁数を指定します。
BIGINT(サイズ) -9223372036854775808 ~ 9223372036854775807 一般。0 ~ 18446744073709551615 署名なし*。括弧内に最大桁数を指定します。
FLOAT(サイズ,d) 浮動小数点を含む小さな数値。最大桁数は size パラメータで指定します。dパラメータの小数点以下の最大桁数を指定します。
DOUBLE(サイズ,d) 浮動小数点を含む大きな数値。最大桁数は size パラメータで指定します。dパラメータの小数点以下の最大桁数を指定します。
DECIMAL(サイズ,d) 文字列として保存される DOUBLE 型。固定小数点を使用できます。最大桁数は size パラメータで指定します。dパラメータの小数点以下の最大桁数を指定します。

日付型

注: DATETIME と TIMESTAMP は同じ形式を返しますが、動作は大きく異なります。INSERT または UPDATE クエリでは、TIMESTAMP は
自動的に現在の日付と時刻を設定します。TIMESTAMP は、YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD、YYMMDD などのさまざまな形式も受け入れます。

データの種類 説明する
日付() 日付。形式: YYYY-MM-DD 注: サポートされる範囲は「1000-01-01」から「9999-12-31」です。
日付時刻() ※日付と時刻の組み合わせ。形式: YYYY-MM-DD HH:MM:SS 注: サポートされる範囲は「1000-01-01 00:00:00」から「9999-12-31 23:59:59」です。
タイムスタンプ() *タイムスタンプ。TIMESTAMP 値は、Unix エポック ('1970-01-01 00:00:00' UTC) からの秒数として保存されます。形式: YYYY-MM-DD HH:MM:SS 注: サポートされる範囲は「1970-01-01 00:00:01」UTC から「2038-01-09 03:14:07」UTC です。
時間() 時間。形式: HH:MM:SS 注: サポートされている範囲は「-838:59:59」から「838:59:59」です。
年() 2 桁または 4 桁の形式での年。注: 4 ビット形式で使用できる値: 1901 ~ 2155。2 ビット形式で使用できる値: 70 ~ 69、つまり 1970 ~ 2069 です。

AS

エイリアス

例:

select emp_no, concat(emp.last_name, ' ', emp.first_name) as name
from employees as emp;
+---------+----------------+
| emp_no  | name           |
+---------+----------------+
|  10001  | Facello Georgi |
|  10002  | Simmel Bezalel |
......
|  499999 | Tsukuda Sachin  |
+---------+----------------+
300024 rows in set (0.25 sec)

例:

-- 查询管理者的姓名、所在部门
select a.emp_no, a.dept_no, c.dept_name, concat(b.last_name, ' ', b.first_name) as name
from dept_manager as a,
     employees as b,
     departments as c
where a.emp_no = b.emp_no
  and a.dept_no = c.dept_no
order by emp_no;
+--------+---------+------------+-----------------------+
| emp_no | dept_no | dept_name  | name                  |
+--------+---------+------------+-----------------------+
| 110022 | d001    | 销售        | Markovitch Margareta  |
| 110039 | d001    | 销售        | Minakawa Vishwani     |
| 110085 | d002    | 财务        | Alpin Ebru            |
| 110114 | d002    | 财务        | Legleitner Isamu      |
| 110183 | d003    | 开发        | Ossenbruggen Shirish  |
| 110228 | d003    | 开发        | Sigstam Karsten       |
| 110303 | d004    | 生产        | Wegerle Krassimir     |
| 110344 | d004    | 生产        | Cools Rosine          |
| 110386 | d004    | 生产        | Kieras Shem           |
| 110420 | d004    | 生产        | Ghazalie Oscar        |
| 110511 | d005    | 客户服务     | Hagimont DeForest     |
| 110567 | d005    | 客户服务     | DasSarma Leon         |
| 110725 | d006    | 调查        | Onuegbe Peternela     |
| 110765 | d006    | 调查        | Hofmeyr Rutger        |
| 110800 | d006    | 调查        | Quadeer Sanjoy        |
| 110854 | d006    | 调查        | Pesch Dung            |
| 111035 | d007    | 营销        | Kaelbling Przemyslawa |
| 111133 | d007    | 营销        | Zhang Hauke           |
| 111400 | d008    | 质量管理     | Staelin Arie          |
| 111534 | d008    | 质量管理     | Kambil Hilary         |
| 111692 | d009    | 人力资源     | Butterworth Tonny     |
| 111784 | d009    | 人力资源     | Giarratana Marjo      |
| 111877 | d009    | 人力资源     | Spinelli Xiaobin      |
| 111939 | d009    | 人力资源     | Weedman Yuchang       |
+--------+---------+------------+-----------------------+
24 rows in set (0.00 sec)

ALTER TABLE

既存のデータテーブルの列を追加、削除、または変更したり、既存のデータテーブルに制約を追加または削除したりするために使用されます。

例:

-- 添加列
alter table employees
    add name int;

-- 修改列并添加约束
alter table employees modify column name varchar (50) null;

-- 修改数据
update employees
set name = concat(last_name, ' ', first_name)
where name is null;

-- 删除列
alter table employees drop column name;

concatgroup_concat

concat 列スプライシング、group_concat 行スプライシング

例:

-- 列拼接,行拼接
select emp_no,
       group_concat(
               concat('(', from_date, '=', to_date, ' $', salary, ')') separator ';'
           ) as date_salary
from salaries
group by emp_no limit 3;
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp_no | date_salary                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|  10001 | (1986-06-26=1987-06-26 $60117);(1987-06-26=1988-06-25 $62102);(1988-06-25=1989-06-25 $66074);(1989-06-25=1990-06-25 $66596);(1990-06-25=1991-06-25 $66961);(1991-06-25=1992-06-24 $71046);(1992-06-24=1993-06-24 $74333);(1993-06-24=1994-06-24 $75286);(1994-06-24=1995-06-24 $75994);(1995-06-24=1996-06-23 $76884);(1996-06-23=1997-06-23 $80013);(1997-06-23=1998-06-23 $81025);(1998-06-23=1999-06-23 $81097);(1999-06-23=2000-06-22 $84917);(2000-06-22=2001-06-22 $85112);(2001-06-22=2002-06-22 $85097);(2002-06-22=9999-01-01 $88958) |
|  10002 | (1996-08-03=1997-08-03 $65828);(1997-08-03=1998-08-03 $65909);(1998-08-03=1999-08-03 $67534);(1999-08-03=2000-08-02 $69366);(2000-08-02=2001-08-02 $71963);(2001-08-02=9999-01-01 $72527)                                                                                                                                                                                                                                                                                                                                                      |
|  10003 | (1995-12-03=1996-12-02 $40006);(1996-12-02=1997-12-02 $43616);(1997-12-02=1998-12-02 $43466);(1998-12-02=1999-12-02 $43636);(1999-12-02=2000-12-01 $43478);(2000-12-01=2001-12-01 $43699);(2001-12-01=9999-01-01 $43311)                                                                                                                                                                                                                                                                                                                       |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

SQLインジェクション

サーバーコード

const http = require('http');
const mysql = require('mysql');

const config = {
    
    
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: '123456',
    database: 'employees',
};

const connection = mysql.createConnection(config);

connection.connect();

// 获取地址传参
function getUrlParam(url, paramname) {
    
    
    var reg = new RegExp("(^|&)" + paramname + "=([^&]*)(&|$)");
    var s = url.substr(2).match(reg);
    return s && unescape(s[2]);
}

http.createServer((req, res) => {
    
    

    const emp_no = getUrlParam(req.url, 'emp_no');

    const sql = `select * from employees where emp_no = ${
      
      emp_no}`;

    // select * from employees where emp_no = 10001 or emp_no=10002;
    console.log(sql); 

    connection.query(sql, function (error, results, fields) {
    
    
        if (error) throw error;
        res.end(JSON.stringify(results));
    });

}).listen(8080);

SQLインジェクション

ここに画像の説明を挿入します

SQLインジェクションを防ぐ

オプション 1

受信パラメータをエンコードする

// select * from employees where emp_no = '10001 or emp_no=10002;'
const sql = `select * from employees where emp_no = ${
      
      mysql.escape(emp_no)}`;
const sql = `select * from employees where emp_no = ${
      
      connection.escape(emp_no)}`;

オプション II

? をクエリパラメータのプレースホルダとして使用します

const sql = `select * from employees where emp_no = ?`;

// select * from employees where emp_no = ?
console.log(sql);

connection.query(sql, [emp_no], function (error, results, fields) {
    
    
    if (error) throw error;
    console.log(fields);
    res.end(JSON.stringify(results));
});

3番目の解決策

エスケープ書式設定関数

// select * from employees where emp_no = '10001 or emp_no=10002;'
const sql = mysql.format(`select * from employees where emp_no = ?`, [emp_no]);

HAVING 子句

フィルター基準を指定する

例:

-- 查询薪资总和大于等于2300000的员工编号,并列出薪资和薪资总和
select emp_no, group_concat(salary separator ';'), sum(salary)
from salaries
group by emp_no
having sum(salary) >= 2300000
order by emp_no;
+--------+-------------------------------------------------------------------------------------------------------------------------------+-------------+
| emp_no | group_concat(salary separator ';')                                                                                            | sum(salary) |
+--------+-------------------------------------------------------------------------------------------------------------------------------+-------------+
|  43624 | 116058;119115;123270;125780;125557;127816;132136;135281;138616;138597;141585;145711;149571;151115;153166;153458;157821;158220 |     2492873 |
|  47978 | 112551;114069;116122;117859;120009;124461;126018;126973;130037;131942;133699;137529;137928;141563;145940;149686;151929;155709 |     2374024 |
|  66793 | 108972;109838;114157;118579;120271;121549;125603;128468;132283;136755;140532;143454;143697;146281;147282;147702;148448;150052 |     2383923 |
|  68086 | 108929;112101;116446;119066;122737;124049;124900;125150;127769;127864;131848;135634;136750;137228;137918;137494;139708;139760 |     2305351 |
|  80823 | 108686;110351;114777;117238;121133;122001;123532;124276;128724;132964;136836;138548;142438;145077;146222;149140;151768;154459 |     2368170 |
| 109334 | 123668;126169;129434;132511;132196;134572;134624;138817;140625;143182;146531;149208;149675;151484;154885;155377;154888;155190 |     2553036 |
| 237542 | 108963;112701;115269;118341;120344;124625;127976;128919;133402;136116;137549;140469;140199;140097;144526;147942;150994;152687 |     2381119 |
+--------+-------------------------------------------------------------------------------------------------------------------------------+-------------+
7 rows in set (1.35 sec)

一時テーブル

一時テーブルには一時データが保存され、ターミナル セッションが終了すると削除されます。

例:

-- 创建临时表
CREATE
TEMPORARY TABLE SALESSUMMARY
(
    product_name     VARCHAR(50)    NOT NULL,
    total_sales      DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
    avg_unit_price   DECIMAL(7, 2)  NOT NULL DEFAULT 0.00,
    total_units_sold INT UNSIGNED   NOT NULL DEFAULT 0
);

-- 插入数据
INSERT INTO SALESSUMMARY
    (product_name, total_sales, avg_unit_price, total_units_sold)
VALUES ('cucumber', 100.25, 90, 2);

-- 查询数据
SELECT *
FROM SALESSUMMARY;

-- 删除临时表
DROP TABLE SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

正規表現

例:

select emp_no, concat(last_name, ' ', first_name) as name
from employees
where concat(last_name, ' ', first_name) regexp '^Awdeh Sh'
+--------+-----------------+
| emp_no | name            |
+--------+-----------------+
|  28835 | Awdeh Shrikanth |
|  28867 | Awdeh Shahar    |
|  43350 | Awdeh Sham      |
|  55280 | Awdeh Sham      |
|  94678 | Awdeh Shigeaki  |
| 108457 | Awdeh Shaowei   |
| 203619 | Awdeh Shaibal   |
| 209529 | Awdeh Shounak   |
| 224996 | Awdeh Shan      |
| 259389 | Awdeh Shigeaki  |
| 419508 | Awdeh Shuky     |
| 435166 | Awdeh Shahid    |
| 446799 | Awdeh Shigeu    |
+--------+-----------------+
13 rows in set (0.22 sec)

サーバーのメタデータを取得する

注文 説明する
バージョンを選択() サーバーのバージョン情報
データベースを選択() 現在のデータベース名 (または空を返す)
ユーザーを選択() 現在のユーザー名
ステータスを表示 サーバーのステータス
変数を表示 サーバー構成変数

例:

select VERSION(), DATABASE(), USER();
+-----------+------------+----------------+
| VERSION() | DATABASE() | USER()         |
+-----------+------------+----------------+
| 8.0.33    | employees  | root@localhost |
+-----------+------------+----------------+
1 row in set (0.00 sec)

例:

SHOW
STATUS;
show
VARIABLES;

事務

大規模な操作と複雑さの高いデータを処理するために使用されます。たとえば、人事管理システムでは、個人を削除するということは、その個人の基本情報を削除するだけでなく、メールボックスや記事など、その個人に関連する情報も削除することを意味します。したがって、これらのデータベース操作ステートメントはトランザクションを構成します。

  • 一般に、トランザクションは次の 4 つの条件 ( ACID) を満たす必要があります。
    • Atomicity(原子性或不可分割性)
      • 一連のトランザクションは成功するか取り消されます。つまり、トランザクションの実行中にエラーが発生した場合、トランザクションは開始前の状態にロールバックされます。
    • Consistency(一致性)
      • トランザクションの開始前でも後でも、データベースの整合性は損なわれません。したがって、書き込まれるデータは、事前に設定されたすべてのルール (データの精度、連結、および意図した作業を自動的に完了するためのその後のデータベース機能) に完全に準拠する必要があります。
    • Isolation(隔离性或独立性)
      • データベースでは、複数のトランザクションが同時にデータの読み取り、書き込み、変更を行うことができます。分離により、複数のトランザクションが同時に実行される場合のクロス実行によるデータの不整合を防ぐことができます。
      • トランザクションの分離は次のように分類できます。
        • Read uncommitted(读未提交)
        • Read committed(读提交)
        • Repeatable read(可重复读)
        • Serializable(串行化)
    • Durability(持久性)
      • トランザクション終了後にデータに加えられた変更は永続的であり、失われることはありません。

例 ( beginrollbackcommit):

set
autocommit = 0; -- 禁止自动提交

begin; -- 开始事务

insert into departments (dept_no, dept_name)
values ('d010', '部门10');
insert into departments (dept_no, dept_name)
values ('d011', '部门11');
insert into departments (dept_no, dept_name)
values ('d012', '部门12');
insert into departments (dept_no, dept_name)
values ('d013', '部门13');

commit; -- 提交事务(成功)

rollback; -- 回滚(失败)

set
autocommit = 1; -- 开启自动提交

データのエクスポート

データのエクスポート

エクスポート先のフォルダーを表示する

-- 查看可导出到的文件夹
show
variables where Variable_name like '%secure_file_priv%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.00 sec)

例 (データのエクスポート):

select *
from departments into outfile '/var/lib/mysql-files/departments.txt';
$ cat /var/lib/mysql-files/departments.txt
d009    Customer Service
d005    Development
d002    Finance
d003    Human Resources
d001    Marketing
d004    Production
d006    Quality Management
d008    Research
d007    Sales

例 (データのエクスポート):

select *
from departments into outfile '/var/lib/mysql-files/departments.csv'
    fields terminated by ','
    enclosed by '"'
    lines terminated by '\r\n';
$ cat /var/lib/mysql-files/departments.csv
"d009","Customer Service"
"d005","Development"
"d002","Finance"
"d003","Human Resources"
"d001","Marketing"
"d004","Production"
"d006","Quality Management"
"d008","Research"
"d007","Sales"

例 (データのエクスポート):

select dept_no, dept_name, concat(dept_no, ' ', dept_name)
into outfile '/var/lib/mysql-files/departments.csv'
    fields terminated by ','
    optionally enclosed by '"'
    lines terminated by '\n'
from departments;
$ cat /var/lib/mysql-files/departments.csv
"d009","Customer Service","d009 Customer Service"
"d005","Development","d005 Development"
"d002","Finance","d002 Finance"
"d003","Human Resources","d003 Human Resources"
"d001","Marketing","d001 Marketing"
"d004","Production","d004 Production"
"d006","Quality Management","d006 Quality Management"
"d008","Research","d008 Research"
"d007","Sales","d007 Sales"

テーブルを生の数値としてエクスポート

例:

$ mysqldump -u root -p --no-create-info --tab=/var/lib/mysql-files employees departments
Enter password: ******
$ cat /var/lib/mysql-files/departments.sql 

$ cat /var/lib/mysql-files/departments.txt 
d009    Customer Service
d005    Development
d002    Finance
d003    Human Resources
d001    Marketing
d004    Production
d006    Quality Management
d008    Research
d007    Sales

例:

$ mysqldump -u root -p --no-create-info --tab=/var/lib/mysql-files employees
Enter password: ******
$ cd /var/lib/mysql-files && ls
current_dept_emp.sql  departments.txt  dept_emp.txt              dept_manager.sql  employees.sql  salaries.sql  titles.sql
departments.sql       dept_emp.sql     dept_emp_latest_date.sql  dept_manager.txt  employees.txt  salaries.txt  titles.txt

SQL形式でデータをエクスポートする

例:

$ mysqldump -u root -p employees departments > /var/lib/mysql-files/departments.sql
Enter password: ******

$ cat /var/lib/mysql-files/departments.sql
-- MySQL dump 10.13  Distrib 8.0.33, for Linux (x86_64)
--
-- Host: localhost    Database: employees
-- ------------------------------------------------------
-- Server version       8.0.33

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `departments`
--

DROP TABLE IF EXISTS `departments`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `departments`
(
    `dept_no`   char(4)     NOT NULL,
    `dept_name` varchar(40) NOT NULL,
    PRIMARY KEY (`dept_no`),
    UNIQUE KEY `dept_name` (`dept_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `departments`
--

LOCK
TABLES `departments` WRITE;
/*!40000 ALTER TABLE `departments` DISABLE KEYS */;
INSERT INTO `departments`
VALUES ('d009', 'Customer Service'),
       ('d005', 'Development'),
       ('d002', 'Finance'),
       ('d003', 'Human Resources'),
       ('d001', 'Marketing'),
       ('d004', 'Production'),
       ('d006', 'Quality Management'),
       ('d008', 'Research'),
       ('d007', 'Sales');
/*!40000 ALTER TABLE `departments` ENABLE KEYS */;
UNLOCK
TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2023-07-17  8:40:55

データのインポート

インポートできない問題を解決する

show
variables where Variable_name like '%local_infile%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

設定ファイルを変更するxxx.cnf

[mysqld]
default-time_zone = '+8:00'
local_infile = 1

[mysql]
local_infile = 1

[client]
local_infile = 1

MySQL を再起動して表示します

show
variables where Variable_name like '%local_infile%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)

LOAD DATAを使用してデータをインポートする

例:

load
data local infile '/var/lib/mysql-files/departments.txt' into table departments;

select *
from departments;
+---------+--------------------+
| dept_no | dept_name          |
+---------+--------------------+
| d009    | Customer Service   |
| d005    | Development        |
| d002    | Finance            |
| d003    | Human Resources    |
| d001    | Marketing          |
| d004    | Production         |
| d006    | Quality Management |
| d008    | Research           |
| d007    | Sales              |
+---------+--------------------+
9 rows in set (0.00 sec)

例:

load
data local infile '/var/lib/mysql-files/departments.csv' into table departments
    fields terminated by ','
    enclosed by '"'
    lines terminated by '\r\n';

select *
from departments;
+---------+--------------------+
| dept_no | dept_name          |
+---------+--------------------+
| d009    | Customer Service   |
| d005    | Development        |
| d002    | Finance            |
| d003    | Human Resources    |
| d001    | Marketing          |
| d004    | Production         |
| d006    | Quality Management |
| d008    | Research           |
| d007    | Sales              |
+---------+--------------------+
9 rows in set (0.00 sec)

おすすめ

転載: blog.csdn.net/weixin_43526371/article/details/131770802