【mySql-刘道成】


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;


时间: 2024-10-12 04:06:54

【mySql-刘道成】的相关文章

IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培训视频课程:http://pan.baidu.com/s/1pJ7FPXp 老方块Oracle培训全套课程:http://pan.baidu.com/s/1gdkpHxL Mysql培训课程:http://pan.baidu.com/s/1c0vliMW Oracle数据库性能优化实务课程视频+源码

IT视频课程集

马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培训视频课程:http://pan.baidu.com/s/1pJ7FPXp 老方块Oracle培训全套课程:http://pan.baidu.com/s/1gdkpHxL Mysql培训课程:http://pan.baidu.com/s/1c0vliMW Oracle数据库性能优化实务课程视频+源码

[转]百度云视频(希望我和大家一起进步)

马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培训视频课程:http://pan.baidu.com/s/1pJ7FPXp 老方块Oracle培训全套课程:http://pan.baidu.com/s/1gdkpHxL Mysql培训课程:http://pan.baidu.com/s/1c0vliMW Oracle数据库性能优化实务课程视频+源码

好的学习材料

★论坛视频篇(此部分用于收集发布2014各大网的VIP收费视频教程,每年为一周期,不定期修复失效或更新,大家如若发现失效或有资源分享可以发邮件或本帖回复我!)272.老男孩Linux.shell.RHCE运维初中高级50G全套培训视频教程(解压密码为看雪论坛首页)链接:http://pan.baidu.com/s/1gdBs6gN 密码:ac4p 299.一洋淘宝2014最新培训教程(全套16个模块)—价值2980元!(解压密码为看雪论坛首页)链接:http://pan.baidu.com/s/

全中国最穷的小伙子发财日记

一本被评价为“迎合了时代需求,直抵中国3亿草根青年神经最敏感之处”的<全中国最穷的小伙子发财日记>3月30日出版.这是一部日记体形式的小说,由曾经是落魄青年,现在成了富翁的“重庆老康”撰写,融合了重庆老康自己和周围朋友的创业经历.该书曾是天涯网热帖,此次由读客图书出版,据出版方介绍,首印即高达30万册. 重庆老康曾经落魄到快混成犀利哥了,于是他开始全面分析自己糟糕的人生,决定从身边着手,去寻找最小最近的机会,老老实实,深入一行.据出版方介绍,身无分文的重庆老康经过三年奋斗,现在拥有一家独资公司

mysql的三大范式解释——转载知乎刘慰老师

作者:刘慰链接:https://www.zhihu.com/question/24696366/answer/29189700来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 国内绝大多数院校用的王珊的<数据库系统概论>这本教材,某些方面并没有给出很详细很明确的解释,与实际应用联系不那么紧密,你有这样的疑问也是挺正常的.我教<数据库原理>这门课有几年了,有很多学生提出了和你一样的问题,试着给你解释一下吧.(基本来自于我上课的内容,某些地方为了不过于啰嗦

MySQL常用查询语句(23个)

一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,=< 二查询字符串 SELECT * FROM tb_stu  WHERE sname  =  '小刘' SELECT * FROM tb_stu  WHERE sname like '刘%' SELECT * FROM tb_stu  WHERE sname like '%程序员' SELECT * F

python3 mysql 多表查询

python3 mysql 多表查询 一.准备表 创建二张表: company.employee company.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male'

Python 3 mysql 简介安装

Python 3 mysql 简介安装 一.数据库是什么 1.  什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数字模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并且可为各种用户共享. 2.什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中

MySQL阶段二——sql语句基础(2)

数据查询操作 01.创建数据表 (02-05练习) (连接查询练习使用) 02.单表查询 03.分组统计 04.嵌套查询 05.集合查询 06.连接查询 07.连接查询与集合查询的不同 数据查询操作 01.创建数据表 1)创建Student表 (2)创建Course表 (3)创建SC表 (02-05练习) create table student (    sno char(8) primary key,    sname char(8),    ssex char(2)not null,