MySQL

1、将查询结果保存为一张新表
create table new_table as select * from old_talbe;

慎用create table as select,一定要注意默认值的问题:
https://blog.csdn.net/evilcry2012/article/details/85337283

从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2 SELECT * FROM table1;

2、进入mysql的控制台后,使用source命令执行
Mysql>source 【sql脚本文件的路径全名】

3、SQL语句中count(1)count()count(字段)用法的区别
一. count(1)和count(
)的区别

  1. count(1)和count(*)的作用:
    都是检索表中所有记录行的数目,不论其是否包含null值。
  2. 区别:但是count(1)比count()效率更高
    二 . count(字段)与count(1)和count(
    )的区别
    count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录

执行效率分析:
l 列名为主键,count(列名)会比count(1)快
l 列名不为主键,count(1)会比count(列名)快
l 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(
l 如果有主键,则 select count(主键)的执行效率是最优的
l 如果表只有一个字段,则 select count(
)最优。

4、sql 语句NVL()用法
NVL函数是一个空值转换函数,有两种写法:
(1) NVL(表达式1,表达式2)
如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。
(2) NVL2(表达式1,表达式2,表达式3)
如果表达式1为空值,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。

5、What does SQL clause “GROUP BY 1” mean?
https://stackoverflow.com/questions/7392730/what-does-sql-clause-group-by-1-mean

6、Hive执行sql文件:hive -f t.sql

7、# [用SQL命令查看MYSQL数据库大小](不能用于Hive)(https://www.cnblogs.com/ggwudivs/p/9947616.html)
1)、进入information_schema 数据库(存放了其他的数据库的信息)
use information_schema;

2)、查询所有数据的大小:
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;

3)、查看指定数据库的大小:
比如查看数据库home的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home';

4)、查看指定数据库的某个表的大小
比如查看数据库home中 members 表的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home' and table_name='members';

8、sql语句中将两个字段的值连接
select database_name, table_name, concat(database_name, '.', table_name) as full_name from table_tmp;

9、## SQL之case when then用法详解
--简单case函数
case sex
when '1' then '男'
when '2' then '女’
else '其他' end
--case搜索函数
case when sex = '1' then '男'
when sex = '2' then '女'
else '其他' end

10、SQL中的cast()函数

语法:
CAST (expression AS data_type)

参数说明:
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

11、数据库导出:
mysqldump -h 172.16.163.214 -u root -p --default-character-set=utf8 jcmdb > /root/mydb.sql
数据库导入:
进入mysql的控制台后,使用source命令执行
Mysql>source 【sql脚本文件的路径全名】

12、KUDU不能使用
delete from table_name where year_month='';
只能用
alter table table_name drop partition(year_month='');

13、# sql针对某一字段去重,并且保留其他字段

今天客户提了一个小需求,希望我能提供一条sql语句,帮助他对数据中 _field 这个字段的值去重,并且保留其他字段的数据。第一反应是select distinct,但这种语句在对某个字段去重时,无法保留其他字段,所以select distinct不成立。因为用户对去重没有要求,字段值重复时保留任意一行就行,所以我想到当字段值重复时,选出对应主键最大的那条数据作为保留数据,这样可以实现用户的去重需求。但是用户的表中又没有主键,没办法,我们只好先使用窗口函数创建主键了。

因为平时喜欢用hive on spark写sql,所以sql语句使用中间表的形式来写,_field为去重字段,other_fields为原表table中_field外的其他字段

1.创建主键(存在主键则无需创建,窗口函数需要遍历所有行数据,数据量大时会很慢)
TEMP table1 = select row_number() over (order by _field) as id, _field, other_fields from table

2.选出每个_field对应的最大主键
TEMP table2 = select max(id) as max_id from table1 group by _field

3.找出选中的主键对应的原表数据
TEMP table3 = select _field, other_fields from table2 left join table on table2.max_id = table1.id

14、判断某一字段是否重复:
select _field, count(1) from table_name
group by _field having count(1)>1;

15、SQL连接两个字段
select concat(field1_name,field2_name) from table_name;

16、向动态分区表插入数据
insert into t2 partition(etl_dt) select * from t1;

