数据库中存在大量的重复内容,并且存在着外键关系
先删除外键的,以内容分组,查询条数大于一的,将该id在多对多的表中删除
delete from poem2cls where poem_id in(select id from (select id,count(*)as count from poem group by content having count>1)as a);
然后在删除拥有重复内容的表中的重复数据
delete from poem where id in(select id from (select id,count(*)as count from poem group by content having count>1)as a);
然后循环,直至没有重复内容
正则搜索
SELECT 字段 FROM 表 WHERE 字段 REGEXP 正则表达式;
字符串处理的函数
replace('你 好',' ','') // 替换 TRIM(LEADING ',' FROM ',,barxxx'); //删除指定首字符 如',‘ TRIM(BOTH ',' FROM ',,bar,,,'); //删除指定首尾字符 TRIM(TRAILING ',' FROM 'barxxyz,,'); //删除指定尾字符 如',‘
导入导出数据库
导出
mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 0:(备份数据库即导出所有表以及数据 不加-d) mysqldump -h localhost -u root -p test > G:arcgisworkspacezypdoc est.sql 1:(备份数据库即导出所有表结构) mysqldump -h localhost -u root -p -d test > G:arcgisworkspacezypdoc est.sql ENTER PASSWORD:****** 2 :(导出某张表的表结构不含数据) mysqldump -h localhost -u root -p -d test pollution > G:arcgisworkspacezypdoc est.sql 3:(导出某张表的表结构和数据,不加-d) mysqldump -h 127.0.0.1 -u root -p test pollution > G:arcgisworkspacezypdoc est.sql
这里补两个挺重要的参数吧
-t 默认情况下, 导出的sql语句中会删除表和新建表, 但是有时候两个表的字段稍有不同, 所以新建表的操作就没有必要了. 这时候可以使用-t只导出插入语句 -c 导出全部字段时, insert带字段名, 默认情况下全倒出来的时候是不带字段名的, 如果两个表的字段顺序不一样,插入时候会出错, 这时可以使用-c
报了个错
很多人都可能碰到过这样的问题:在我们用DOS命令行备份、导出MySQL数据库的时候输入mysqldump语句 mysqldump -h localhost -u root -p shopdb >d:eifenshopdbbak.sql回车时命令行窗口会提示如下错 误: mysqldump: unknown option '--no-beep' 以致数据库备份无法完成。这是什么原因呢? 经过反复查找问题终于找到了出错的原因:原来是 mysqldump读取mysql安装文件my.cnf里的内容的默认设置,导致命令行无法正常运行,知道了这个原因那解 决方法也就有了,禁用默认设置!在执行mysqldump的时候加入选项--no-defaults (官方文档解释是Do not read default options from any options file),所以最后的备份语句改成如下: mysqldump --no-defaults -h localhost -u root -p shopdb >d:eifenshopdbbak.sql
导入
0:导入数据库(首先得创建数据,再导入) mysql -h localhost -u root -p(进入mysql下面) create database abc;(创建数据库) show databases;(就可看到所有已经存在的数据库,以及刚刚创建的数据库abc) use abc;(进入abc数据库下面) show tables;(产看abc数据库下面的所有表,空的) source G:arcgisworkspacezypdoc est.sql(导入数据库表) show tables;(查看abc数据库下面的所有表,就可以看到表了) desc pollution;(查看表结构设计) select * from pollution; exit(或者ctrl + c)退出mysql
将一张表导出到文本文件
use dbname //进入数据库 Database Changed select * from 表 into outfile 'G:\arcgisworkspace\zypdoc\text.txt'; (指导出数据的,注意转义字符哦) // 一般形式 select [列名称] from tablename [where] into outfile '目标文件路径' [option] 其中option参数常用的5个选项 FIELDS TERMINATED BY ‘字符串’:设置字符串为字段的分割符,默认值为 ; FIELDS ENCLOSED BY ‘字符’:设置字符串括上char varchar text等字符型字段,默认值为 无任何符号; FIELDS OPTIONALLY ENCLOSED BY ‘字符’:设置字符串括上字段的值,默认值为 无任何符号; LINES STARTING BY ‘字符串’:设置每一行开头的字符,默认值为 无任何字符; FIELDS ESCAPED BY ‘字符’:设置转义字符,默认值为 ; LINES TERMINATED BY ‘字符串’:设置每行结束符,默认值为 ; // mysqldump导出 mysqldump -u root -p -T G:arcgisworkspacezypdoc abc pollution "--fields-terminated-by=," (记住不要任何多余的空格,也不用转移字符;-p后面也不用写password;注意目标目录是文件夹,文件名是表名,后缀是txt文件) 知识补充: mysqldump -u root -p -T 目标目录 dbname tablename [option] option 和 上面的mysql的一样,只是更改为 "--fields-terminated-by=字符"(不要任何多余的空格,就是指fields-terminated-by紧密相连的)
导入一张表
首先要有一张表,并且类型对应 LOAD DATA INFILE 文件名 INTO TABLE 表名 FIELDS TERMINATED BY '\,' // 上面的option OPTIONALLY ENCLOSED BY '"' LINES TERMINATED by' ' 没有可以不写 ignore 1 lines // ignore 1 lines是 忽略第一行的标题行。mei (id,name,value); //字段