mysql数据库 详解
一、学习目录
1.认识数据库和mysql
2.mysql连接
3.入门语句
4.详解列类型
5.增删改查
INSERT INTO 表名(列1,…… 列n) VALUES(值 1,…… 值 n);
*(列1,…… 列n)允许不写,如果不写,则默认插入所有列
INSERT INTO 表名 VALUES(值 1,…… 值 n);
*VALUES 对应的值的输入顺序与表中字段顺序一致
改:
update 表名 set 列1 = 新值1, 列2 = 新值2, where expr
*改哪张表? 你需要给改哪几列的值? 分别改为什么值? 在哪些行生效?
删:
delete from 表名 where expr
*你要删哪张表的数据? 你要删掉哪些行?
查:
select 列1,列2,..列n from 表名 where expr
*查哪张表的数据? 你要选择哪些列来查询? 要选择哪些行?
6.查的5种子语句详解
7.连接查询
8.子查询
9.表引擎与字符集
10.索引与索引优化
11.触发器
12.事务
13.备份与恢复
二、入门语句
查看所有库
创建库
删除库
选择数据库
查看表
创建表
create table 表名 ( 列1 [列属性 默认值], 列2 [列属性 默认值], ..... 列n [列属性 默认值] ) engine = 存储引擎 charset = 字符集
删除表
改表名
三、详解列类型 之3大列类型
数值型(整型列,浮点型列)
字符型列
日期/时间类型
a.整型列存储范围与所占空间
b.整型列的可选属性
tinyint(M) unsigned zerofill
M: 宽度(在0填充的时候才有意义)
unsigned: 无符号类型(非负)
zerofill: 0填充,(默认无符号)
c.浮点型与定点型
float:浮点型 decimal:定点型 decimal更精确
float(M,D)
decimal(M,D) 6,2
M: 精度 (总位数,不包含点)
D: 标度 (小数位)
d.字符串类型
e.时期时间类型
f.特殊的NULL类型
NULL 不是假,也不是真,而是"空"
任何运算符,判断符碰到NULL,都得NULL
NULL的判断只能用is null,is not null
NULL 影响查询速度,一般避免使值为NULL
四、select 5种子句介绍
Where 条件查询
group by 分组
having 筛选
order by排序
limit 限制结果条数
五、连接查询
左连接 右连接 内连接
作用: 从2张或多张表中, 取出有关联的数据
①连接查询 之连接查询语法
左连接的语法. 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
②连接查询 之左右连接与内连接的区别
:左右连接可互换
:A left join B 等价于B right join A
内连接是左右连接的交集
: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中查询每个栏目下的最新帖子
七、存储引擎与字符集
学习目的:
出于速度和安全性的要求,选取合理的存储引擎.
考虑多语言与移植的问题,选取合理的字符集.
八、存储引擎是什么概念?
数据库对同样的数据,有着不同的存储方式和管理方式 在mysql中,称为存储引擎
①存储引擎与其特点
②存储引擎的选择
文章,新闻等安全性要求不高的,选myisam
订单,资金,账单,火车票等对安全性要求高的, 可以选用innodb
对于临时中转表,可以用memory型 ,速度最快
九、字符集 (charset)
一句话说字符集
字符集就是一个字符<->二进制字节的映射表
字符集是一套符号和编码的规则,不论是在 oracle 数据库还是在 mysql 数据库,都 存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期 需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推 荐在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。
①字符集的选择
1:节省空间 建议在能够完全满足应用的前提下,尽量使用小的字符集。 因为更小的字符集意味着能够节省空间、 减少网络传输字节数,同时由于存储空间的较小间接的提高了系统的性能。 有很多字符集可以保存汉字,比如 utf8、gb2312、gbk、gb18030 等等, 但是常用的是gb2312 和 gbk。 2:兼容性 因为 gb2312 字库比 gbk 字库小,有些偏僻字(例如:洺)不能保存,因此 在选择字符集的时候一定要权衡这些偏僻字在应用出现的几率以及造成的影响,
3:在互联网上,国际化的趋势不可避免,且存储空间已经越来海量化, 因此推荐用utf8,如果开发内网系统,如内部OA等,可以考虑GBK。
十、校对规则collate(了解即可)
一句话说校对规则 校对规则就是对字符集中的字符的"座次表"
请你给 A a B b C c D d 按升序排列
十一、字符集专题-彻底搞定乱码
客户端字符集 client
服务器存储,查询,比较时 用的字符集 (connection)
查询结果字符集 results
①字符集专题-新旧网站并存案例
十二、索引与优化 之索引是什么?
该字典前面的"目录"全部丢失 请找出'华'这个字来
如何快速找到某个字 可以给字典加目录 对数据库来说,索引的作用即是给 "数据"加目录
①索引与优化 之索引算法(了解)
设有N条随机记录,不用索引, 平均查找N/2次,那么用了索引之后呢
btree(二叉树)索引
hash(哈希)索引
②索引与优化 之索引的好处与坏处
好外:
加快了查询速度(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查看索引
十三、触发器
学习目标:
触发器的定义
触发器的应用场合
掌握触发器的创建语法
会创建简单触发器
①触发器定义
进行数据库应用软件的开发时, 我们有时会碰到表中的某些数据改变, 希望同时引起其他相关数据改变的需求, 利用触发器就能满足这样的需求。 它能在表中的某些特定数据变化时自动完成某些查询。 运用触发器不仅可以简化程序, 而且可以增加程序的灵活性。
触发器是一类特殊的事务 ,
可以监视某种数据操作(insert/update/delete), 并触发相关操作(insert/update/delete)
②触发器应用场合
1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。 比如,当一个订单产生时,订单所购的商品的库存量相应减少。
2.当表上某列数据的值与其他表中的数据有联系时。 比如,当某客户进行欠款消费, 可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。
3.当需要对某张表进行跟踪时。 比如,当有新订单产生时,需要及时通知相关人员进行处理, 此时可以在订单表上设计添加触发器加以实现
③触发器创建语法 之4要素
监视地点 (table)
监视事件 insert/update/delete
触发时间 after/before
触发事件 insert/update/delete
④触发器创建语法
创建触发器的语法
create trigger 触发器名称 after/befor (触发时间) insert/update/delete (监视事件) on 表名 (监视地址) for each row begin sql1; .. sqlN; end
⑤触发器引用行变量(1)
⑥触发器的删除
drop trigger triggerName
十四、事务 之事务的概念
思考: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上500元, 我给朋友转账50元(无手续费), 如果,我的钱刚扣,而朋友的钱又没加时, 网线断了,怎么办?
①事务 之事务的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;