mysql 生成表文件、truncate、Load

本文介绍了使用SQL语句进行数据库表的批量操作,包括选择、插入、删除、更新等,以及如何通过联接和拼接字符串实现复杂的数据修复流程。重点涵盖了特定条件下的表名筛选、文件输出和导入、数据清空、重新加载等关键步骤。

SELECT -- ' select *  from `',TABLE_SCHEMA,'`.`',TABLE_NAME,'` into outfile ''/work/opdir/repair'''
-- concat('union all 
-- select count(1) as count_, ''`',TABLE_SCHEMA,'`.`',TABLE_NAME, '`'' as tbname from `',TABLE_SCHEMA,'`.`',TABLE_NAME ,'`')
-- as sql_
CONCAT( ' select *  from `',TABLE_SCHEMA,'`.`',TABLE_NAME,'` into outfile ''/work/opdir/repair/',TABLE_SCHEMA,'.',TABLE_NAME,'.tsv'' ;
 truncate table ' ,TABLE_SCHEMA,'.',TABLE_NAME,' ;
 LOAD DATA   infile  ''/work/opdir/repair/',TABLE_SCHEMA,'.',TABLE_NAME,'.tsv'' INTO TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' CHARACTER SET utf8;
 

')
ExeSql
FROM information_schema.TABLES t 
WHERE t.TABLE_TYPE LIKE '%T%'
AND t.TABLE_SCHEMA IN
(
'BCReport_Sync'-- ,'AdConversions','AdSync','BCSourceData_Sync'
)
AND t.`TABLE_NAME` NOT LIKE '%Log%'
AND t.`TABLE_NAME` NOT LIKE '%bak%' 
AND t.`TABLE_NAME` NOT LIKE '%History%'
AND t.`TABLE_NAME` NOT LIKE '%Tmp_%'
AND t.`TABLE_NAME` NOT LIKE '%bak%'
AND t.`TABLE_NAME` NOT LIKE '%Monitor%'
AND t.`TABLE_NAME` NOT LIKE '%bak%'
AND t.`TABLE_NAME` NOT LIKE '%backup%'
AND t.`TABLE_NAME` NOT LIKE '%_BK'
AND t.`TABLE_NAME` NOT LIKE '%_Temp'

AND t.`TABLE_NAME` NOT LIKE '%2013%'

AND t.`TABLE_NAME` NOT LIKE '%2'
AND t.`TABLE_NAME` NOT LIKE '%2012%'
AND t.`TABLE_NAME` NOT LIKE '%2012%'
AND t.`TABLE_NAME` NOT LIKE '%2014%'

AND  CONCAT(t.TABLE_SCHEMA ,'.', t.`TABLE_NAME`) IN
('AdConversions.DataInbound_TaskSchedule'	,
'AdConversions.DeviceForComparison'	,
'AdConversions.Fact_Realtime_Conversion'	,
'AdDataCenter.Ad_Account_Mirror'	,
'AdDataCenter.Ad_Account'	,
'AdDataCenter.Ad_AdGroup_AdAction_Mobisage'	,
'AdDataCenter.Ad_AdGroup_BidPrice'	,
'AdDataCenter.Ad_AdGroup_Property'	,
'AdDataCenter.Ad_AdGroup_WeekTimePeriod'	,
'AdDataCenter.Ad_AdGroup'	,
'AdDataCenter.Ad_Campaign_BudgetList'	,
'AdDataCenter.Ad_Campaign_DockingProduct_Mapping'	,
'AdDataCenter.Ad_Campaign_GeoTargeting'	,
'AdDataCenter.Ad_Campaign'	,
'AdDataCenter.Ad_Creative_Additional'	,
'AdDataCenter.Ad_Creative_ImageAd'	,
'AdDataCenter.Ad_Creative_Offerwall'	,
'AdDataCenter.Ad_Creative_Template'	,
'AdDataCenter.Ad_Creative'	,
'AdDataCenter.Ad_Targeting_Mobisage_AppIncluded'	,
'AdDataCenter.Ad_Targeting_Mobisage'	,
'AdDataCenter.Ad_Targeting'	,
'AdDataCenter.AdCreativeTemplate_SlotSize_Mapping'	,
'AdDataCenter.AdSync_AdCreative'	,
'AdDataCenter.App_MediaType_Mapping'	,
'AdDataCenter.AppOfferwall_Category_Mapping'	,
'AdDataCenter.Bill_AdAccount_Recharge_Daily'	,
'AdDataCenter.Bill_AdAccount_Spend_Daily'	,
'AdDataCenter.Dim_App'	,
'AdDataCenter.Dim_Slot'	,
'AdDataCenter.Docking_Product'	,
'AdDataCenter.Offerwall_AppBuckleScale_Mapping'	,
'AdDataCenter.Plugin_AdGroup'	,
'AdDataCenter.Slot_Affiliate_Business_Ratio'	,
'AdSync.Ad_Campaign_RealtimeControl'	,
'BCSourceData_Sync.Data_TaskSchedule'	,
'BCSourceData_Sync.Source_Fact_AccountHourlySpend'	,
'BCSourceData_Sync.Source_Fact_AdCreative_App_Usage_ThirdPartPlatform'	)

<think>嗯,用户想知道如何在MySQL中插入数据。首先,我需要回忆一下INSERT语句的基本用法。记得INSERT INTO后面跟名,然后指定列名或者直接用VALUES来插入数据。比如INSERT INTO table_name (column1, column2) VALUES (value1, value2);这样对吧? 对了,用户提供的引用里提到INSERT INTO有两种方式,一种是带列名,一种不带列名。不带的话需要按结构的顺序提供所有列的值。可能需要注意自增主键或者默认值的情况,这时候可能需要显式指定列名,比如如果某个列允许NULL或者有默认值,就可以不插入。比如引用[4]里提到如果B已经有数据,新数据会追加在后面,如果需要完全替换,可以先TRUNCATE再插入。这点用户可能需要知道如何覆盖数据。 然后,用户可能也会关心如何插入多行数据。记得可以用逗号分隔多个VALUES子句,比如INSERT INTO table VALUES (v1, v2), (v3, v4);这样可以一次性插入多行,提高效率。 另外,引用[5]提到了处理NULL值的情况,用Python的话可以用None代替,生成SQL语句时自动替换为NULL。这可能涉及到编程中的参数化查询,避免SQL注入的问题,比如使用预处理语句而不是直接拼接字符串。不过用户的问题可能更基础,所以需要先介绍基本的SQL语句,再提到编程中的注意事项。 还有,用户可能想知道如何从另一个复制数据,这时候可以用INSERT INTO ... SELECT ...的语法。比如引用[4]中的例子,把A的数据复制到B,可能需要注意列的顺序和数据类型是否匹配。如果有需要替换B的数据,先TRUNCATE再插入,这也是一个常见的操作步骤。 需要注意的地方包括:插入的数据类型是否与列定义匹配,比如字符串要用单引号括起来,日期格式是否正确;主键或唯一约束是否冲突;以及事务处理,比如是否要启用事务来确保插入操作的原子性。 可能用户也会遇到自动递增的列,这时候插入时可以省略该列,或者指定NULL,让数据库自动生成值。例如引用[3]中的CREATE TABLE语句,id是主键,如果设置了AUTO_INCREMENT,插入时可以不提供该值。 总结一下,回答应该分步骤,先介绍基本语法,再说明插入单行、多行、从其他插入的方法,最后提注意事项和常见问题。同时根据用户提供的引用,引用[1]和[4]中的内容可以作为示例,说明INSERT的不同用法和注意事项。</think>### MySQL 插入数据到的完整指南 在MySQL中,`INSERT`语句用于向数据库添加新数据。以下是三种常用方法及注意事项: --- #### 一、基础插入语法 1. **显式指定列名**(推荐) ```sql INSERT INTO 名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); ``` *示例:插入用户数据* ```sql INSERT INTO users (name, email, created_at) VALUES ('张三', 'zhangsan@example.com', NOW()); ``` 2. **隐式列顺序插入** 需按结构顺序提供所有列的值(含自增主键)[^3] ```sql INSERT INTO users VALUES (NULL, '李四', 'lisi@example.com', NOW()); ``` --- #### 二、批量插入数据 使用逗号分隔多组值,提升插入效率: ```sql INSERT INTO products (product_name, price) VALUES ('鼠标', 49.99), ('键盘', 129.99), ('显示器', 599.99); ``` --- #### 三、从其他复制数据 通过`SELECT`子句实现跨插入: ```sql INSERT INTO orders_archive (order_id, total_amount) SELECT order_id, amount FROM orders WHERE order_date < '2023-01-01'; ``` *注意:需先清空目标时使用`TRUNCATE TABLE 名`[^4]* --- #### 四、特殊值处理 1. **插入NULL值** ```sql INSERT INTO employees (name, department, salary) VALUES ('王五', NULL, 8500); ``` 编程时可用`None`生成NULL值(Python示例)[^5] 2. **处理单引号** ```sql INSERT INTO posts (title) VALUES ('MySQL中的"INSERT"语句解析'); ``` --- #### 五、常见错误排查 | 错误类型 | 解决方案 | |---------------------------|------------------------------| | 列值数量不匹配 | 检查结构与VALUES列一致性 | | 主键/唯一约束冲突 | 使用`INSERT IGNORE`跳过错误 | | 数据类型不匹配 | 转换值类型或使用CAST函数 | | 外键约束失败 | 确保引用值已存在于父 | --- #### 六、性能优化建议 1. 批量插入时使用单条多值语句 2. 大容量数据导入时使用`LOAD DATA INFILE` 3. 禁用索引(插入完成后再重建)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值