mysql学习小记
最近的我是爱学习的变异版本!在看
最近真的深受打击,感觉自己是一坨垃圾,有点点想做金融数据分析啦,感觉自己真的不是行研以及投行的料吧唉,银行又觉得无聊透顶,但是吧,我matlab和R自认为还可以,python完全是临时抱佛脚蹭的,数据库更是没怎么学过(除了大二上过一门特简单的数据库课),所以还是加油吧
DDL数据定义语言 创建 create database dbname; create table tbname(name1 type1; name2 type2,...); eg create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2)); 选择 use dbname 查看 show databases; show tables; desc tbname; 修改 MODIFY CHANGE ADD #修改列定义 alter table tbname modify [column] column_definition [first|after col_name] eg alter table emp modify ename varchar(20); #添加列 alter table tbname add [column] column_definition [first|after col_name] eg alter table emp add column age int(3); #删除字段 alter table tbname drop [column] col_name; #修改列 alter table tbname change [column] old_name column_definition [first|after col_name] eg alter table emp change age age1; 注:change和modify都可以修改定义,但change需要写两次列明,但change可以修改列名称 #修改表名 alter table tbname rename [to] new_name; 删除 drop database dbnames; drop table tbname; #查看创建语句 show create table tbname \G; #\G表示竖排输出
3.14我去投了一个新浪金融……心底还是有点小期待哦 DML数据操作语言 #插入 insert into tbname(field...) values(value...); or insert into tbname (value...)#按顺序 #插入多条values用逗号隔开即(),(),... #更新 update tbname set field=value where field'=value' eg update emp set hiredate='2005-02-05',deptno=1 where ename='dony'; update t1,t2 set t1.field=value,t2.field=value update emp a,dept b set a.sal=a.sal*b.depto,b.deptname=a.ename where a.deptno=b.depto; #删除 delete from tbname [where condition] eg delete from dept where deptname='dept5'; eg delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3; #查询 select * from tbname [where condition]; select * from tbname [where condition] [order by field] [desc|asc]#默认asc升序 eg select distinct deptno from emp; eg select * from emp order by deptno; select * from tbname limit offset_start,row_count eg select * from emp order by sal limit 3; eg select * from emp order by sal limit 1,3;#第一位index为0,本条意为从第二条开始的第三条记录 #聚合操作 类比python的groupby和简单的数据透视表 select [field1,...,fieldn] func from tbname [where] [group by field rollup]] [having where condition]

eg select deptno,count(1) from emp group by deptno with rollup; eg select deptno,count(1) from emp group by deptno having count(1)>1; #表连接分内连接和外连接 select ename,deptname from emp,dept where emp.deptno=dept.depto;#内连接 select ename,deptname from emp left join dept on emp.deptno=dept.deptno;#外连接之左连接 #子查询 select * from emp where deptno in(select deptno from dept); #记录联合 #union则无重复,union all则全包含
HELP ? contents; ?相当于matlab的help
数值类型 日期型datetime & timestamp 与书中不同,mysql 8不存在timestamp的默认值current_timestamp,在不指定时默认为null。 也不存在一个表里只能有一列指定为current_timestamp的情况。 但timestamp随时区设定改变仍是对的。 任何标点符号都可以用作date & time的间隔符,但是date & time各自内部间隔符应相同。 eg insert into t values('2017-12-13 6@30@23','2002+3+11 12=23=7'); 字符串char & varchar 与书里描述不同,在mysql 8里不存在varchar保留尾部空格的情况 枚举enum 与set不同,一次输入单值 eg create table t(gender enum('M','F')); 若超出指定范围,则显示默认值(第一个值) 集合set eg create table t(col set ('a','b','c','d')); 指定范围,可多选,但具有集合的性质,单元值不可重复 eg insert into t values('a,b'),('a,d,a'); 第二个只显示'a,d'
运算符号 取余 %或者mod(a,b) 除法也可以用div(a,b) 比较运算符 <> !=不等于 <=> 等于,但是这里可以使用null<=>null判定为真,而null=null返回null between和in,表示范围,前者连续,后者离散 like模糊匹配,使用格式为 a like %123% 当a中有字符串124时,返回1 regesp目前看和like好像哦,格式是 str regexp str_pat 当str中含有str_pat匹配的字符串时,返回1,但是看前面介绍,这是一个正则匹配符,可能有更多应用 逻辑运算符 XOR表示异或,非null的操作数,若二者真假相反,返回1
函数 #字符串操作 concat(str1,str2,...)连接 insert(str,x,y,instr) str表示被插入字符串,x表示从第x位开始,y表示被替换长度为y,instr为需要替换字符串 lpad(str,x,pad) or rpad(str,x,pad) 左右扩充pad字符到整体长度为x ltrim(str) rtrim 和trim 去除空格 replace(str,a,b) 直接把str中所有a换成b substring(str,x,y) 截取str中x起长度为y的字符串 strcmp(str1,str2) 字符串比较,返回-1 0 1 #数值操作 ceil floor 顾名思义 rand() 0,1随机数 round(x,y) 四舍五入y位小数 truncate(x,y) 直接截断为y位小数 #时间函数 curdate() +curtime() =now() unix_timestamp(date) from_timestamp(unixtime) 时间戳日期转换 monthname() 返回月份英文 而month返回 数字 date_format(date,format) 定制格式 eg select date_format(now(),'%M,%D,%Y'); date_add(time,interval type) 加减时间 eg select now() current,date_add(now(),interval 31 day) after31days;

datediff(d1,d2) 时间加减 #流程函数

