枚举类型枚举类型适用于比如:性别,只有男、女两种可能,就可以使用枚举限制存储内容。使用创建createtablem(menum("男","女"))查看结构mysql>descm;+-------+-----------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+-----------------+------+-----+---------+-------+|m|enum('男','女')|YES||NULL||+-------+-----------------+------+-----+---------+-------+1rowinset(0.06sec)插入数据只能插入枚举的其中一个insertintonum.mvalues("男")查看数据mysql>select*fromm;+------+|m|+------+|男|+------+1rowinset(0.00sec)集合类型集合类型跟枚举最大的区别就是:插入的数据可以是集合里的多个。使用创建createtablenum.set_t(tset("四川","云南","贵州"))查看结构mysql>descset_t;+-------+---------------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+---------------------------+------+-----+---------+-------+|t|set('四川','云南','贵州')|YES||NULL||+-------+---------------------------+------+-----+---------+-------+1rowinset(0.14sec)插入数据插入的数据可以是其中一个,也可以是多个insertintonum.set_tvalues("四川"),("四川,云南")查看数据多个是,(逗号)分隔的mysql>select*fromset_t;+-----------+|t|+-----------+|四川||四川,云南|+-----------+2rowsinset(0.00sec)
概述SQL的日期和时间类型比较简单日期和时间类型字节最小值最大值date41000-01-019999-12-31time3-838:59:59838:59:59year119012155datetime81000-01-0100:00:009999-12-3123:59:59timestamp4197001010800012038年的某个时刻特点\字节范围时区等的影响datetime81000-9999不受timestamp41970-2038受使用创建createtablenum.dt(d1datetime,d2timestamp,d3time)`查看结构mysql>descdt;+-------+-----------+------+-----+-------------------+-----------------------------+|Field|Type|Null|Key|Default|Extra|+-------+-----------+------+-----+-------------------+-----------------------------+|d1|datetime|YES||NULL|||d2|timestamp|NO||CURRENT_TIMESTAMP|onupdateCURRENT_TIMESTAMP||d3|time|YES||NULL||+-------+-----------+------+-----+-------------------+-----------------------------+3rowsinset(0.01sec)插入数据insertintonum.dtvalues(now(),now(),curtime());查看数据mysql>select*fromdt;+---------------------+---------------------+----------+|d1|d2|d3|+---------------------+---------------------+----------+|2020-03-0719:27:06|2020-03-0719:27:06|19:27:06|+---------------------+---------------------+----------+1rowinset(0.00sec)
数值分为两类整数小数整数类型概述SQL的整数类型有5种有符号就是正负数都可以存储,无符号只能存正数,需要unsigned修饰。Tinyint:占位1字节有符号:-128~127无符号:0~255Smallint:占位2字节有符号:-32768~32767无符号:0~65535Mediumint:占位3字节有符号:-8388608~8388607无符号:0~1677215Int:占位4字节有符号:-2147483648~2147483647无符号:0~4294967295Bigint:占位8字节有符号:-9223372036854775808~9223372036854775807无符号:0~9223372036854775807*2+1使用只用int举个例子,其他也是同理。创建表createtablet(t1int,#默认有符号t2intunsigned,#无符号不能插入负数t3int(4),/*数值代表查询结果显示的长度(不是范围,范围是intbigdata使用什么类型确定的),这样单独写是看不出效果的。*/t4int(4)unsignedzerofill/*1.需要转换成无符号添加不足长度0填充(zerofill)来显示。2.如果使用某些软件查询,查询结果可能会把填充的0去掉。*/)插入数据insertintotvalues(-1,1,1,1)查询有填充的0。mysql>select*fromt;+------+------+------+------+|t1|t2|t3|t4|+------+------+------+------+|-1|1|1|0001|+------+------+------+------+1rowinset(0.00sec)小数类型概述SQL的小数类型可以分为两大类小数型,常用于计算,浮点的运算在精度上要求不高(了解)。float(M,D):占有4字节范围:±1.75494351E-38~±3.402823466E+38double(M,D):占有8字节范围:±2.2250738585072014E-308~±1.7976931348623157E+308定点型,常用于货币的计算dec(M,D)是decimal(M,D)的缩写。dec(M,D):占有M+2个字节范围:最大取值范围与double相同,给定dec的有效取值范围由M和D决定特点M&D详解M&D的作用M:整数位数+DD:小数的位数M&D都是可以省略的小数类型省略,就不受位数限制定点数省略,将会默认dec(10,0)使用创建表createtablenum.f(f1float,#不带参数f2float(5,2),#带参数,超过范围会报错f3dec,#不带参数默认dec(10,0)f4dec(5,4)#达不到5长度,小数后0填充)查看表的结构关注表字段的Type。mysql>descf;+-------+---------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+---------------+------+-----+---------+-------+|f1|float|YES||NULL|||f2|float(5,2)|YES||NULL|||f3|decimal(10,0)|YES||NULL|||f4|decimal(5,4)|YES||NULL||+-------+---------------+------+-----+---------+-------+4rowsinset(0.01sec)插入数据insertintofvalues(-1,1.56,1,1.56)查看结果dec类型填充的0,在某些软件查询会被过滤。mysql>select*fromf;+------+------+------+--------+|f1|f2|f3|f4|+------+------+------+--------+|-1|1.56|-1|1.5600|+------+------+------+--------+2rowsinset(0.00sec)
表的创建createtable表名(字段1类型1[(参数)约束],字段2类型2[(参数)约束],...字段n类型n[(参数)约束])表创建的扩展—-复制表复制表的完整结构createtable新表名like旧表名;复制表的数据和结构createtable新表名select语句;复制表的部分结构这里使用的复制的数据的思想,如果没有满足的数据那么就行了。createtablegirls.boys13selectid,boyName#部分字段fromgirls.boysbwhere1=2;#一个永远为False的条件表的修改归纳主要格式altertable表名rename|add|drop|change|modifycolumn列名[类型约束];表名的修改#格式altertable表名rename新表名;altertablebookrenamebooknames;增加列#格式altertable表名addcolumn字段名类型约束;altertablebooks.bookaddcolumnpricedouble;删除列#格式altertable表名dropcolumn列名;altertablebooks.bookdropcolumnprice;修改列可以修改旧列的名称和类型#格式altertable表名changecolumn旧列名新列名类型约束;altertablebooks.bookchangecolumnshowBookpriceint(90);修改列的类型和约束只能修改类型和约束,列名不变。#格式altertable表名modifycolumn列名类型约束;altertablebooks.bookmodifycolumnpricedouble;删除表droptable表名;
概述数据插入涉及一个关键词insert使用格式使用时注意字段的类型经典格式insertinto表名(字段1,字段2,字段3,...)values(值1,值2,值3...)另外插入方法insertinto表名set字段1=值1,字段2=值2,...使用经典格式(常用)指定字段插入values插入的数据需要与表名后的字段对应insertintogirls.boys(id,boyName,userCP)values(6,"唐三",200)省略格式当插入的数据是全部字段时,可以省略表名后的字段。insertintogirls.boysvalues(6,"唐三",200)插入多行insertintogirls.boysvalues(6,"唐三",200),(8,"小五",300),(9,"小米",400)使用子查询结果为插入值insertintogirls.boys(boyName)selectgb.namefromgirls.beautygbwheregb.id>3另一格式这种格式很直观,但很啰嗦insertintogirls.boyssetid=7,boyName="李",userCP=300;
概述SQL的数据删除有两种:删除指定数据:单表,多表清空数据表格式单表删除deletefrom表where筛选条件多表删除(不常用)delete别名1,别名2from表1别名1join表2别名2on连接条件where筛选条件清空表truncattable表名;使用删除数据单表deletefromgirls.boyswhereid=6;多表deleteb,b2fromgirls.boysbjoingirls.beautyb2onb.id=b2.boyfriend_idwhereb.id=1;清空数据表使用很简单truncatetablespark.`user`;deletefrom表名;不加筛选条件,也能实现清空表
概述联合查询的本质就是,多个SQL查询结果的虚拟表上下合并。#第一个结果==================name|salary|--------|------|Steven|24000|Neena|17000|#第二个结果==================id|salary|--|------|1|24000|2|17000|#联合之后一个字段对应一个字段的这样合并==================name|salary|--------|------|Steven|24000|Neena|17000|1|24000|2|17000|格式select语句1unionselect语句2unionselect语句3...例子select的结果字段的个数需要一样union会对结果自动去重selectgby.id,gby.namefromgirls.beautygbyunionselectgbs.id,gbs.boyNamefromgirls.boysgbs=========================id|name|--|----------|1|柳岩|2|苍老师|3|Angelababy|4|热巴|11|夏雪|12|赵敏|1|张无忌|2|鹿晗|3|黄晓明|4|段誉|
概述分页一般使用查询,在网站使用过程中,一些数据需量太大,需要翻页显示,这是就需要SQL的分页查询。格式limitindex,sizeindex:起始索引(从0开始,从0开始获取可以省略)size:条目数select字段from表1[join表2on连接表达式][where表达式][groupby字段][having表达式][limit[index,]size];使用#获取工资第一页10条工资selectfirst_name,salaryfrommyemployees.employeeswheresalaryisnotnulllimit0,10;=========================first_name|salary|----------|------|Steven|24000|Neena|17000|Lex|17000|Alexander|9000|Bruce|6000|David|4800|Valli|4800|Diana|4200|Nancy|12000|Daniel|9000|技巧页数为page,每页条目数是size。可以有一个公式:limit(page-1)*size,size;