mysql视图表怎么设置约束_MySQL一一sql的视图、索引、约束

一、视图

本质上相当于一张**“虚拟表”**,可当作独立的一张表进行操作(增、删、改、查)

**      作用:**

**       a)**可通过权限控制,只将“表中的少数列”暴露给数据库用户,而不让该用户直接操纵数据库中“实际表”

**       b)**可将常用的,较复杂的SQL在数据库中预先定义好,使得外部调用不用每次都编写复杂的SQL语句,直

接当作一张“虚拟表”来调用即可 等等,听说你们都很喜欢我~那给个小心心00~,为了表扬你们,戳这里有你们想要的完整zl

Customers表中原始数据:

c864bad7a90f551afa8faf62ef03470e.png

Orders表中的原始数据:

b7a01a8bd7a9c277da181cecc07f18de.png

创建“查找运费在40到60之间的客户信息”的视图:

1 use edisondb; 2

3  if object_id('FortyToSixtyFreightCusts')is not null

4 drop view FortyToSixtyFreightCusts

5  go

6  create view FortyToSixtyFreightCusts

7  as

8

9  select C.custid as '客户ID',C.name as '客户名', C.age as '年龄'

10 from customers as C

11  where Exists(

12 select *

13 from Orders as O

14 where C.custid=O.custid and (O.freight between 40 and 60)

15 );

创建成功之后:

ae98279cd4416b9cfe7369376380cd22.png

将该视图当作一张“独立的表”进行查询操作:

1 use edisondb; 2  select 客户ID,客户名,年龄 from FortyToSixtyFreightCusts;

执行结果如下:

0c77ae39d1d708ab78d8b1d4f6de2805.png

关于SCHEMABINDING选项的一些说明:

**         作用:用“富”字组词使得视图中引用的对象不能被删除,被引用的列不能被删除或者修改(防止:由于引用的列等被删除,造成视图无法使用的情况)**

修改视图,使其指定SCHEMABINDING选项:

1 alter view FortyToSixtyFreightCusts with schemabinding

2  as

3

4  select C.custid as '客户ID',C.name as '客户名', C.age as '年龄'

5  from dbo.customers as C

6  where Exists(

7 select O.custid

8 from dbo.Orders as O

9 where C.custid=O.custid and (O.freight between 40 and 60)

10 );

11

go

(以上表名,一定要以“dbo.”的形式出现,否则会出现:名称 'customers' 对于架构绑定无效的错误)*

尝试删除Customers表中的age列:

1 use edisondb; 2 alter table customers drop column age;

执行结果:

**

d4b2b06f96c18b669767adad3237422a.png

**

**    附:可通过执行以下语句查看SQL Server中某对象的定义:      **

1 exec sp_helptext 'dbo.FortyToSixtyFreightCusts';

执行结果如下:

17dba1da3285e7f8ba3fb3068d25975d.png

二、约束

**   1)检查约束【通常认为的“约束”】**

创建检查约束:

1 use edisondb; 2  alter table staffinfo 3  add constraint ck_StaffID check(StaffID between 5000 and 5999)

成功创建之后:

0d53afb9a171455d2ed7e4388a0dfd76.png

此时执行非法的插入行:

1 use edisondb; 2  insert into StaffInfo(StaffID,StaffName,Department) 3 values(6000,'Wade','Dev');

执行结果为:

842f471e7f30f2b60f535c95571d1f58.png

**   2)唯一性约束**

StaffInfo表原始数据:

60625f01d3e7336202c86705dc119265.png

创建唯一性约束:

1 use edisondb; 2  alter table staffinfo 3  add constraint uq_StaffName unique(StaffName);

成功创建后:

65877aaa652e050e7c6616ef58de5436.png

** 注:**唯一性约束创建成功后,是在“键”中显示,而非“约束”中

此时执行非法的插入行:

1 use edisondb; 2  insert into StaffInfo(StaffID,StaffName,Department) 3 values(5003,'keven','Dev');

执行结果为:

e29b4451f5e44dbe85a562b8fb13c1f2.png

**说明:**要使某列的值唯一,既可以通过主键来实现,也可以通过“唯一性约束”来实现

3)默认约束

创建默认约束:

1 use edisondb; 2  alter table staffinfo 3  add constraint df_Department default('部门待定') for Department;

成功创建后:

eec4d5e652f06a71aae47b7129c9c77f.png

执行行插入:

1 use edisondb; 2  insert into StaffInfo(StaffID,StaffName) 3 values(5003,'Murphy');

执行结果为:

8208372a6e6508deab81ac396fda7bab.png

**注:**主键和外键也属于一种约束

