欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql中清空数据库数据保留表结构

程序员文章站 2022-03-15 15:02:26
...

– mysql导出视图以及表结构

#mysqldump -uuser -ppassword --d database_name> database_name_date.sql

– 只导出数据不导出表结构

#mysqldump -t csf_home -uroot -p123456 > data.sql
#mysqldump -uuser -ppassword --t database_name> database_name_data.sql

这里简单说下我们公司信息化平台在云上部署上线的情景,mysql数据库被分在了测试机和正式机,测试机是开发人员对数据库进行表结构修改例如字段信息的场景,而正式机是对外部的业务,因此正式机的数据是最终使用的,但是遇到了一个困难,由于我的权限控制,开发人员没办法去把测试机的表结构对应的和正式机的表结构去同步,而造成现在我想把数据库导入到云上的正式数据库服务器时不知道怎么导入数据库,这就让我想到了一个办法,能不能先导入测试机的数据库以及表结构,然后清空测试数据,保留表结构,然后再导出正式机的数据(不导出表解构),然后再导入正式机的数据,也就是测试机的表结构和正式机的数据结合起来,后来发觉这是自己做的一件蠢事,后来开发人员好像用navicat把测试机和正式机的表结构给同步了就没问题了。

不过这里还是简单说下mysql中如何清空数据库数据保留表结构,可能大家在日后的工作中有需要呢!下面直接给出sql查询脚本:

 mysql> select CONCAT('TRUNCATE TABLE ',TABLE_SCHEMA,'.',table_name,';') from information_schema.tables where TABLE_SCHEMA='gzpc' into outfile '/tmp/truncate.sql';
 

简单解释下:

concat()函数:连接字符串,上面连接后就是truncate table table_schema.tablename(table_schema是存放数据库表名的表,tablename是改表中数据库对应的字段),而这个table_schema的表是在information_schema这个数据库中的,这样查询产生的结果是会出现truncate table 表1;truncate table 表2这样的删除表数据的操作,在后面产生的sql脚本中我会截图给大家看结果

TABLE_SCHEMA=‘gzpc’:gzpc是你要清除数据的数据库名,具体的大家根据自己需要清除数据的数据库名字修改

‘/tmp/truncate.sql’:把查询的结果导出成sql脚本并且放在tmp目录中,这里如果是导出到别的目录,那么极有可能是是会报错的,说权限不足,为什么呢,因为mysql导出脚本的话默认用户是匿名用户,而linux目录一般的权限一般是root用户才有这个权限,而tmp目录的权限是777,其他用户也是有所有权

然后我们去tmp目录下看下这个脚本里面到底有什么神奇的语句:

可以看到是truncate table + gzpc数据库所有的表名

最后当然是在数据库中执行这个脚本:

mysql> source /tmp/truncate.sql;