巫溪网站建设企业网站建设文案
MySQL基础
 1、安装
    1)设置编码
    2)设置密码
 2、配置文件:my.ini、my.cnf
    1)设置端口号
      port=3306
    2)设置编码
     default-character-set=utf8character-set-server=utf8 
    3)存储引擎 
  default-storage-engine=INNODB 
    4)最大连接数
     max_connections=100 
    注意:重启mysql服务
 3、登陆mysql数据库
   mysql -h 主机地址 -u 用户名 -p密码mysql -u 用户名 -p密码mysql -u 用户名 -p 
    问题:"mysql"不是系统内部或外部命令....
    解决:将mysql的bin目录配置到系统的path环境变量中
          变量名:Path
          变量值:adsfasdfasd;D:\mysql\bin
 4、设置客户端窗口的编码
   set names gbk; 
 5、查看mysql编码
show variables like 'character%'; 
 6、查看现存的所有库
show databases; 
 7、进入库(使用库)
use 库名; 
 8、查看现存的所有表
show tables; 
 9、查看表结构
desc 表名; 
 10、建库
create database 库名;
create database 库名 character set=utf8; 
 11、删除库
    drop database 库名; 
 12、建表
    create table 表名(字段名  数据类型  约束,字段名  数据类型  约束,字段名  数据类型  约束); 
 13、数据类型
    int  float  char  varchar  text   timestamp  enum 
 14、约束
    primary keyforeign keynot nullnulluniquedefaultauto_increment 
 15、修改表结构
     1)修改表名
   alter table 表名 rename to 新表名; 
     2)添加字段
     alter table 表名 add column 字段名 数据类型 约束;alter table 表名 add 字段名 数据类型 约束; 
     3)删除字段
      alter table 表名 drop column 字段名;alter table 表名 drop 字段名; 
     4)修改字段
alter table 表名 change 原字段名 新字段名 数据类型 约束; 
 16、删除表
    drop table 表名; 
 17、添加记录
    insert into 表名(字段...)values(值...); 
 18、修改记录
    update 表名 set 字段=值,字段=值...;update 表名 set 字段=值,字段=值... where 条件; 
 19、删除记录
    delete from 表名;delete from 表名 where 条件; 
 20、清空表
    delete from 表名;     不恢复id  慢   可恢复   支持事务truncate table 表名;  恢复id    快   不恢复   不支持事务 
 21、普通查询
    select * from 表名;select 字段,字段... from 表名; 
 22、条件查询
select * from 表名 where 条件; 
 23、排序
    select * from 表名 order by 字段;#升序select * from 表名 order by 字段 desc;#降序select * from 表名 where 条件 order by 字段; 
 24、分组
select * from 表名 group by 字段; 
 25、聚合查询
    select count(*) from 表名 where 条件;select sum(字段) from 表名 where 条件;select avg(字段) from 表名 where 条件;select max(字段) from 表名 where 条件;select min(字段) from 表名 where 条件; 
 26、分页查询
    select * from 表名 limit 起始值,条数;select * from 表名 where 条件 order by 字段 limit 起始值,条数; 
 27、模糊查询
 select * from 表名 where 字段 like '%_内容'; 
     通配符
     %:任意长度的任意字符
     _:任意一个字符
     1)查询所有姓张的学生
      select * from 学生表 where 姓名 like '张%'; 
     2)查询所有姓张的学生,但名字必须是两个字
    select * from 学生表 where 姓名 like '张_'; 
     3)查询所有学生,但姓名中必须有"小"字
  select * from 学生表 where 姓名 like '%小%'; 
多表查询
 子查询(嵌套查询)
 1)子查询出现where中,充当条件
  select * from 表名 where 字段 in (select语句); 
 2)子查询出现在*中,充当字段
 select 字段,字段,(select语句) from 表名; 
例子:子查询出现在where中,充当条件
 1、查询"国际新闻"下的所有新闻
   select * from newsArticleswhere typeId in (select typeId from newsTypes where typeName='国际新闻'); 
 2、删除typeId=3的所有分类
   delete from reviews where articleId in (select articleId from newsArticles where typeId=3);delete from newsArticles where typeId=3;delete from newsTypes where typeId=3; 
例子:子查询出现在*位置,充当字段
 歌手表:userId、userName、age....
 演唱会表:id、userId、name、时间、地点...
 查询结果:userId、userName、age...演唱会的次数
selectuserId,userName,(select count(*) from 演唱会表 where 演.userId=歌.userId)from 歌手表; 
 ---------------
select typeId,typeName,(select count(*) from newsArticles a where a.typeId=b.typeId) as newsCountfrom newsTypes b; 
内连接:将多张表的结果集,合为一个结果集(合并字段)
select * from 表1 inner join 表2 on 关联的字段相等;
select * from 表1,表2,表3... where 关联的字段相等; 
 外连接:将多张表的结果集,合为一个结果集(合并字段)
 1、左外连接:以左表为主、右表为副
  select * from 表1 left outer join 表2 on 关联的字段相等; 
 2、右外连接:以右表为主、左表为副
   select * from 表1 right outer join 表2 on 关联的字段相等; 
多表查询
 1、子查询:显示的只是一张表中的数据(被动)
 2、内连接:合并字段
 3、外连接:不用
 -----------------------------------------------------------
 MySQL高级
 1、视图
 2、触发器
 3、存储过程
 4、T-SQL编程
 5、索引
 6、存储引擎
 7、事务
 8、备份与还原
 -----------------------------------------------------------
 视图View:简化查询语句
