我有名称数据的文件,其中包含我的 linux 机器中的信息
2 Mar 1 1234 141.98.80.59
1 Mar 1 1234 171.239.249.233
5 Mar 1 admin 116.110.119.156
4 Mar 1 admin1 177.154.8.15
2 Mar 1 admin 141.98.80.63
我在 Mysql 中创建了一个名为“invaliduser”的数据库,在里面我创建了表“invalidlog”,我创建了一个这样的模式CREATE TABLE invalidlog(
Count INT,
Month CHAR(10),
Date INT(10),
User VARCHAR(50),
IP_ADD INT UNSIGNED
);
当我尝试使用以下命令在 mysql 中导入数据文件时mysql -u root -p invaliduser < data
它向我显示错误:ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 Mar 1 1234 141.98.80.59 1 Mar 1 1234 171.239.249.233 5 Mar 1 admin' at line 1
这是创建模式的正确方法吗?
最佳答案
您不能简单地将数据导入表中,您需要从文件中生成有效的 SQL 语法。这可以用 awk 完成:
awk -v sinq="'" '{ print "INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ("sinq$1sinq","sinq$2sinq","sinq$3sinq","sinq$4sinq","sinq$5sinq");"}' file
将变量 sinq 设置为单引号,然后将其与空格分隔的字段一起使用以生成所需的 sql。输出:
INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ('2','Mar','1','1234','141.98.80.59');
INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ('1','Mar','1','1234','171.239.249.233');
INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ('5','Mar','1','admin','116.110.119.156');
INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ('4','Mar','1','admin1','177.154.8.15');
INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ('2','Mar','1','admin','141.98.80.6');
然后可以将 awk 命令与 mysql 集成:mysql -u root -p pass invaliduser <<< "$(awk -v sinq="'" '{ print "INSERT INTO invalidlog (Count,Month,Date,User,IPADD) VALUES ("sinq$1sinq","sinq$2sinq","sinq$3sinq","sinq$4sinq","sinq$5sinq");"}' file)"
关于mysql - 如何在 mysql 中创建模式以及如何将现有记录导入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66441998/