MySQL学习总结2

7.Subquery

A subquery is a query in query.


(1)SELECT的返回值,作为输入或判断条件

INSERT INTO xxx SELECT * FROM yyy

WHERE xx=(SELECT xx )


(2)IN

WHERE xxx IN (SELECT xxx)

相对于(1)中只有一个属性相等,IN可以匹配多个满足()里条件的属性


(3)EXIST/NOT EXIST

和(2)的功能是差不多的,只是不需要指出满足条件的xxx属性,而是把条件都放在()中

WHERE EXIST (SELECT FROM WHERE)

其实就是有2个WHERE然后可以搜索两个table,而这个功能只需要在最开始的FROM中填2个teble便可以直接用WHERE实现该功能


8.Constraints


①NOT NULL


②UNIQUE

取值如果是非空的话,不能有相同值。但是如果是NULL的话,可以重复。


③PRIMARY KEY

PRIMARY KEY = NOT NULL + UNIQUE


④FOREIGN KEY

What:一个表中的FOREIGN KEY指向另一张表中的PRIMARY KEY , 它是两张表之间的引用关系。

Statement: FOREIGN KEY(name) REFERECES table (another name)

Effect:不能像一张表中插入一个PRIMARY KEY 条目,如果该条目没有在被引用的table中出现。


⑤ ENUM

只有有限的取值


⑥SET

只有有限的取值,但可以同时有多个值


9.Exporting/Importing


①文件/csv

SELECT * FROM XXX INTO OUTFILE '地址/文件名' ;   注:如果文件名不要后缀就是文件类型,如果txt就是文本文件,其实一样。

LOAD DATA INFILE ‘地址/文件名’ INTO TABLE XXX;

注2:MySQL里面的地址分隔符是/不是\如果用错会出错。


csv文件是以逗号隔开的文件,使用于多种应用程序的导入,比如excel就能读取这种文件。

所以在导出/导入csv文件的时候要加一句FIELD TERMINATED BY ‘,’;


SELECT * FROM XXX INTO OUTFILE ‘地址/文件名.csv’

FIELDS TERMINATED BY ',';


LOAD DATA INFILE ‘地址/文件名.csv’ INTO TABLE XXX

FIELDS TERMINATED BY ',';

注3:在导出的时候要用root才有权限,即使这样也不能随便导出,我导出到桌面就不行,导入到E盘这些就行。


②xml

$ mysql -u root -p --xml -e 'SELECT * FROM mydb.XXX' > 地址/文件名.xml

mysql> LOAD XML 地址/文件名.xml INTO TABLE XXX ;


③.sql

这个是使用mysqldump命令来完成整个数据库的备份,备份为一个sql文件。

后面用到的stored routines(可以理解为我们自定义的函数)用sql导入也很方便。


$ mysqldump -u root -p 数据库名字 > 备份文件名.sql

mysql> source 备份文件名.sql


这个mysqldump备份的文件是保存在cmd窗口的当前路径的,即一般进入时的C:\Users\Administrator下面。

它的source命令应该就是在该目录下寻找,也许你可以看看给出绝对路径看看能不能找到。


10.Joining tables


①from后面用逗号连接两个table

这种就相当于笛卡尔积,即对于table1中的每一项,在table2中选出每一项,组成M*N项元组,然后再由where选择,再由select呈现。

这个其实和②里面的 cross join是一样的。


②from后面用join来连接两个table

有关join的具体内容在这个帖子里面讲滴很明白:http://blog.youkuaiyun.com/hu330459076/article/details/6995308

我将它转载过来。

连接类型

定义

 

Inner Join

内连接是最常见的一种连接,它也被称为普通连接,只连接匹配的行(仅对满足连接条件的CROSS中的列)。它又分为等值连接(连接条件运算符为"=")和不等值连接(连接条件运算符不为"=",例如between...and)。

 

Outer Join

Full Outer Join

包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

Left Outer Join

包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行

Right Outer Join

包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

 

Cross Join

笛卡尔乘积(所有可能的行对),交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。

 

 

Appendix

Natural Join

自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉;而等值连接不会去掉重复的属性列。

Self Join

某个表和其自身连接,连接方式可以是内连接,外连接,交叉连接

 

Inner Join:

Select * from t1,t2 where t1.id=t2.c1

Select * from t1 inner join t2 ont1.id=t2.c1

Select * from t1,t2 where t1.id between 1and 4;

 


Full Outer Join:

Select * from t1 full outer join t2 ont1.id = t2.c1



Left Outer Join

Select * from t1 left outer join t2 ont1.id =t2.c1;



Right Outer Join

Select * from t1 right outer join t2 ont1.id =t2.c1;



Cross Join

Select * from t1 cross join t2;

 

Natural Join (t1和t3表都有id列并且数据类型一样)

Select * from t1 naturaljoin t3;


Self Join

Select * from t1 as t1_s, t1;


但是要注意以下几点内容。

注:(1)凡是使用join以后,表示条件就不能用where了。

可以用on或者是using(相同的属性名)。

on和where用法上是差不多的。

using(相同的属性名)会选出对应有相同属性名且取值相同的项,而且显示时会把两个表中的相同属性合并成1列,而on即使有相同属性仍旧显示2列。

(2)在MySQL中

natural join会自动匹配具有相同属性相同取值的项,但是如果没有相同属性,它就相当于是一个cross join

innner join如果没有加on或者using的条件默认也是cross join生成M*N项。

而如果在cross join后面加on的条件,默认就变成inner join了。


11.MySQL funtions

这个没什么好说的,一共有5种类型的内置函数,都是通过select 函数来调用的,这里只列出5种类型。

①Math

②Aggregate

③String

④Date&time

⑤System

注:Aggregate是统计函数的意思,比如最大,最小,平均,标准差,方差这种。


12.Views

这个内容主要是理解view是什么,我的理解是就是对于table的引用,还是通过create来生成,

来自于table的select的结果。

其作用是提高安全性。

当其对应的table消失后它也就跟着消失,当对应table update后它会不会update我还没有试验。


13.Transactions

重要的也是理解概念,它就是一个操作块,这个操作块里面有若干操作,这个操作块满足ACID性质。

作用就是对于高并发性,以及一些重要信息确保操作的安全性。

ACID

A:atomicity,操作块中的操作要么全部成功要么都不成功,称为原子性。

C:consistency,对于一条元组必须是完整的。

I:isolation,针对并发操作的对于同一数据的访问性质,分为多个级别。

D:durability,针对系统失效以后对于已提交信息的恢复能力。


两个操作,commit与roll back

commit:提交,将修改同步到数据库server,也就是说这时你的修改对于其他client才是可见的。

在非transaction的命令中,系统是默认autocommit的,自动提交。

而transaction操作块需要手动输入commit;


roll back:回滚。与提交对应,撤回修改。


在tansaction的最后要么是commit命令要么是roll back。


14 Stored routines

说穿了就是自定义的函数。分为两种:procedure和function

procedure对应于没有返回值的,相当于void f()。调用它的命令是CALL xxx

function是由返回值的。调用它的命令是SELECT xxx

一般它们的定义都是采用.sql文件,

之前有提到备份数据库也是备份为.sql文件,实际上你打开它就会知道备份的那些命令是什么了,只是那是系统生成的命令,

这里要我们自己定义。

定义好后,source 文件名.sql便导入了,然后就可以调用了。


注:虽然procedure本身不会有返回值,但是它可以有参数,我们可以讲运算结果放入某个参数,然后再手动访问它看结果,

而且,我们可以在proceduire里面调用select等一些返回参数的东西返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值