17、Hive复制表结构新建表:
CREATE TABLE student2 LIKE student;

18、SQL类型转换
cast(field as decimal(10,0))

19、深入理解where 1=1的用处
https://www.imooc.com/article/41863

20、sqlite3 查看表结构
select * from sqlite_master where type="table" and name="emperors";
select * from sqlite_master where type='table';

21、为什么Hive不支持CHAR/VARCHAR类型?
HIVE不是标准的SQL,它实现的叫HQL, 其实就是一个Map-reduce的解释能简化JAVA编程,他的类型基本上是JAVA语言的类型了

22、SQL UNION 和 UNION ALL 操作符
https://www.w3school.com.cn/sql/sql_union.asp

UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值,UNION会去重。

23、# char,varchar和nvarchar有什么区别?
1、CHAR。CHAR存储定长数据很方便。不论你存储的数据是否达到了10个字节,都要占去10个字节的空间
2、VARCHAR。存储变长数。
varchart(n):长度为 n 个字节的可变长度且非 Unicode 的字符数据。范围1 ~ 8000
3、NVARCHAR。它表示存储的是Unicode数据类型的字符。所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
nvarchar(n):包含 n 个字符的可变长度 Unicode 字符数据。范围1 ~ 4000
一般来说,如果含有中文字符,用nvarchar,如果纯英文和数字,用char/varchar

例:
varchar(4) 可以输入4个字节,也可以输入两个汉字
nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

24、通过-f 参数来执行查询文件
impala-shell -f impala-shell.sql

25、hive高级应用之不进入交互,执行 hive sql
hive -e "select * from student;"

26、hive执行sql文件:
hive -f t.sql

