Mysql笔记.docx

上传人:b****1 文档编号:12729036 上传时间:2023-04-21 格式:DOCX 页数:23 大小:443.23KB
下载 相关 举报
Mysql笔记.docx_第1页
第1页 / 共23页
Mysql笔记.docx_第2页
第2页 / 共23页
Mysql笔记.docx_第3页
第3页 / 共23页
Mysql笔记.docx_第4页
第4页 / 共23页
Mysql笔记.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

Mysql笔记.docx

《Mysql笔记.docx》由会员分享,可在线阅读,更多相关《Mysql笔记.docx(23页珍藏版)》请在冰豆网上搜索。

Mysql笔记.docx

Mysql笔记

安装;基本命令

createtableclass(

stuint,

namevarchar(20),

ageint,

areavarchar(20)

);

createdatabase

showdatabases

dropdatabasetest

desctablestest//查看表结构

droptabletest

desctest

renametableatob//重命名表

库名不能改

insertintotest

(id,age,name)//指定列

values

(1,10,'zhang3');//单引号

setnamesgbk;//解决字符编码问题

insertintotest

(age,name)

values

(10,'张三');

updatetest

setage=111,

name='liujichai'

whereid=3;

列的默认值:

altertabletestaddage3tinyintnotnulldefault0;//取消null

删除

deletefromtest

whereid=2;

altertableydropcolumn列名//删除列

selectid,namefromtestwhereid>3;//select,列,where,行

添加列

altertabletestaddage1tinyint(3)zerofill;

createtableclass(

idintprimarykeyauto_increment,

agetinyint

)charsetutf8;

insertintotest

(age,name,age1)

values

(20,'小王',3);

整形

tinyint1字节

smallint2

mediumint3

int4

bigint8

tinyint(M)unsignedzerofill//零填充,无符号

浮点型

float(M,D)//m总位数,d小数位占用4或者8个字节

createtablegoods(

namevarchar(10)notnulldefault'',

pricefloat(6,2)notnulldefault0.00

)charsetutf8;

定点型

altertablegoodsaddmaxfloat(9,2)notnulldefault0.0;

altertablegoodsaddmindecimal(9,2)notnulldefault0.0;//定点型

insertintogoods

(min,max)

values

(12.1111111111,13.222222222);

字符型

createtablestu(

namechar(8)notnulldefault'',//定长,8个UTF-8字符,不够用空格补齐

aihaovarchar(10)notnulldefault''//变长,用1-2个字节来记录占用了多少个字节

)charsetutf8;

速度上,定长速度快char

text型字符不能创建索引

日期类型

date日期

time时间

datetime日期时间类型

year年类型1901-2155

createtabley(

yayear(4)

);

insertintoy//不指定表,默认插入所有列

values

('1901');

year类型,

输入一位

输入两位

‘00-69’表示2000-2069

‘70-99’表示1970-1999

date型

1992-08-12

日期时间日期

createtabled(

dtdata);

time类型hh:

mm:

ss

