【mySql-ldc】

mysql数据库


 

1:认识数据库&mysql(1)

 

1:数据库服务器为我们提供数据存储服务

 

2:常用的数据库服务器:

 

  商业:oracle, SQLserver,DB2

 

  开源:MySQL,postgreSQL,SQLite

 

 

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。

 

 

 

在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.

 

对于Mysql的前途,没有任何人抱乐观的态度.

 

 

 

目前 MySQL被广泛地应用在Internet上的中小型网站中。

 

由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,

 

许多中小型网站为了降低网 站总体拥有成本而选择了MySQL作为网站数据库。

 


2:mysql连接

 

 


详解列类型 之3大列类型

 

 

1.数值型(整型列,浮点型列).

2.字符型列

3.日期/时间类型


 

整型列存储范围与所占空间

 

 

 


 

整型列的可选属性

 

 

tinyint(M) unsigned zerofill

M: 宽度(在0填充的时候才有意义)

unsigned: 无符号类型(非负)

zerofill: 0填充,(默认无符号)


 

 

浮点型与定点型

 

 

float(M,D)

decimal(M,D) 6,2

 

M: 精度 (总位数,不包含点)

D: 标度  (小数位)


 

 

字符串类型

 

 


时期时间类型

 

 


特殊的NULL类型

 

 

NULL 不是假,也不是真,而是"空"

任何运算符,判断符碰到NULL,都得NULL

NULL的判断只能用is null,is not null

NULL 影响查询速度,一般避免使值为NULL


 

 

建表语句

 

 

create table 表名 (

列1 [列属性 默认值],

列2 [列属性 默认值],

.....

列n [列属性 默认值]

)

engine = 存储引擎

charset = 字符集


 

增删改查 之增 insert 语法

 

 

 

INSERT INTO  表名(列1,……  列n)  VALUES(值 1,……  值 n);

 

 

列1,……  列n: 允许不写,如果不写,则默认插入所有列

见下例:

INSERT INTO  表名  VALUES(值 1,……  值 n);

VALUES 对应的值的输入顺序与表中字段顺序一致


增删改查 之改 update 

 

 

update 表名 set

列1 = 新值1,

列2 = 新值2,

where expr

改哪张表?

 

你需要给改哪几列的值?

 

分别改为什么值?

 

在哪些行生效?


增删改查 之改 delete 

 

 

delete from 表名

where expr

你要删哪张表的数据?

 

你要删掉哪些行?


增删改查 之改 select 语法

 

 

select  列1,列2,..列n from 表名

where expr

查哪张表的数据?

 

你要选择哪些列来查询?

 

要选择哪些行?


select 5种子句介绍

 

 

Where 条件查询

group by 分组

having 筛选

order by 排序

limit 限制结果条数


 

 

select 5种子句 之where介绍

 

 

where expression

用法:expression为真,则该行取出

 

运用场合

各种条件查询场合,如按学号查学生,按价格查商品,按发布时间查新闻等
 
 
 

select 5种子句 之where常用运算符

 

select 5种子句 之where 匹配

 

 

like 模糊匹配

% 通配任意字符

_ 通配单一字符


 

select 5种子句 之group与统计函数

 

 

 

max : 求最大

min : 求最小

sum : 求总和

avg : 求平均

count:求总行数


 

select 5种子句 之group介绍

 

 

group by

作用:把行 按 字段 分组

语法:group by col1,col2,...colN

运用场合
常见于统计场合,如按栏目计算帖子数,

  统计每个人的平均成绩等.


 

select 5种子句 之having介绍

 

 

having与where异同点

 

having与where类似,可筛选数据

where后的表达式怎么写,having就怎么写

 

where针对表中的列发挥作用,查询数据

having针对查询结果中的列发挥作用,筛选数据


 

select 5种子句 之order by 

 

 

Order by 排序功能

按一个或多个字段对查询结果进行排序

知识点在本项目案例的运用

对栏目的商品按价格由高到低或由低到高排序

知识点的运用场合描述
各种排序场合,如取热点新闻,发帖状元等


 

select 5种子句 之order排序

 

