1. 表结构创建维护
-
修改 primary key
# 删除原有主键 alter table tablename drop PRIMARY KEY # 重新创建主键 alter table tablename ADD PRIMARY KEY('col_name') -
添加索引
create index `idx_add_time` on ods.ods_oms_product (add_time); ALTER TABLE ods.ods_ad原始表 ADD KEY INDEX idx_date(`日期`); -
添加多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) -
添加全文索引
ALTER TABLE `table_name` ADD FULLTEXT ( `column`) -
添加字段
ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100) DEFAULT NULL COMMENT '新加字段' AFTER old_column; -
添加唯一键
alter table question_tag_map add unique key `qtag2` (`question_id`,`question_tag_id`); -
删除唯一键
alter table question_tag_map drop index `qtag2`; -
复制表:
create table tb_test01 like tb_test02; -
复制表数据:
insert into tb_test01 select * from tb_test02; -
修改表名
alter table ods.`ods_oms_b2b_stock_out_order_detail_new` rename [to|as] ods.`ods_oms_b2b_stock_out_order_detail` -
修改列名 / 重命名字段
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段类型(长度); -
添加时间戳字段
alter table quant_stk_calc_d_wxcp add update_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
2. 增删改查
2.1. 联合查询
-
多表联查
SELECT * FROM oms_biz.oms_stock_loan_out st1, oms_biz.oms_stock_loan_out_detail st2 where st1.stock_loan_out_id = st2.stock_loan_out_id; -
多表查询相同字段名
SELECT st1.modified_time, st2.modified_time FROM oms_biz.oms_stock_loan_out st1, oms_biz.oms_stock_loan_out_detail st2;
2.2. CAST 函数
select cast('01-11-11' as DATE);

3. 清洗转换
3.1. 数据探查
-
查看某字段不重复的全部值
SELECT DISTINCT(字段) FROM test.test;
3.2. 数据校验
-
正则表达式:检测科学计数法
SELECT * FROM test.test WHERE 日期 regexp '[E|e]+'; -
检测空值
SELECT * FROM test.test WHERE ISNULL(非空字段)=1;
3.3. 数据转换
-
SQL 替换字符串
update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')
3.4. 日期计算
- 对比两表的 datetime 字段是否在同一天
SELECT * FROM oms_biz.oms_stock_loan_out st1, oms_biz.oms_stock_loan_out_detail st2 where TO_DAYS(st1.modified_time) != TO_DAYS(st2.modified_time); - 日期时间字段类型 datetime 转换为日期(年-月-日)的方法
-
方法1,使用DATE_FORMAT
DATE_FORMAT(time, '%Y-%m-%d') -
方法2,使用 CAST
CAST(time AS DATE)
-
-
查询指定日期
– 今天
SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(NOW());– 昨天
SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS( 时间字段名) <= 1;– 近7天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名);– 近30天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名);– 本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, ‘%Y%m’ ) = DATE_FORMAT( CURDATE( ) , ‘%Y%m’ );– 上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , ‘%Y%m’ ) , date_format( 时间字段名, ‘%Y%m’ ) ) =1;– 查询本季度数据
Select * from 表名 where QUARTER(时间字段名)=QUARTER(now());– 查询上季度数据
Select * from 表名 where QUARTER(时间字段名)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));– 查询本年数据
Select * from 表名 where YEAR(时间字段名)=YEAR(NOW());– 查询上年数据
Select * from 表名 where year(时间字段名)=year(date_sub(now(),interval 1 year));– 查询当前这周的数据
SELECT * FROM 表名 WHERE YEARWEEK(date_format(时间字段名,’%Y-%m-%d’)) = YEARWEEK(now());– 查询上周的数据
SELECT * FROM 表名 WHERE YEARWEEK(date_format(时间字段名,’%Y-%m-%d’)) = YEARWEEK(now())-1;– 查询上个月的数据
Select * from 表名 where date_format(时间字段名,’%Y-%m’)=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),’%Y-%m’);Select * from 表名 where DATE_FORMAT(时间字段名,’%Y%m’) = DATE_FORMAT(CURDATE(),’%Y%m’);Select * from 表名 where WEEKOFYEAR(FROM_UNIXTIME(时间字段名,’%y-%m-%d’)) = WEEKOFYEAR(now());Select * from 表名 where MONTH(FROM_UNIXTIME(时间字段名,’%y-%m-%d’)) = MONTH(now());Select * from 表名 where YEAR(FROM_UNIXTIME(时间字段名,’%y-%m-%d’)) = YEAR(now()) and MONTH(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = MONTH(now());Select * from 表名 where 时间字段名 between 上月最后一天 and 下月第一天;– 查询当前月份的数据
Select * from 表名 where date_format(时间字段名,’%Y-%m’)=date_format(now(),’%Y-%m’);– 查询距离当前现在6个月的数据
Select * from 表名 where 时间字段名 between date_sub(now(),interval 6 month) and now();– 查询某个月的数据(查询18年10月份数据)
Select * from 表名 where date_format(时间字段名,’%Y-%m’)=‘2018-10’;Select * from 表名 where date_format(时间字段名,’%Y-%m’)=date_format(‘2018-10-05’,’%Y-%m’);
4. 管理配置
-
卸载&清除残留文件
sudo apt purge mysql-* sudo rm -rf /etc/mysql/ /var/lib/mysql sudo apt autoremove sudo apt autoclean 或者: sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P -
修改密码
use mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; --创建远程root用户并设置密码 flush privileges; -
查看端口号
show global variables like 'port';
4. 异常处理
-
Invalid for this platform protocol requested
- 问题:
- 使用 workbench 连接 MySQL 数据库,workbench 客户端连接失败,
- 报错:
Invalid for this platform protocol requested(MYSQL_PROTOCOL_SOCKET) - 处理方法:
- 删除现有的连接,从头开始、重新创建一个连接。
- 问题:
`