数据操作语言(DML)是对表中记录进行添加、更新、删除等操作的语言。
一、添加数据
在数据表中填充数据有两种方法,第一种方法是使用insert into语句向数据表中直接录入每行数据信息,但并不常用,因为分析使用的数据很少需要我们逐行手动录入;第二种方法是向数据表中导入外部数据文件中的数据信息。
1、手动添加数据
--手动添加数据 insert into <表名> [<字段1>[,<字段2>,……<字段n>]] values(<值1>[,<值2>,……<值n>]);
对于批量添加多个值的情况,每行数据需要用括号包围起来,并用逗号分开。
2、批量导入数据
通常我们会使用外部数据文件的数据信息,向提前建立好的表格进行批量的数据导入。
在MySQL数据库中,出于安全考虑默认不允许从MySQL workbench客户端载入本地文件的数据,需要先把数据文件放在安全路径下,再在MySQL workbench客户端中执行数据文件导入语句。
--查看默认安全路径 show variables like '%secure%' --接下来执行数据文件导入命令 load data infile '文件路径' into table <表名> [fields terminated by '分隔符' ignore x lines];
--例如:为Monthly_Indicator表导入外部txt文件 load data infile 'c:/ProgramData/MySQL/MySQL Server 8.0/Uploads/xx.txt' into table Monthly_Indicator fields terminated by '\t' [ignore 1 lines];
注:文件路径中不能出现中文,且路径分隔符不能为"\",会与制表符"\t"等信息内容发生冲突,需要将其改为"\\"或"/"
fields terminated by '\t'是要导入的文本文件用的分隔符,不同的文本文件有不同的分隔符;如果不指定哪种分隔符,那么在导入数据时就无法对数据进行正确区分。如果导入的是txt文件,它默认的分隔符是Tab键,在MySQL中用"\t"代替。也需要用文本型数据。
ignore 1 lines表示忽略数据文件中的第一行,从第二行导入数据。ignore x lines中的x写数字几就是忽略前几行。而在这里忽略第一行是因为通常来讲,文本文件数据中的第一行是字段名信息,而我们在创建表时已经指定了表名和表中每个字段的字段名,所以只需要导入从第二行开始的数据信息。如果导入的文件中没有字段名,第一行就是数据信息,那么该语句可忽略。
MySQL除可以导入数据源文件中的数据外,还可以和企业数据库进行连接,直接调用企业数据库中的数据,只需要企业数据库管理员设置好权限之后就可以调用;导入数据后,还需要对数据进行复核和检查(对导入表中的数据一般从导入内容,导入数据总行数及表结构三方面进行检查。语法如下
--检查导入内容Monthly_Indicator select * from Monthly_Indicator; --检查导入数据总行数 select count(*) from Monthly_Indicator; --检查表结构 desc Monthly_Indicator;
3、将查询结果添加到表中
--将查询结果添加到已存在的表中(该方法与手动将数据插入表中一样,需要事先创建表结构,且与select子句的字段类型一一对应) insert into <新表名> [<字段1>[,<字段2>,……,<字段n>]] select <字段1>[,<字段2>,……,<字段n>] from <原表名> [where <查询条件>]; --将查询结果添加到新表中(该方法的本质是在添加数据的同时创建新表) create table <新表名> as select <字段名>[,<字段名2>,……,<字段名n>] from <原表名> [where <查询条件>];
4、更新数据
在数据库中,可以使用update语句来修改、更新表中的数据,分析人员经常在数据清洗环节使用该功能,如缺失值处理。在update语句中可以使用set子句指定表中要修改的字段。set子句还可以指定where子句来限定表中要修改的行。若不指定,则修改表中的所有行。set子句也支持修改多个字段,在该情况下,set子句后的每个字段用逗号分隔即可。
update <表名> set <字段1>=<值1> [,<字段2>=<值2>,……,<字段n>=<值n>] [where <更新条件>];
5、删除数据
实际业务中出现极端值、离散值、错误值等情况需要删除数据。
使用delete语句来删除表中记录,使用where子句为删除操作限定删除条件。如果我们在希望保留表结构的情况下直接删除表中所有的数据,可以使用省略where的情况或者直接使用truncate命令。(delete可以对满足条件的记录进行删除,truncate只能删除表中全部数据;delete在删除表中数据的同时保留表结构,truncate直接先把表删除[drop],然后创建[create]一个新表,执行速度币delete快)
delete from <表名> [where 删除条件]; --truncate truncate 表名;