insertintoy(tm)values('12:

10:

23');

datetime类型1989-05-0614:

32:

05

时间戳

enum枚举型

set集合性

createtablet2(

genderenum('man','girl')

)charsetutf8;

charset

例题:

name:

char(3)

age:

tinyintunsigned

email:

varchar(30)

tel:

char(11)

intro:

varchar(100)

salary:

decimal(7,2)

riqi:

date

createtablewolf(

idintprimarykeyauto_increment,

namechar(3)notnulldefault'',

agetinyintunsignednotnulldefault0,

emailvarchar(30)notnulldefault'',

telchar(11)notnulldefault'',

salarydecimal(7,2)notnulldefault'2000-01-01',

riqidatenotnulldefault'2012-01-01'

)charsetutf8;

增删改查:

案例分析

增:

哪张表,哪列,值

insertintowolf(name,age,email,tel,riqi)

values(---);

主键值不能重复

insertintowolf

(name,age,tel)

values

('张飞',79,'66011123'),

('关羽',88,'66011124'),

('曹操',89,'66011125');//一次可以插入多行

updatewolfsetid=2name='wolf'where**//修该多个值

select*fromwolfwhere1;//这个1为逻辑值’真‘

删:

delete只能删除行,alter可以drop列

deletefromwolfwhere**//

查:

安装ecshop保留upload,重命名为ecshop

浏览器输入路径

localhost/ecshop

E:

\MySql\ECSHop\upload

localhost/E:

/MySql/Enviroment/PHPnow-1.5.4/MySQL-5.0.83/data/test

E:

\MySql\Enviroment\PHPnow-1.5.4\MySQL-5.0.83\data\test

列类型

数值型

整形tinyint,smallint,mediumint,intbigint

M,unsigned,zerofill

浮点型定点型float(m,d)unsigned,M精度,d小数位

decimal比float更精确

字符型

char(M)定长型,可存储的字符数

varchar(M),

日期时间类型

year1901-2155,两位数输入法,

dateyy-mm-dd,范围1000-1-1》》9999-12-31

timeHH:

mm:

ss范围-838:

59:

59->838:

59:

59

datetimeYY-MM-DDHH:

ii:

ss1000-01-01

开发中的问题

时间戳,方便计算,格式成不同的样式

建表语句

createtable表名(

列名称列类型【列属性】【默认值】

)engine引擎名charset字符集;

增:

insertinto表名

(列1,列2,列3)

values

(值1,值2,值3);

//如果不声明插入的列,则默认插入所有列

改:

update表名set列1=值1,列2=值2where表达式;//表达式

删:

deletefrom表名where表达式

查:

select*from表明

查询的5种子句:

where条件查询

groupby分组

having筛选

order,by排序

limit限制结果条数

一:

where

select列名from表名where行;

运算符

<小于|=或者<>不等于

in在某集合内between在某范围内

逻辑运算符

NOT或!

逻辑非OR或||逻辑或

AND或&&逻辑与

selectid,namefromwolfwhereidin(4,7,8);

selectid,namefromwolfwhereidbetween1and3;

selectid,name,telfromwolfwhereid>=6||id=1;

selectid,name,telfromwolfwhereid>2&&id<5;

select*fromwolfwhereid!

=4&&id!

=5;

select*fromwolfwhereidnotin(4,5);

模糊查询

select*fromwolfwherenamelike'te%';

通配符:

%任意字符

_单个字符

二:

groupby

max:

求最大min:

求最小sum:

求总和avg:

求平均count:

求总行数

selectmax(id)fromwolf;

selectid,name,max(price)fromwolfgroupbyage;//分组

selectid,name,count(*)fromwolfgroupbyage;//统计重复的行

要把列名当作变量名来看——

#selectid,price-age,namefromwolf;

#selectid,name,sum(age*price)fromwolfgroupbyage;//分别统计各个分组内的信息

selectid,name,market_price-shop_priceasshengfromgoods;

三:

having(筛选)

select*,age-idasttfromwolfwhereclass='A'havinttt>10//统计A类,

select*,sum(age)ashkfromwolfgroupbyclasshavinghk>30;//

查询两门及两门以上不及格同学的平均分

selectname,count

select姓名,avg(分数)fromstugroupby姓名;//列名不要用单引号,会出错

select*,sum(分数<60)fromstugroupby姓名;

select*,sum(分数<60)asgk,avg(分数)fromstugroupby姓名havinggk>=2

四:

orderby

select*,agefromwolforderbyage;

select*fromwolfwhereclass='A'orderbyage;//默认升序排列,

select*fromwolfwhereclass='A'orderbyagedesc;//desc说明,用倒叙排列

select*fromwolfwhereclass='A'orderbyageasc;//指明升序排列

select*fromwolfwhereclass='A'orderbyage,iddesc;//第一排序标准,第二排序标准

五:

limit

取价格最高的三个商品

limit放在最后有限制的作用,limit[offset],[N]//偏移量,取出条目

select*fromwolforderbyagedesclimit3,3;//排序向后偏移3位,取三个数

六i:

附加:

物种子句的使用陷阱

组内排序和组代表排序

如果有多种语句,按where,groupby,having,orderby,limit顺序写,否则语法错误

createtablegoodslikewolf;//表的列复制

insertintogoodsselect*fromwolforderbyagedesc;//内容的传递

truncategoods//清空表

良好的理解模型

where表达式,把表达式放在行中,看表达式是否为真

列,理解成变量,可以运算

取出结果,可以理解成一张临时表

select*,agefromwolfgroupbyclassorderbyagedesc;//错误,代表进行排序

selectid,name,max(age)fromwolfgroupbyclass;

七.子查询

where型子查询

from型子查询

exsts型子查询

1.where型(把内层的查询结果作为外层查询的比较条件)

select*fromwolforderbyagedesclimit1;//求最大age

selectid,name,classfromwolfwhereage=(selectmax(age)fromwolf);

2.from型:

把内层的查询结果当成临时表,供外层再次查询

selectid,name,agefromwolfwhereagein(selectmax(age)fromwolfgroupbyclass);

selectmax(id),agefrom(selectid,name,agefromwolfwhereagein(selectmax(age)fromwolfgroupbyclass))astmp;//把()内当作一张表

select姓名,count(*)fromstuwhere'分数'<60groupby姓名;

select姓名from(select姓名,count(*)asgkfromstuwhere'分数'<60groupby姓名havinggk>=2)astmp;

3.exists型把外层的查询结果拿到内层,看内层是否成立

mysql>selectid,name,agefromwolfwhereexists(select*fromwolfwhereage>

20);

链接:

union

一.selectunion用法union联合

合并查询结果

链接查询

左链接

右链接

内链接

列的增加与删除与修改

select*fromwolfwhereage>60orage<30;

select*fromwolfwhereage>60unionselect*fromwolfwhereage<30;//功能一样

union语法要求:

两次查询的列数一致(只要求列数一致)

union用的时候会自动合并重复的行(完全相同)

unionall;

如果union后句有orderby或limit用括号,否则会出错(句一)union(句2)

orderby,limit放在最后表示,及对最终结果做排序

在子句中orderby配合limit使用才有意义

createtableta(

idchar

(1),

numint

);

createtabletb(

idchar

(1),

numint

);

insertintota

values

('a',5),

('b',10),

('c',15),

('d',10);

insertintotb

values

('b',5),

('c',10),

('d',20),

('e',99);

mysql>selectid,numfrom(select*fromtaunionselect*fromtb)astmpgroupbyid;

union用的时候会自动合并重复的行

mysql>select*fromtaunionallselect*fromtb;//同样的行也会显示

mysql>(select*fromwolfwhereclass='A'orderbyagedesclimit2)union(select*fromwolforderbyiddesclimit2);

mysql>(select*fromwolfwhereclass='A'orderbyagedesclimit2)union(select*fromwolforderbyiddesclimit2)orderbyid;

mysql>(select*fromwolfwhereclass='A'orderbyagedesclimit2)union(select*fromwolforderbyiddesclimit2)orderbyiddesclimit2;

在子句中orderby配合limit使用才有意义,如果orderby不配合limit使用,会被语法分析器分析时去掉

二.链接查询

左链接右链接

集合set集合的特性:

无序性、唯一性、

理论上讲:

不可能存在完全相同的两个行,但是表中可以有完全相同的两行

因为,表内部有一个rowid(不可能重复)

select*fromta,tb;//ta和tb的排列组合

1.连接接上表

2.连接条件onjoin

如果字段名重复,添加表前缀

selectta.id,ta.numfromtbleftjointaonta.id=tb.id;

createtableboy(

namechar(3),

flowerchar(5)

);

insertintoboy

values

('林书豪','玫瑰'),

('刘翔','桃花'),

('周杰伦','茉莉花'),

('犀利哥','荷花');

('刘德华','狗尾巴花');

createtablegirl(

namechar(3),

flowerchar(5)

);

insertintogirl

values

('艾薇儿','玫瑰'),

('居里','桃花'),

('芙蓉','茉莉花'),

('凤姐','茉莉花'),

('林志玲','荷花');

找女友的活动

selectboy.*,girl.*fromboyleftjoingirlonboy.flower=girl.flower;

左链接:

以左表为准,去右表中找匹配数据,找不到用null补齐

右链接:

以右表为准,去左表中找匹配数据,找不到用null补齐

boyleftjiongirl<===>girlrightjoinboy;

推荐使用左链接代替使用右链接

三:

内链接(排除单身)

查询左右表都有的数据

selectboy.*,girl.*fromboyinnerjoingirlonboy.flower=girl.flower;

左链接和右链接的交集(内链接)

左链接和右链接的并集(mysql不能)外链接

三表链接查询

selectboy.*,girl.*from

boyinnerjoingirlonboy.flower=girl.flowerleftjoinwolfwolf.id=tb.id

(有共同项目,才能链接)

createtablem(

midintprimarykeyauto_increment,

hidint,

gidint,

mresvarchar(5),

matimedate

)charsetutf8;

insertintom

(hid,gid,mres,matime)

values

(1,2,'2:

0','2006-05-21'),

(2,3,'1:

2','2006-06-21'),

(3,1,'2:

5','2006-06-25'),

(2,1,'3:

2','2006-07-21');

createtablet(

tidint,

tnamevarchar(10)

)charsetutf8;

insertintot

values

(1,'国安'),

(2,'申花'),

(3,'传智');

t

+------+-------+

|tid|tname|

+------+-------+

|1|国安|

|2|申花|

|3|传智|

+------+-------+

m

+-----+------+------+------+------------+

|mid|hid|gid|mres|matime|

+-----+------+------+------+------------+

|1|1|2|2:

0|2006-05-21|

|2|2|3|1:

2|2006-06-21|

|3|3|1|2:

5|2006-06-25|

|4|2|1|3:

2|2006-07-21|

+-----+------+------+------+------------+

selecthid,mres,gid,matimefromm;

selecthid,tname,mres,gid,matimefrommleftjointonm.hid=t.tid;

selecthid,t1.tnameashname,mres,gid,t2.tnameasgname,matime

from

mleftjointast1

onm.hid=t1.tid

leftjointast2

onm.gid=t2.tid

wherematimebetween'2006-06-01'and'2006-07-01';

附加:

列的增加和修改

charset=utf8/gbk/

增加的列默认在最后面

一:

增加列

可以用after声明在哪一列后面

altertableboyaddagetinyintun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1