Order by 排序功能

按一个或多个字段对查询结果进行排序

用法:order by col1,col2,col3

知识点的运用场合描述
各种排序场合,如新闻按点击量排序,
商品按价格排序等

默认排序:升续排列


select 5种子句 之limit 介绍

 

 

Limit 限制条数

limit [offset,] N,限制结果取N条

用法: limit [偏移量,],取出条目

知识点的运用场合描述
分页应用中最为典型,如第1页取1-20条,第2页取21-40条.


 

连接查询语法

 

 

左连接的语法.

Select Ltable.* ,Rtable.* from

 Ltable left join Rltable

 on Ltable.colName = Rtable.colName

内连接的语法.

Select Ltable.* ,Rtable.* from

Ltable inner join Rltable

on Ltable.colName = Rtable.colName 


 

左右连接与内连接的区别

 

 

1:左右连接可互换

A left join B 等价于B right join A

 

2:内连接是左右连接的交集

 

3:mysql没有外连接


 

子查询

 

 

子查询就是在原有的查询语句中,

嵌入新的查询,来得到我们想要的结果集。

一般根据子查询的嵌入位置分为,

where型子查询,from型子查询


 

where型子查询

 

where型子查询即是:   把内层sql语句查询的结果作为外层sql查询的条件.

 

典型语法:

select * from tableName

where colName = (select colName from tbName where ....)

{where colName in (select colName from tbName where ..)}

 

典型案例:

 

1:查询最新的一条商品

 

2:查询出某大栏目下的所有商品


 

exists型子查询

 

 

exists即:外层sql查询所查到的行代入内层sql查询,要使内层查询能够成立

查询可以与  in型子查询互换,但效率要高.

典型语法:

select * from tablename

where exists(select * from tableName where ...)

 

典型案例:

 

1:查询出某大栏目下的所有商品


 

from型子查询

 

 

from型子查询即:把内层sql语句查询的结果作为临时表供外层sql语句再次查询.

典型语法:

select * from (select * from tableName where ...) where....

典型案例:

1:查询出每个栏目下的最新商品

2:BBS中查询每个栏目下的最新帖子


 

存储引擎是什么概念?

 

 

设有张马虎,李小心两人,都是地铁口的自行车管理员.

每天都有很多人来存取自行车,张马虎的管理方式是:来存自己存,不记录存的是什么车,取时交5毛,也不检查取的是否是自己的车.

李小心呢,则在存取自己车时,记录存车人的特征与自行车的特征,当人来取车,还要小心核一下,人与车的特征是否对应

 

思考:

张马虎和李小心谁对业务的处理速度更高?

二者谁对自行车管理更安全?

数据库对同样的数据,有着不同的存储方式和管理方式

在mysql中,称为存储引擎


 

存储引擎与其特点

 

 

 


存储引擎的选择

 

 

文章,新闻等安全性要求不高的,选myisam

 

订单,资金,账单,火车票等对安全性要求高的,

可以选用innodb

 

对于临时中转表,可以用memory型 ,速度最快


 

字符集 (charset)

 

 

一句话说字符集

字符集就是一个字符<->二进制字节的映射表

 

字符集是一套符号和编码的规则,不论是在 oracle 数据库还是在 mysql 数据库,都

 

存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期

 

需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推

 

荐在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。


 

字符集的选择

 

 

1:节省空间

建议在能够完全满足应用的前提下,尽量使用小的字符集。

因为更小的字符集意味着能够节省空间、

减少网络传输字节数,同时由于存储空间的较小间接的提高了系统的性能。

有很多字符集可以保存汉字,比如 utf8、gb2312、gbk、gb18030 等等,

但是常用的是gb2312 和 gbk。

2:兼容性

因为 gb2312 字库比 gbk 字库小,有些偏僻字(例如:洺)不能保存,因此

在选择字符集的时候一定要权衡这些偏僻字在应用出现的几率以及造成的影响,

 

3:在互联网上,国际化的趋势不可避免,且存储空间已经越来海量化,

因此推荐用utf8,如果开发内网系统,如内部OA等,可以考虑GBK。