创建视图
create view 视图名
as
select语句; 
create view myview
as
select articleId,typeName,title,content from newsArticles a,newsTypes b where a.typeId=b.typeId; 
 修改视图
alter view 视图名
as
select语句; 
 查看视图
 1、查看当前库中现存的表
   show tables; 
 2、information_schema库->views表
select table_schema,table_name from information_schema.views; 
 使用视图:把视图当表用
select * from 视图名 where 条件 order by 字段 limit 起始值,条数;
select * from myview;
select articleId,typeName,title from myview; 
建议:只对视图执行查询操作
 删除视图
 1、删除视图所在的库
drop database 库名; 
 2、删除视图
drop view 视图名; 
 视图知识点
 1、作用
 2、创建、修改、查看、使用、删除
 视图注意:
 1、视图中只能存放select查询语句
 2、建议只对视图执行查询操作
 视图的使用场合
 一个复杂的查询语句经常使用
 -----------------------------------------------------------
 触发器Trigger:数据库中的事件
作用:当用户对表进行增、删、改操作的同时,是否要执行其他操作
触发器的执行时间
 before:当用户对表进行增、删、改之前,先调用触发器,后执行增、删、改操作
 after:当用户对表进行增、删、改之前,先执行增、删、改操作,后调用触发器
触发器的类型
 insert:当对表进行insert操作时,系统将自动调用触发器
 update:当对表进行update操作时,系统将自动调用触发器
 delete:当对表进行delete操作时,系统将自动调用触发器
修改mysql语句的定界符
delimiter 符号 
 创建触发器
delimiter //
drop trigger if exists 触发器名//
create trigger 触发器名
before|after  insert|update|delete
on 表名
for each row
beginsql语句;sql语句;sql语句;
end//
delimiter ; 
 删除触发器
 1、删除触发器所在的库
 2、删除触发器所施加的表
 3、删除触发器
   drop trigger 触发器名; 
 查看触发器:information_schema库->triggers表
select * from information_schema.triggers;
select trigger_schema,trigger_name from information_schema.triggers; 
 例子:修改bbsInfo表中的记录,触发器自动向userInfo添加一条记录
delimiter //
drop trigger if exists updateBbs//
create trigger updateBbs
after update
on bbsInfo
for each row
begininsert into userInfo(userName,password,age)values('tom','111',30);
end//
delimiter ;update bbsInfo set clickTimes=100 where bbsId=3; 
例子:统计表功能
create table bumen
(bmId   int    auto_increment primary key,bmName  varchar(20) not null
);
create table employee
(empId  int   auto_increment primary key,userName varchar(20) not null,tel  varchar(20) not null
);
create table tongji
(bmCount int default 0,#记录部门总数empCount int default 0#记录员工总数
);
insert into tongji values(0,0); 
 部门表添加记录的触发器
delimiter //
drop trigger if exists addBm//
create trigger addBm
after insert
on bumen
for each row
beginupdate tongji set bmCount=bmCount+1;
end//
delimiter ; 
部门表删除记录的触发器
delimiter //
drop trigger if exists delBm//
create trigger delBm
after delete
on bumen
for each row
beginupdate tongji set bmCount=bmCount-1;
end//
delimiter ;insert into bumen(bmName)values('开发部');
insert into bumen(bmName)values('测试部');
insert into bumen(bmName)values('市场部');
delete from bumen where bmId=3; 
 触发器知识点
 1、作用
 2、创建、查看、删除
 触发器注意
 1、一个触发器最多只能有一个类型
 2、一个触发器只能监听一张表的操作
 3、触发器由系统自动来调用
 4、触发器没有参数、没有返回值
 ----------------------------------------------------------
 存储过程Procedure:自定义函数
特点:
 1、一次编写,多次调用
 2、有参数
 3、有返回值
创建存储过程
delimiter //
drop procedure if exists 存储过程名//
create procedure 存储过程名()
beginsql语句;sql语句;sql语句;
end// 
 调用存储过程
call 存储过程名(值,值...); 
 删除存储过程
 1、删除存储过程所在的库
 2、删除存储过程
 drop procedure 存储过程名; 
 查看存储过程:mysql库->proc表
select * from mysql.proc;
select db,name from mysql.proc; 
 例子一:查询bbsInfo表的记录
delimiter //
drop procedure if exists getBbsInfo//
create procedure getBbsInfo()
beginselect * from bbsInfo;
end//
delimiter ;call getBbsInfo(); 
例子二:查询bbsInfo表的记录,但传bbsId参数
delimiter //
drop procedure if exists hello//
create procedure hello(id int)
beginselect * from bbsInfo where bbsId=id;
end//
delimiter ;call hello(7); 
 例子:删除指定的新闻分类  typeId=3
delimiter //
drop procedure if exists delType//
create procedure delType(tid int)
begindelete from reviews where articleId in (select articleId from newsArticles where typeId=tid);delete from newsArticles where typeId=tid;delete from newsTypes where typeId=tid;
end//
delimiter ;call delType(4); 
存储过程知识点
 1、介绍、作用
 2、创建、调用、删除、查看
 3、参数
 存储过程注意
 1、一次编写,多次调用
 2、有参数、有返回值
 3、必须通过用户显式的来调用
 存储过程的使用场合
 实现网站上的一个功能,必须要执行多个sql语句
 存储过程与触发器的区别?
 1、存储过程是由用户来调用,触发器是由系统自动调用
 2、存储过程有参数有返回值,触发器没有参数也没有返回值
 ------------------------------------------------------------
 总结:
 1、多表查询语句
 2、视图View
 3、触发器Trigger
 4、存储过程Procedure