27、hive导入txt文件(https://www.cnblogs.com/xk-bench/p/9201578.html
load data local inpath '/tmp/fun_user.txt' into table fun_user_external;

加载完后用Impala可能看不到,需要在Impala下执行以下命令:
refresh 库名.表名;

28、hive动态分区数据导入
https://blog.csdn.net/liubiaoxin/article/details/48931247

29、mysql如何实现多行查询结果合并成一行(默认是逗号分隔)
select group_concat(field_a) from table1;

30、用SQL删除一列字段:
ALTER TABLE store DROP COLUMN address;

31、GROUP_CONCAT(),1024这就是一般MySQL系统默认的最大长度(https://www.jianshu.com/p/011157cce605
SET group_concat_max_len=102400;

32、# sqoop 导入增量数据到hive

https://blog.csdn.net/leprovision/article/details/87698064
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123 --table trade_detail --hive-import --hive-overwrite --hive-table trade_detail --fields-terminated-by '\t'

33、【Hive】load数据,跳过第一行
在建表时,进行如下参数设置。
tblproperties(
"skip.header.line.count"="n", --跳过文件行首n行
"skip.footer.line.count"="n" --跳过文件行尾n行
)

34、创建自增字段
create table customers (
customer_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name TEXT,
last_name TEXT
);

35、HiveSQL中没有Left、Right函数
可以用substr(column,1,nchar)代替
substr在Mysql和HiveSQL中都可以使用
注意:substr从1开始,包头包尾
left/right从0开始,包头不包尾

36、MySQL_TEXT与BLOB字段类型的区别
https://blog.csdn.net/wanlixingzhe/article/details/95324243

TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而是把图片上传到服务器然后正文里使用标签引用,这样的博客就可以使用TEXT类型。而BLOB就可以把图片换算成二进制保存到数据库中。

37、# MySQL查询一张表有多少个字段
select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'

38、MySQL的sql_mode解析与设置
https://blog.csdn.net/CCCCalculator/article/details/70432123

https://blog.csdn.net/wang_517766334/article/details/3152939

设置的sqlmode在退出或者重启mysql后sqlmode即失效,要让sqlmode的设置永久有效,可以修改mysql的配置文件。在mysql配置文件中添加sql_mode的字段,后面加上相应的sqlmode模式,如下图所示将sqlmode设置为ansi。


image.png

39、解决“LOAD DATA local INFILE”时出现The used command is not allowed with this MySQL version问题
https://blog.csdn.net/ziyou434/article/details/82504130

https://www.cnblogs.com/xiaohuomiao/p/10646266.html

mysql -u Name -p --local-infile=1;

40、mysql 批量创建表及自动分区
https://www.jianshu.com/p/56bac8e455a5

41、mysqldump 数据迁移
mysqldump -uroot -ppassword --default-character-set=utf-8 --single-transaction --skip-opt -q [-d(t)] database_name --tables table_name1, table_name2, table_name3 > /data/s.sql

锁表问题:
https://blog.csdn.net/weiliu1463/article/details/25305371

mysqldump的--skip-opt问题 :
http://blog.sina.com.cn/s/blog_504818d0010084lr.html

https://imysql.com/2013/01/17/mysql-faq-mysqldump-skip-opt.html

mysqldump --master-data=2 --single-transaction:
https://blog.csdn.net/linuxheik/article/details/71480882

查看被锁的表:
select * from INFORMATION_SCHEMA.INNODB_TRX;

mysqldump如果不添加--single-transaction --skip-opt两个参数,则MySQL事务隔离级别为不可重复读(read-committed),如果添加则为可重复读(repeatable-read)

https://www.jianshu.com/p/50c389f00614

42、看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';

43、MySQL修改密码
mysql> set password for root@localhost = password('123');

44、Mysql优化
https://www.cnblogs.com/sharpest/p/10390035.html

45、# MySQL自动设置create_time和update_time

CREATE TABLE ProfitAndLossHistory (
StockId char(6) NOT NULL COMMENT '股票代码',
StockName varchar(10) NOT NULL COMMENT '股票名称',
ProfitOrLoss tinyint(1) NOT NULL COMMENT 'True为盈利,False为亏损',
ProfitOrLossFund float NOT NULL COMMENT '累计盈亏资金',
PositionFund int(11) NOT NULL COMMENT '持仓资金(单位W,四舍五入)',
RecentRange int(11) NOT NULL COMMENT '近期涨跌幅度(百分之)',
Hotspot int(10) unsigned NOT NULL COMMENT '热点天数(非热点为0)',
BuyTimes int(10) unsigned NOT NULL COMMENT '第几次购买',
DaysOfPossession int(11) NOT NULL COMMENT '持有天数(最低两天)',
Weekdays int(10) unsigned NOT NULL COMMENT '买入时周几',
IsBuyCurrentHighPoint tinyint(1) NOT NULL COMMENT '买入点仍是目前高点(1为是,0为否)',
TrendAfterSale int(11) NOT NULL COMMENT '卖后走势(0为卖后当天上涨,1为1天后上涨,2为2天上涨,3为3天后上涨,4为4天后上涨,5为5天即以上上张,-1为1天后下跌,-2为2天后下跌,-3为3天后下跌,-4为4天后下跌,-5为5天即以上下跌)',
InsertTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UpdateTime timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='盈亏较大的交易历史(波动1000以上)';

46、SQLite Delete 删除语句
DELETE FROM table_name WHERE [condition];

47、建视图时字段起个别名的方法
https://blog.csdn.net/tianping168/article/details/3292636

48、interval关键字用法
https://blog.csdn.net/arenzhj/article/details/16902141

49、create table as 和create table like的区别
https://www.cnblogs.com/bjx2020/p/10224811.html

50、LEFT JOIN关联表中ON,WHERE后面跟条件的区别
https://blog.csdn.net/wqc19920906/article/details/79785424

51、## TRUNC函数的用法
截取今天:
SQL> select sysdate,trunc(sysdate,'dd') from dual;
SYSDATE TRUNC(SYSDATE,'DD')


2009-03-24 21:31:17 2009-03-24 00:00:00

截取本周第一天:
SQL> select sysdate,trunc(sysdate,'d') from dual;

SYSDATE TRUNC(SYSDATE,'D')


2009-03-24 21:29:32 2009-03-22 00:00:00

截取本月第一天:
SQL> select sysdate,trunc(sysdate,'mm') from dual;

SYSDATE TRUNC(SYSDATE,'MM')


2009-03-24 21:30:30 2009-03-01 00:00:00

52、DATE_ADD()
https://blog.csdn.net/weixin_38750084/article/details/87874604
select DATE_ADD('2019-02-19 00:00:00',INTERVAL 1 DAY) from dual;

53、## sql语句中日期相减的操作

select datediff(month, 开始日期,结束日期); --两日期间隔月
select datediff(day, 开始日期,结束日期); --两日期间隔天

54、# sql查询字段个数
select count(*) from information_schema.COLUMNS where table_name='表名';

55、MySQL8中LOAD DATA INFILE出现The used command is not allowed with this MySQL version问题
https://blog.csdn.net/qinglingls/article/details/88981950

56、MySQL中外键的定义、作用、添加和删除
https://blog.csdn.net/lk142500/article/details/83590862

57、MySQL加载txt文件

alter table table_name add column dw_etl_dt int default 20200401;

alter table table_name partition by LIST(dw_etl_dt)
(
partition p20200401 values in (20200401);
)

select count(*) from table_name where dw_etl_dt=20200401;

select count(*) from table_name partition(p20200401);

alter table table_name add partition(
partition p20200402 values in (20200402)
);

load data infile '' terminated by '|' lines (a,b,@dw_etl_dt) set dw_etl_dt=if(isnull(@dw_etl_dt),20200401,@dw_etl_dt)

http://blog.sina.com.cn/s/blog_4d398f210100x9nn.html

https://dev.mysql.com/doc/refman/5.7/en/load-data.html

58、mysql 的show processlist和show full processlist区别
https://www.pianshen.com/article/88711276723/

showprocesslist只能列出当前100条。如果想全部列出,可以使用SHOW FULL PROCESSLIST命令

59、mysql执行truncate drop 时卡死问题解决
https://blog.csdn.net/zoujian1991/article/details/111871735

show processList
找到状态不正常的kill掉

60、MySQL grant 语法的详细解析
https://blog.csdn.net/yufengicd/article/details/9704865

61、MYSQL获取月份多少天
SELECT day(LAST_DAY('2012-09-01'))

62、## mysql int类型范围
INT 4 -2147483648 2147483647

63、This inspection detects situations when list creation could be rewritten with list literal.(https://blog.csdn.net/u014418725/article/details/89145380

point_collection = list()
point_collection.append(point_list)

64、# Mysql中设置小数点用什么数据类型 decimal
Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。

65、# 主键和候选键有什么区别?

表格的每一行都由主键唯一标识,一个表只有一个主键。
主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键

66、查看字段注释(https://blog.csdn.net/weixin_31022063/article/details/113149728
SHOW FULL COLUMNS FROM tbl_name [FROM db_name]//列出字段及详情

67、MySQL 转成字符串(https://www.cnblogs.com/xing-nb/p/12218946.html
SELECT CAST(123 AS CHAR)

68、mysql 字符串拼接的几种方式(https://blog.csdn.net/syslbjjly/article/details/90640975)
SELECT CONCAT("name=","lich",NULL) AS test;

69、字段转换为字符串
select cast(now() as char)

70、Mysql修改字段名、修改字段类型(https://blog.csdn.net/u010002184/article/details/79354136
alter table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释';

71、mysql添加字段(https://blog.51cto.com/victor2016/1868716)
alter table t1 add d1 char(10) before d2;

alter table t2 add d3 char(10) after d4

72、# MySQL 添加字段 修改字段 删除字段
alter table users drop name;

73、mysql 如何获取当前时间 前、后一小时的时间?(https://blog.csdn.net/z13197919100/article/details/79236048
前一个小时:
select date_sub(now(), interval 1 hour);

74、mysql 1分钟前_mysql 数据库取前后几秒 几分钟 几小时 几天的语句(https://blog.csdn.net/weixin_35870469/article/details/113150947

select SUBDATE(now(),interval 60 second);

75、mysql Date类型与String类型转换(https://www.cnblogs.com/zkwarrior/p/14872332.html)
DATE_FORMAT(now(),"%Y-%m-%d %T") 2015-09-01 17:10:52

76、python连接MySQL并查询(https://blog.csdn.net/yushupan/article/details/85061143
results = cursor.fetchall()
for result in results:
print (result)

77、varchar与char有什么区别?(https://blog.csdn.net/qq_20264581/article/details/83755789)
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。

78、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容