MySQL

来源:互联网 发布:mac svn 版本管理工具 编辑:程序博客网 时间:2024/05/08 12:27

MySQL
一.相关概念(最重要的)
1.什么是数据库?(什么叫数据data,数据库database,数据库管理系统DBMS(MySQL、DB2、SQL SERVER、Oracle、access、Sybase、vbasic,vfoxfro))
2.数据库的建模:层次模型(学校<学校--学院--系--专业--班级(教研组)>,网状模型(主要用于表非常少的情况,主要用于存储数据)),关系模型(最常用,冗余度最小),自定义模型
3.关系模型(表和表之间有联系)
(1)表的概念:描述的一个实体(集)或一个关系(类似于oop中的类class),抽象的。表的作用主要就是存储数据
表是一个标准的二维表(列:字段、属性   行:一行是一个整体 记录 元组)
(2)表和表之间的关系
<1>1:1 表A中有且仅有一条记录与表b中的一条记录相对应,反过来表B中的一条记录仅对应表a中的一条记录
<2>1:n 表A中有且仅有一条记录与表b中的多条记录相对应,反过来表B中的多条记录仅对应表a中的一条记录
<3>m:n 表A中一条记录与表b中的多条记录相对应,反过来表B中的一条记录与表a中的多条记录相对应(主键:创建在多个字段上)
(3)表之间关系的实现:通过关键字段(关键字,码,key)
主键(主要关键字段primary key):主键可以定义在一列或多列上,主键可以唯一的标识一行记录(不能为null并且记录不能有重复的)。
外键(外部关键字段foreign key):如果在表A中存在与表B的主键相对应的列,那么这一(些)列就可以叫做表A的外键。

(4)数据库开发流程
<1>需求分析
<2>数据库的逻辑实现(构思框架E-R图(实体-关系))
<3>数据库的物理实现(语句、工具做出数据库)
<4>优化

(5)怎么样评价一个数据库的好坏??
范式(nf):列不重,列不分(避免存在计算得到的列(age)),关系完整(主、外键)

二、建库
create database dbname
character set 字符集
collate 校验规则;

三、建表(字段的数据类型,建表的规则,约束)
use dbname
create table table_name
(col_name col_type not null auto_increment,col_name2 col_type default default_value,....,
primary key(col_name,...),unique (col_name,...)
);
alter table table_name//修改表
[add col_name type [first/after]]//添加列
[drop column col_name]//删除列
[change col_name col_newname new_type [default][first/after]]
[modify col_name new_type]//修改列的属性
add constraint con_name con_type[primary key/unique/foreign kye] col_name  (references tab_name(col_name))//添加约束

desc table_name;//显示表的结构
show create table tablename;//查看创建表的语句
show index from table_name;//查看表中索引(约束)信息
show tables;
show variables like "";//显示相关系统变量
四、数据的增、删、改
1.insert into table_name (col_name1,col_name2...)
values('','',..);//添加记录(注意:字符串或时间日期型数据需要加单引号,列的数量必须和值的数量相匹配,可以用到的值null,default,now()都可以作为values出现)
2.
update table_name
set col_name = value|表达式
where 修改的条件(条件用表达式来描述,运算符:算术(+-*/)、逻辑(! && || any some all)、关系(> < >= <= != = <>)、赋值(=)、位运算(~ & | ^ << >>)、字串匹配(like))

3.delete from table
where 删除的条件

五、数据查询
select [distinct(消除重复的行)] col_name,...(*所有列)  from table|view|function【table1 [inner|left|right|full]join table2 on 连接的条件】
[into new_table|file]
where 筛选的条件(对源数据)
group by 分组字段
having 筛选条件(对分组汇总的结果)
order by col_name1 ASC|DESC,....
limit num1(从0开始,可以省略(0)),num2(显示的行数)

(基本查询:选择指定列、选择所有列、添加注释列、使用运算列、重命名列标题(col_name as 标题);

高级查询:多表查询、分组汇总、嵌套查询(1.子查询返回值为单列单值 2.单列多值(any all some) 3.多列))

六、索引创建的规则
1.概念及作用?索引就是目录,作用就是提高查询速度。
2.创建索引的原则:
<1>在经常被查询到的列上创建索引(经常出现在where 子句中的列)
<2>在主键、外键经常会创建索引
<3>在重复值很多的列上不要创建索引(比如性别)
<4>在数据类型为text等存放信息较大的列上不去创建索引
<5>在值很少的表中不去创建索引
<6>当一个表的主要性能为存储数据时,没有必要创建索引。
3.如何创建索引
create [unique|fulltext|spatial] index index_name
on table(col_name ASC|DESC,...);

七、视图的创建(作用、通过视图实现数据的增、删、改、查)
1.概念:视图是一张虚拟表,基于表或视图。(通过select虚拟出来)
2.怎么样创建视图:
create view view_name
as
{select ....
}
with check option;//创建视图
alter view view_name
as{...}//修改视图
drop view view_name;//删除视图
3.通过视图操作数据:
操作过程和操作表数据的过程完全一样
本质:就是操作了表中的内容
with check option(检查选项)对新添加的数据进行检查,看看新增的数据是否满足视图定义的条件,如果不满足,不允许添加。如果没有这个选项则允许添加,数据添加到了基表当中,在视图中不显示。
注意:
如果要通过视图进行数据操作的话,视图定义的时候必须是基于一张表,并且不能包含group by子句,(运算列)
八、函数(内置、自定义)(流程控制语句)
在mysql中内置函数:聚合函数(用于分组汇总group by   sum、average、count(distinct col)、max、min)
普通函数(数学函数、字符串函数、时间日期函数、加密函数、流程控制函数)
自定义函数(变量的定义与使用:全局(set)、局部(declare))
create function fun_name(参数...)
retruns 函数返回值类型
begin
定义函数体
return 函数返回值
end
九、存储过程和触发器
1.概念:存储过程属于数据库的对象,存储在数据库中的一段子程序。
2.create procedure proc_name(IN|OUT|INOUT 参数名 参数类型)
begin
过程的内容
end
call proc_name(参数)---调用存储过程

3.触发器:触发器是一种特殊的存储过程。自动执行(有触发的条件:数据操作时《insert、update、delete》,触发的时机《before、after》),创建在表中的(依附表而存在)。
创建触发器(数据同步):
create trigger tri_name AFTER|BEFORE INSERT|UPDATE|DELETE
on table_name FOR EACH ROW
begin
触发器的内容
end