SQL高级知识点

MySQL基础
1、安装
   1)设置编码
   2)设置密码
2、配置文件:my.ini、my.cnf
   1)设置端口号
     port=3306
   2)设置编码

     default-character-set=utf8
     character-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 key
    foreign key
    not null
    null
    unique
    default
    auto_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 newsArticles
     where 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...演唱会的次数

select
 userId,
 userName,
 (select count(*) from 演唱会表 where 演.userId=歌.userId)
 from 歌手表;


---------------

select 
  typeId,
  typeName,
  (select count(*) from newsArticles a where a.typeId=b.typeId) as newsCount
  from 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
begin
  sql语句;
  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
begin
  insert 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
begin
  update tongji set bmCount=bmCount+1;
end//
delimiter ;

部门表删除记录的触发器

delimiter //
drop trigger if exists delBm//
create trigger delBm
after delete
on bumen
for each row
begin
  update 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 存储过程名()
begin
  sql语句;
  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()
begin
  select * from bbsInfo;
end//
delimiter ;

call getBbsInfo();

例子二:查询bbsInfo表的记录,但传bbsId参数

delimiter //
drop procedure if exists hello//
create procedure hello(id int)
begin
  select * from bbsInfo where bbsId=id;
end//
delimiter ;

call hello(7);


例子:删除指定的新闻分类  typeId=3

delimiter //
drop procedure if exists delType//
create procedure delType(tid int)
begin
  delete 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

你可能感兴趣的:(MYSQL,adb)