三、索引

**  1.聚集索引**

对应于数据库中数据文件的物理存储方式,每张表只能建立一个

**       适用场合:**a)select次数远大于insert、update的次数(insert、update时需要移动其他数据文件的物理位置)                       b)建立聚合索引的列,既不能绝大多数都相同,又不能只有极少数相同(可从类似二维数组查找时间复杂的方式去理解)

创建一个NewOrders表,用于对索引的测试:

1 use edisondb; 2 3 create table NewOrders 4 ( orderID numeric(18, 0) identity(1,1) not null, 5 custID numeric(18, 0) not null, 6 empID numeric(18, 0) not null, 7 tradeDate datetime not null 8 );

在NewOrders表中插入10万条测试数据:

1 use edisondb;

2 set nocount on

3 declare @i numeric(18,0)

4 declare @custid numeric(18,0)

5 declare @empid numeric(18,0)

6 declare @tradeDateTime datetime

7 begin

8 set @i=0

9 set @custid=100000

10 set @empid=500000

11 set @tradeDateTime=getdate()

12 while @i<100000

13 begin

14 insert into neworders(custID,empID,tradeDate)

15 values(@custid,@empid,@tradeDateTime)

16 set @i=@i+1

17 set @custid=@custid+1

18 set @empid=@empid+1

19 if (@i%1000)=0

20 set @tradeDateTime=dateadd(day,1,@tradeDateTime)

21 end

22 end

23 print 'Insert data over'

插入数据成功之后,NewOrders表中的部分数据如下:

4d938b414c1aef091157c600faed1888.png

进行查询测试:

1 use edisondb; 2 declare @startDT datetime 3 set @startDT=getdate() 4 select * from neworders where tradedate> dateadd(day,10,'2011-9-20') 5 print '耗时:'+replace(str(datediff(ms,@startDT,getdate())),' ','')+' 毫秒'

执行结果为:

b2134b8a78aa2791fd3156333550c937.png

现在对建立“聚集索引”的表进行测试

删除表中所有行:

1use edisondb 2truncate table neworders;

在用“杆”字组词NewOrders表的tradeDate列上创建“聚集索引”:

1use edisondb 2create clustered index tradeDate_NewOrders on NewOrders(tradeDate)

执行结果为:

70955c464313f50489c341e9e2a9e2ea.png

再次插入10万行数据后,进行测试,结果为:

e995aae663961e573a25476b3968bc02.png

**聚合索引使用的关键:**在合适的列建立(通常为:最多用作查询条件的列)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Software Development Life Cycle

转载于:https://www.cnblogs.com/genezhao/p/6879848.html

ArrayAndString(数组和字符串)

1.实现一个算法&#xff0c;确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构&#xff0c;又该怎么处理&#xff1f; public class UniqueChars {public static void main(String[] args) {// TODO Auto-generated method stubString string "abcdef…

position 的属性值

理论上来说&#xff0c;全部 position 的取值有8个 包括&#xff1a;position&#xff1a;static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed 和 sticky initial、inherit、unset 是css的关键…

mysql数据库应用的权限层级_MySQL数据库的用户权限管理

嗨&#xff01;各位小伙伴今天翻了一下历史记录MySQL 数据库还有点内容今天开始我们就来补上吧~用户权限管理伙伴们要知道&#xff0c;在数据库方面有两个方向。一个是数据库管理员(Database Administrator)简称DBA&#xff0c;一个是数据库开发工程师(Database Developer)&…

linux i2c adapter 增加设备_Linux驱动之I2C驱动架构

一、Linux的I2C体系结构主要由三部分组成&#xff1a;(1) I2C核心提供I2C控制器和设备驱动的注册和注销方法&#xff0c;I2C通信方法&#xff0c;与适配器无关的代码以及探测设备等。(2) I2C控制器驱动(适配器)(3) I2C设备驱动二、重要的结构体i2c_adapter//i2c控制器(适配器)i…

Alpha-end

前言 失心疯病源10团队代码管理github个人感悟 肝不动了&#xff0c;肝不动了。明天如果见不到我&#xff0c;不要太想我。站立会议 队名&#xff1a;PMS530雨勤&#xff08;组长&#xff09; 今天完成了那些任务 熬夜肝代码代码签入github明天的计划 肝到凌晨还剩下哪些任务 团…

避免写慢SQL

最近在整理数据库中的慢SQL&#xff0c;同时也查询了相关资料。记录一下&#xff0c;要学会使用执行计划来分析SQL。 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一&#xff0c;而且这是被MySQL的数据库引擎处理的。当有很多相同…

