Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đang cố gắng TẢI THÔNG TIN DỮ LIỆU bằng REPLACE và AUTO_INCREMENT

QUAN SÁT # 1

Bạn không nên làm REPLACE bởi vì nó là một DELETE cơ học và INSERT .

Tài liệu MySQL nói về REPLACE

Đoạn 2

Đoạn 5

Việc sử dụng REPLACE sẽ loại bỏ các giá trị đã thiết lập cho TEST_ID không thể tự động được sử dụng lại.

QUAN SÁT # 2

Bố cục bảng sẽ không hỗ trợ bẫy các khóa trùng lặp

Nếu tên là duy nhất, bảng phải được sắp xếp như thế này

BỐ TRÍ # 1

CREATE TABLE  `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`),
KEY (`NAME`)
) 

Nếu một tên cho phép nhiều giá trị, bảng phải được sắp xếp như thế này

BỐ TRÍ # 2

CREATE TABLE  `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`),
KEY (`NAME`,`VALUE`)
) 

GIẢI PHÁP ĐƯỢC ĐỀ XUẤT

Sử dụng bảng tạm thời để nắm bắt mọi thứ. Sau đó, thực hiện một INSERT lớn từ bảng tạm thời dựa trên bố cục

BỐ TRÍ # 1

Thay thế VALUE cho một NAME trùng lặp

USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;

CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;

LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);

INSERT INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`
ON DUPLICATE KEY UPDATE VALUE = VALUES(VALUE);

DROP TABLE `TESTLOAD`;

BỐ TRÍ # 2

Bỏ qua (NAME,VALUE) hàng

USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;

CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;

LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);

INSERT IGNORE INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`;

DROP TABLE `TESTLOAD`;

Cập nhật

nếu chúng ta cần tránh việc tạo và thả bảng mỗi lần. chúng tôi có thể TRUNCATE TRUNCATE bảng trước hoặc sau khi sử dụng câu lệnh INSERT ... INTO. Do đó, chúng ta không phải tạo bảng vào lần sau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ánh xạ Doctrine 2 tham chiếu đến khóa duy nhất

  2. Làm thế nào để cấp quyền truy cập từ xa vào máy chủ mysql cho người dùng?

  3. Mô hình danh sách liền kề so với Mô hình tập hợp lồng nhau cho dữ liệu phân cấp MySQL?

  4. Cảnh báo:mysql_connect ():Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ)

  5. Tách một chuỗi và lặp qua các giá trị trong Thủ tục MySql