当前位置: 首页 > news >正文

李洋网站建设西安seo建站

李洋网站建设,西安seo建站,火锅料网站方案怎么做,龙华做网站天无涯网络视图、索引、存储过程、触发器 group by补充: 规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。 视图 视图是虚拟…

视图、索引、存储过程、触发器

group by补充:

规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。

在这里插入图片描述

  

  

视图

视图是虚拟的表。与包含数据的表不一样,视图(虚拟表)是动态检索数据的查询

视图的作用是,如果表结构过于复杂,对于不了解表结构的使用者是不友好的,创建者可以根据使用者需求提炼(筛选)出一批数据成为一个虚拟的表供其使用。再有

在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。

重要的是知道视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。所以不要滥用视图。

可以通过视图修改原数据,但是不建议这么做。

注意:

  • 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。

  • 对于可以创建的视图数目没有限制。

  • 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。

  • 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

  • ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。

  • 视图不能索引,也不能有关联的触发器或默认值。

  • 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。

使用命令:

  • 视图用CREATE VIEW语句来创建。

  • 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。

  • DROP删除视图,其语法为DROP VIEW viewname;

  • 更新视图时,可以先用DROP再用CREATE。也可以直接用CREATE OR REPLACE VIEW,此时如果要更新的视图不存在,则更新语句会创建一个视图;如果要更新的视图存在,则更新语句会替换原有视图。

使用样例:

#查询订单编号为20005的:产品名称,供应商名称,产品价格,购买数量
SELECT order_num,prod_name, vend_name, prod_price, quantity
FROM orderitems oJOIN products p ON o.prod_id = p.prod_idJOIN vendors v ON p.vend_id = v.vend_id
WHERE o.order_num = 20005;# 创建视图,包含所有订单的产品名称,供应商名称,产品价格,购买数量
CREATE VIEW order_detail ASSELECT order_num,prod_name, vend_name, prod_price, quantity
FROM orderitems oJOIN products p ON o.prod_id = p.prod_idJOIN vendors v ON p.vend_id = v.vend_id;# 查看视图的所有数据
SELECT * FROM order_detail;# 从视图中过滤数据
SELECT * FROM order_detail WHERE order_num=20005;# 删除视图
DROP VIEW order_detail; 

  

  

索引

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达。

索引是对数据库中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

索引是一个单独的存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引可以快速找出在某个或多个列中的某个值。所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。

索引是在存储引擎中实现的,因此每一种存储引擎的索引,都不一定完全相同。

  

索引的分类:

  • 普通索引和唯一索引

  普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。

  唯一索引要求索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合,必须唯一。

  主键索引是一种特殊的索引唯一,不允许有空值。在MySQL中,主键PRIMARY KEY会自动创建索引,唯一约束UNIQUE字段也会自动创建索引。

  • 单列索引和组合索引

单列索引及一个索引只包含单个列,一个表可以有多个单列索引。

组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀原则。

  

使用命令:

  • 创建
--普通索引
CREATE TABLE book(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,INDEX (bookname)   -- 注意
);
--唯一索引
CREATE TABLE book2(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,UNIQUE INDEX (bookname)   -- 注意
); 
-- 给索引起名字
CREATE TABLE book3(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,UNIQUE INDEX  name_idx (bookname)   -- 注意:如果不指定名称的话,名称则为字段名
); -- 注意:index 和key是等价的
  • 单独创建索引(非建表时)
--普通索引
CREATE INDEX index_name
ON table_name (column_name);
--唯一索引
CREATE UNIQUE INDEX index_name
ON table_name (column_name);
--组合索引
CREATE INDEX index_name
ON table_name (column_name1,column_name2);
  • 删除索引(两种方式)
ALTER TABLE table_name DROP INDEX index_name;DROP INDEX index_name ON table_name; 

  

  

存储过程

简单的说存储过程就是一条或者多条语句的集合,可视为批文件(脚本),但是其作用不仅限于批处理。

  • 基本形式
CREATE PROCEDURE  存储过程名 (参数列表)
BEGIN    SQL语句代码块
END
  • 举例一
# 创建存储过程
CREATE PROCEDURE my_test()
BEGINSELECT * FROM book;
END;# 调用存储过程
CALL my_test();# 删除存储过程
DROP PROCEDURE my_test;
  • 举例二
# 创建存储过程
CREATE PROCEDURE my_test()
BEGIN
#   declare 定义变量i DECLARE i int DEFAULT 0;WHILE i<10 doINSERT INTO book (bookname) VALUES (concat('悲惨的世界',i));SET i=i+1;end WHILE ;
END;

  

  

触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT,UPDATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发器是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。

创建:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tab_name FOR EACH ROW trigger_stmt
  • trigger_name:触发器名称,用户自行指定;

  • trigger_time :触发时机,可以指定为before或after;

  • trigger_event:触发事件,包括INSERT,UPDATE和DELETE;

  • tab_name:要建立触发器的表名;

  • trigger_stmt:触发器执行语句。

CREATE TABLE book2(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL
);
ALTER TABLE book  ADD INDEX name_idx(bookname);# 创建触发器,在book表中插入一条数据时自动在book2尾部备份一份新的book
CREATE TRIGGER book_insert_select AFTER INSERT 
ON book FOR EACH ROW INSERT INTO book2(bookname) SELECT bookname FROM book;INSERT INTO book(bookname)VALUES ('《平凡的世界2》');# 查看触发器
SHOW TRIGGERS ;# 也可以在triggers表中查看触发器
SELECT * FROM information_schema.triggers;# 删除触发器
DROP TRIGGER book_insert_select;
http://www.tj-hxxt.cn/news/122672.html

相关文章:

  • 做网站的边框seo优化招商
  • 什么网站上做效果图可以赚钱泉州百度关键词排名
  • 旅游网站流程图小红书推广价目表
  • 做爰片的网站哪些平台可以打小广告
  • 一个人开发一个网站需要多久成都做整站优化
  • 商城网站建设服务器哪个浏览器不屏蔽网站
  • 公司设计网站推荐百度首页入口
  • 网站统计源码今日国内新闻
  • p2p系统网站开发百度seo刷排名工具
  • 做网站的ui好省推广100种方法
  • 黄浦网站制作网站按天扣费优化推广
  • 扶贫工作网站怎么做成人教育培训机构十大排名
  • 北京建设学院网站seo是什么技术
  • 建设网站的策划书互联网营销培训平台
  • 为什么网站建设比商场要贵淮北网站建设
  • 信息流广告投放是什么西安seo按天收费
  • 德惠市建设局网站舆情分析网站免费
  • 高端上海网站设计公司价格楚雄今日头条新闻
  • wordpress网站 添加微信支付百度商业账号登录
  • 永康住房和城乡建设局网站杭州百度优化
  • 网站建设需要多少g合适扫一扫识别图片
  • 做餐饮类网站用哪个程序制作网站要花多少钱
  • 今日热点头条抚顺网站seo
  • 建设网站简单吗长沙百度推广开户
  • 个人网站靠什么赚钱短视频剪辑培训班速成
  • 网站制作技术支持电脑优化设置
  • 阜新本地网站建设平台网络营销专业大学排名
  • php做网站脑图seo查询在线
  • 怎么看域名在哪里注册的佛山网络排名优化
  • 要服务网站建设网站seo 优化