为什么子孙后代会讨厌使用java.util.Stack

在我用无意义的重言式杀死你之前&#xff0c;这是要点 如果您的应用程序接近实时&#xff0c;或者将代码发送到Mars&#xff0c;则需要保留Java中默认的Stack实现。 根据LinkedList编写您自己的版本。 同样&#xff0c;如果您的应用程序是关键任务&#xff0c;并且希望堆栈由…

play 连接mysql_Play framework 2.x 连接mysql | 学步园

笔者所使用的系统为64位 windows7。本文假设java1.5版本以上环境已经搭好&#xff0c;play 框架已经下载至本地。首先我们创建一个项目。命令行进入play的目录命令&#xff1a;play new demo再次输入项目名字输入2 选择java项目创建完成界面OK&#xff0c;一个play框架下的java…

rpm -e --nodeps_微课 | rpm的思维导图

前导课程&#xff1a;微课 | rpm的查询、升级与卸载命令本次微课将演示使用xmind绘制rpm思维导图的过程&#xff0c;包括视频文字&#xff0c;大约需要你10分钟。另外&#xff0c;文末还有一则IT冷笑话&#xff0c;学习之余、会心一笑:)这个思维导图将包含以下内容&#xff1a;…

border-sizing属性详解和应用

box-sizing用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型。它有content-box、border-box和inherit三种取值。inherit指的是从父元素继承box-sizing表现形式&#xff0c;不再冗赘。1. 属性讲解 content-box 默认值&#xff0c;也是css2.1中的盒子模型。在计算 width和…

Couchbase:使用Twitter和Java创建大型数据集

在播放/演示Couchbase或任何其他NoSQL引擎时&#xff0c;创建大型数据集的一种简单方法是将Twitter feed注入到数据库中。 对于这个小应用程序&#xff0c;我正在使用&#xff1a; Couchbase Server 2.0服务器 Couchbase Java SDK &#xff08;将由Maven安装&#xff09; T…

西门子scl语言编程手册_西门子SCL编程PEEK指令讲解

单词“peek”在英语中表示“偷看&#xff0c;瞥一眼”&#xff0c;在计算机编程中表示“读取数据”。在西门子SCL编程中&#xff0c;PEEK指令可以用来读取输入缓存区(I)、输出缓存区(Q)、位存储区(M)及数据块(DB)中的数据&#xff0c;常用作间接寻址。今天这篇文章&#xff0c;…

Guava的Collections2:过滤和转换Java集合

Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java&#xff0c;这是本文的主题。 Guava的Collections2类具有两个公共方法&#xff0c;这两个方法都是静态的。 方法filter&#xff08;Collection&#xff0…

钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

钉钉建好一个群打开群设置, 找到群机器人添加一个你想要的机器人可以使用自定义自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址)到这里, 钉钉机器人设置好了,接下来我们对照文档进行配置https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq/XAzBI -…

mysql加锁语法_MySql 加锁问题

1、设置非自动提交 set autocommit0; 这时候 for update才会起作用2、一般用法 set autocommit0; for update(加锁) ; commit/rollback; set autocommit1;首先看一下&#xff0c;set autocommit0 后&#xff0c;执行哪些语句会自动加锁&#xff0c;加的是什么锁&#xff1f…

td过长,将固定宽度table撑开

解决办法&#xff1a; 在table上加上样式: table{table-layout:fixed;word-break:break-all} table-layout:fixed tablle的列宽由表格宽度和列宽设定。 word-break:break-all 允许在单词内换行。 正常情况下&#xff1a; table表格中td过长&#xff1a; 加上样式之后&#…

Android几秒后自动关闭dialog

代码改变世界 Android几秒后自动关闭dialog AlertDialog.Builder builder new AlertDialog.Builder(v.getContext());builder.setTitle("发送成功&#xff01;");builder.setMessage("2秒后自动关闭&#xff01;");builder.setCancelable(true);final Ale…

控制元素的div属性

1、需求分析 改变元素的宽、高、颜色、显示、重置等属性。 2、技术分析 基础的css、html、js 3、详细分析 如图&#xff0c;单击按钮&#xff0c;改变元素属性: 3.1 HTML部分 根据视图不难发现&#xff0c;内容分两大不分:按钮栏和效果图&#xff0c;所以设置两个div。 <…

使用JMeter和Yourkit进行REST / HTTP服务的性能分析

我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试。 但是&#xff0c;运行这样的测试通常表明被测系统不能很好地应对不断增加的负载。 现在的问题是如何找到瓶颈&#xff1f; 深入研究代码以检测可疑部分可能是另一种选择。 但是考虑到潜在的…