校对规则collate

 

 

一句话说校对规则

校对规则就是对字符集中的字符的"座次表"


 

 

字符集专题-彻底搞定乱码

 

 


 

索引与优化 之索引是什么?

 

 

如何快速找到某个字

可以给字典加目录

对数据库来说,索引的作用即是给

"数据"加目录


索引与优化 之索引算法

 

 


索引与优化 之索引的好处与坏处

 

 

好外:

加快了查询速度(select )

 

坏处:

降低了增,删,改的速度(update/delete/insert)

增大了表的文件大小(索引文件甚至可能比数据文件还大)


 

索引与优化 之索引的使用原则

 

 

 

*不过度索引

*索引条件列(where后面最频繁的条件比较适宜索引)

*索引散列值,过于集中的值不要索引

例如:给性别"男","女"加索引,意义不大


 

索引与优化 之索引类型

 

 

普通索引  (index)

主键索引  (primary key)

唯一索引  (unique)

全文索引  (fulltext)


 

索引与优化 之索引创建语法(1)

 

 

建表时直接声明索引:

create table tableName (

列1 列类型 列属性,

....

列N 列类型 列属性,

primary key(列名),

index (列名),

unique(列名),

fulltext(列名)

)engine xxxxx  charset xxxx


 

索引与优化 之索引创建语法(2)

 

 

 

通过修改表建立索引

alter table add index (列名);

alter table add unique (列名);

alter table add primary key(列名);

alter table add fulltext (列名); 


 

索引与优化 之索引删除语法

 

 

 

删除主键:

alter table drop primary key

删除其他索引:

alter table drop index 索引名

 

注:索引名一般是列名,如果不是,

可通过show index from tableName查看索引


 

触发器定义

 

 

 

进行数据库应用软件的开发时,

我们有时会碰到表中的某些数据改变,

希望同时引起其他相关数据改变的需求,

利用触发器就能满足这样的需求。

它能在表中的某些特定数据变化时自动完成某些查询。

运用触发器不仅可以简化程序,

而且可以增加程序的灵活性。


 

触发器应用场合

 

 

1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。

比如,当一个订单产生时,订单所购的商品的库存量相应减少。

 

2.当表上某列数据的值与其他表中的数据有联系时。

比如,当某客户进行欠款消费,

可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。

 

3.当需要对某张表进行跟踪时。

比如,当有新订单产生时,需要及时通知相关人员进行处理,

此时可以在订单表上设计添加触发器加以实现


 

触发器创建语法 之4要素

 

 


触发器创建语法

 

 

创建触发器的语法

create trigger 触发器名称

after/befor (触发时间)

insert/update/delete (监视事件)

on  表名 (监视地址)

for each row

begin

sql1;

..

sqlN;

end


 

触发器的删除

 

 

drop trigger triggerName


 

事务 之事务的ACID特性

 

 

 

原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。

数据库事务的不可再分的原则即为原子性。

组成事务的所有查询必须:

要么全部执行,要么全部取消(就像上面的银行例子)。

一致性(Consistency):指数据的规则,在事务前/后应保持一致

隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.

持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消


 

事务 之事务的用法

 

开启事务(start transaction)

执行sql操作(普通sql操作)

提交/回滚(commit/rollback)

注意:建表的时候,

选择 innodb引擎


 

备份命令

 

 

备份单独库下面的所有表的方法

mysqldump -uuname -ppasswd dbname > /dir/filename

 

备份某一库下面的几个表的方法

mysqldump -uuname -ppasswd dbname table1 table2.. tableN  >

/dir/filename

 

备份多个库的方法

mysqldump -uname -ppasswd -B db1 db2 > /dir/filename

 

备份所有库的方法

mysqldump -uname -ppasswd -A > /dir/filename 


 

恢复命令

 

1:在命令行操作

mysql -uuname -ppasswd [databaseName]< /dir/filename

 

2:登陆mysql后source操作

mysql> use dbname;

mysql> source /dir/filename;


 

 

posted @ 2016-05-02 14:18  pipi-changing  阅读(255)  评论(0编辑  收藏  举报