SQL高级知识点

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-686428.html

到了这里,关于SQL高级知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sql:SQL优化知识点记录(十二)

       加读锁和写锁 查看是否上锁:In_use:变成了1    读写锁对我们数据产生哪些影响: 读锁:是共享锁,其他线程可以查看: 加了读锁:session1不能修改自己,也不可以读其他表 但是session2窗口可以读其他表  session2:此时对加锁的表进行更改操作,它会进入阻塞状态   

    2024年02月09日
    浏览(49)
  • sql:SQL优化知识点记录(三)

    简单的查询类型是:simple   外层 primary,括号里subquery  用到了临时表:derived   trpe反映的结果与我们sql是否优化过,是否是最佳状态息息相关 最简单的查询啥都没有改type就是all:表明的的检索是全表扫描   const:通过id查询,有索引查询很快  t1查询完之后作为一张临时表

    2024年02月10日
    浏览(47)
  • sql:SQL优化知识点记录(十五)

      我们这里配置一Windows上的MySql做主机,Linux上的MySql做从机,搭建一主一从 测试以下是否能够拼通:从Linux上:167,连接Windows的165 从Windows的165 连接Linux上:167,看是否拼通   修改配置文件:首先Windows:my.ni 主机配置文件修改: 从机配置文件修改:   注释掉server-id ,打开

    2024年02月09日
    浏览(54)
  • sql:SQL优化知识点记录(九)

    对sql调优的分析: 排序优化:  数据库的连接方式,里面的数据尽量这样连接,尽量选择第一个方式,因为两个表的连接一共建立5次连接,第二个建立1000次连接,从小表驱动大表方式来说选择第一种 B相当于部门, A是员工,通过部门id在部门表里面,部门是少量的,员工是

    2024年02月10日
    浏览(44)
  • sql:SQL优化知识点记录(五)

          上面的功能已经实现,但是分析功能, 使用explain分析这条sql: 发现type为All Extra:有Using filesort (文件内排序) 这两个是影响性能的    查看下这张表:只有一个主键索引  为这几个字段建立一个符合索引:   建立完索引后,在使用explain进行分析一下:type变成了r

    2024年02月10日
    浏览(51)
  • sql:SQL优化知识点记录(六)

      查看一下有没有建立索引: 用到索引中的一个:type中的ref决定访问性能  用到索引中的两个:通过key_len的长度可以看出来,比第一个大一点。或者通过ref:中用到了两个常量const 用到了三个索引:key_len比第二个又大了一点,用到了三个常量const 一下的结果都能查出,但是

    2024年02月10日
    浏览(42)
  • sql:SQL优化知识点记录(十一)

    新的一个优化的方式show Profile   运行一些查询sql: 查看一下我们执行过的sql   显示sql查询声明周期完整的过程:  当执行过程出现了下面这4个中的时,就会有问题导致效率慢  8这个sql创建了临时表导致sql变慢 Show Profile:记录了我们后台要开启的一些sql,全局查询日志呢,

    2024年02月09日
    浏览(85)
  • sql:SQL优化知识点记录(四)

    type下的ref是非唯一性索引扫描具体的一个值 ref属性 例如:ti表先加载,const是常量  t1.other_column是个t1表常量 test.t1.ID:test库t1表的ID字段        t1表引用了shared库的t2表的col1字段,t1.col2=‘’ac‘’是一个常量  t2表没有索引只有id主键,col1,col2没有建立索引      rows越少

    2024年02月10日
    浏览(47)
  • sql:SQL优化知识点记录(七)

      查询*, 百分号加右边,否则索引会失效 没建立索引之前都是全表扫描   没建立索引 建立索引: 建立索引 id是主键,他也可以从主键上取   覆盖索引要到了name,索引没有失效  覆盖索引要到了age,索引没有失效  不使用* 查找,覆盖索引没有失效 使用*查找:个数上超

    2024年02月09日
    浏览(57)
  • sql:SQL优化知识点记录(八)

    所谓索引:就是排好序的快速查找数据结构,排序家查找是索引的两个用途 select * 在where使用到了索引,当select *  有模糊查询%在左边索引会失效  当select * where后面索引的顺序发生变化,也会用到索引4个  我们where后面倒着排序,也会使用到索引4个 上面,因为有MySql查询优

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包