目录:

1.约束

2.ALTER TABLE

3.VIEW

1.约束

  说明:SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止,约束可以在建表是规定,也可以在建表后规定,通过ALTER TABLE 实现.

  语法:

CREATE TABLE TABLENAME
(
COLUMN_NAME1 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME2 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME3 DATA_TYPE(SIZE) CONSTRAINT_NAME
);

约束有如下几种常用:

NOT NULL                          -- 指示某列不能存储NULL值
UNIQUE -- 保证某列的每行必须有唯一值
PRIMARY KEY -- 前2个约束的结合,每个表只能有一个PRIMARY KEY 约束
CHECK -- 保证列中的值复合指定的条件
DEFAULT -- 规定没有给列赋值时的默认值

针对以上约束,我们来看下具体的应用实例

  实例1:

1 CREATE TABLE TABLENAME
2 (
3 ID INT NOT NULL AUTO_INCREMENT,
4 NAME VARCHAR(255) UNIQUE ,
5 AGE INT ,
6 CITY VARCHAR(255) DEFAULT 'CHINA',
7 PRIMARY KEY (ID),
8 CHECK (AGE > 18)
9 );

如果给列起名字或者给多个列附加多个约束可以使用下面的方法

  实例2:

 CREATE TABLE TABLENAME
(
ID INT NOT NULL AUTO_INCREMENT,-- 自动填充此列 从1开始
NAME VARCHAR(255) UNIQUE ,
AGE INT ,
CITY VARCHAR(255) DEFAULT 'CHINA',
PRIMARY KEY (ID),
CHECK (AGE > 18)
CONSTRAINT 别名 约束名 (列1,列2,..)
);

如果多个列添加UNIQUE约束,第9行代码可以改成如下形式

CONSTRAINT UNIQUE_NAME UNIQUE (AGE,CITY)

如果多个列添加CHECK约束,第9行代码可以改成如下形式

CONSTRAINT CHECK_NAME CHECK (AGE>18 AND CITY = 'CHINA')

我们已经建立表的几个约束,那么如果我们执行如下SQL时会报错

INSERT INTO TABLENAME VALUES(1,'XUECHAO',22,'CH');
INSERT INTO TABLENAME VALUES(2,'XUECHAO',15,'CH');

因为NAME已经添加了UNIQUE约束,AGE添加了CHECK约束

PS:我还是个菜鸟,理解的不是很全面, 我理解的约束就是这样的,如果您有什么不同的理解,可以评论区告诉我,很感谢!

2.ALTER TABLE

  说明:前面我们在建表的时候已经添加了约束,如果我们建表的时候没有添加约束,那么我们可以通过ALTER TABLE 在表后添加约束,下面来看看下面的实例

  实例1:

ALTER TABLE TABLENAME
ADD UNIQUE (ID);

ALTER TABLE TABLENAME
ADD CONSTRAINT UN_NAME UNIQUE (ID , NAME);

添加别的约束也是同样的原理和写法

  说明:ALTER TABLE 能够给表附加约束,还有另外一个用途,向表中添加新字段,删除字段,修改字段数据类型(我知道的就这些 ^_^)

  实例2:

 ALTER TABLE TABLENAME ADD COLUMN SCORE INT;-- 新增字段SCORE

 ALTER TABLE TABLENAME MODIFY SCORE VARCHAR(255); -- 修改字段数据类型

 ALTER TABLE TABLENAME DROP COLUMN SCORE; -- 删除字段

视图再补充吧,有点忙没时间写了。。。。。。。。。。。

继续....

3.VIEW

  说明:视图是一张可视化的表,是基于SQL语句的结果集的可视化的表,视图包含行和列,就像一个真实的表,视图中的字段就是来自一个或多个数据库中的真实的表中的字段。视图总是显示最新的数据,每当用户查询视图时,数据库引擎通过使用视图的sql语句重建数据,我们可以看下创建视图的格式应该就明白这句话了

  1.创建视图:

  格式:

CREATE VIEW VIEW_NAME AS
SELECTE COLUMN_NAME FROM TABLE_NAME
WHERE CONDITION;

  实例1:

我们以前面的表WEBSITES为例,假设我想需要这样一个视图:我希望每次查询访问量小于50的网站信息,那么我们如何创建这个视图呢?

 CREATE VIEW INTERNET AS
SELECT NAME,URL FROM WEBSITES
WHERE ALEXA < 50;

  实例2:

使用视图,与查询表数据一样

SELECT * FROM INTERNET;

还可以添加条件:

SELECT * FROM INTERNET
WHERE NAME LIKE '%O%'; -- 查询网站名字包含字母o的数据

是不是觉得定义视图之后查询变的更加简单了呢^_^

  2.更新视图

 更新视图我们时通过 CREATE OR REPLACE 实现的

  格式:

 CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;

  实例:

比如上面刚创建的视图我们需要添加一个ALEXA的新字段,可以这样实现

CREATE OR REPLACE VIEW INTERNET AS
SELECT NAME ,URL,ALEXA FROM WEBSITES
WHERE ALEXA < 50;

  3.删除视图

  实例:

DROP VIEW INTERNET;

总结:好了,对视图的操作到这就结束了,不是很全面,但是还是有点帮助的(自恋),想深入的学习的话再多找点资料看下吧,我这个适合入门 哈哈

虽然内容不多,不全面,但是还是能看出来点视图的利与弊的,下面就来总结几句(其实我也是在别的地方看到的,但是很好理解,也很全面,就借鉴一下):

利:

1.第一点: 
  使用视图,可以定制用户数据,聚焦特定的数据。 

  

  解释: 

  在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 

  采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没 

  有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视 

  图,以后他在查询数据时,只需select  *  from  view_caigou   就可以啦。 

  

  第二点:使用视图,可以简化数据操作。 

  

  解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要 

  显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能 

  会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我 

  们只需要select  *  from  view1就可以啦,这样很方便。 

  

  第三点:使用视图,基表中的数据就有了一定的安全性 

  

  因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以 

  将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集 

  合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改 

  和删除,可以保证数据的安全性。 

  

  第四点:可以合并分离的数据,创建分区视图 

  

  随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很 

  多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务 

  情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些 

  数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字, 

  将各分公司的数据合并为一个视图。

2.弊

1)性能差  

     sql server必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。

  2)修改限制  

     当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

MySql 学习之路-高级2的更多相关文章

  1. MySql 学习之路-高级1

    Mysql自学之路-高级1 目录: 1.CREATE DATABASE 创建数据库 2.CREATE TABLE 创建数据表 3.INSERT INTO SELECT 把一个表中的数据拷贝到另一个表中 ...

  2. MySQL学习之路(一)——初涉MySQL。

    MySQL学习之路(一) 1.1MySQL的概述 MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一个开源的关系型数据库管理系统. MySQL分为社区版和企业版. 1 ...

  3. MySql 学习之路-基础

    Mysql 自学之路 本文包含基础部分与高级部分 一.基础 数据库操作 Show databases:显示所有的数据库 Show tables: 显示所有的数据库表 Use databasename: ...

  4. mysql学习之路_高级数据操作

    关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 ...

  5. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  6. mysql学习之路_事物_存储过程_备份

    数据备份与还原 备份:将当前已有的数据保留. 还原:将已经保留的数据恢复到对应表中 为什么要做数据备份 1,防止数据丢失,被盗,误操作 2,保护数据记录 数据备份还原方式有多种:数据表备份 单表数据备 ...

  7. MySQL学习笔记_10_MySQL高级操作(下)

    MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...

  8. mysql学习之路_基础知识

                    Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数 ...

  9. MySQL学习之路(1):SQL脚本语言

    使用MySQL数据库,首先安装MySQL数据库,本文所有SQL脚本在MySQL上测试和执行. 安装Mysql服务器:安装Mysql workbench客户端,可以以图形化界面管理mysql:安装php ...

随机推荐

  1. qt 多语化

        最近项目使用的qt版本升级,导致了界面乱码问题,因此最后决定利用qt的多语化机制,来解决乱码问题,首先感谢这两篇文字的帮助,在此加上作者链接:Qt之多语化和Qt多国语言的实现与切换(国际化) ...

  2. 【算法与数据结构专场】BitMap算法基本操作代码实现

    上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...

  3. Shell从入门到精通进阶之二:Shell字符串处理之${}

    上一章节讲解了为什么用${}引用变量,${}还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有需求. 2.1 获取字符串长度 # VAR='hello world!' # echo $VA ...

  4. 应用集成mycat,实现mycat的高可用与mysql的读写分离

    前言 开心一刻 一个女人自朋友圈写道:我家老公昨天和别人家的老婆出去旅游,迄今未归,我则被别人家的老公折腾了一天,好累哦! 圈子下面,评论无数,老公在下面评论到:能不能好好说话,我只不过陪女儿去毕业旅 ...

  5. 基于.Net进行前端开发的技术栈发展路线(三)

    前言 上一篇<我的技能树二>文章分享了我的技能中的前端技能和Java技能,今天继续跟大家分享的就是后端技能了. 我的技能树 我当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗 ...

  6. 【转载】ASP.NET MVC重写URL制作伪静态网页,URL地址以.html结尾

    在搜索引擎优化领域,静态网页对于SEO的优化有着很大的好处,因此很多人就想把自己的网站的一些网页做成伪静态.我们现在在网络上发现很多博客网站.论坛网站.CMS内容管理系统等都有使用伪静态这一种情况,伪 ...

  7. .NET Core整理之配置EFCore

    1.新建ASP.NET Core Web应用程序 2.从NuGet下载安装以下工具包 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCo ...

  8. [HTTP] tcp/ip详解 链路层 网络层 传输层 应用层

    1.可以把七层协议简化成四层协议链路层 网络层 传输层 应用层 2.通过路由器连接的两个网络网络层ip提供的是一个逐跳协议,提供了一种不可靠的服务,中间有可能会丢传输层tcp在ip的基础上提供了可靠的 ...

  9. C# /VB.NET操作Word批注(一)—— 插入、修改、删除Word批注

    批注内容可以是对某段文字或内容的注释,也可以是对文段中心思想的概括提要,或者是对文章内容的评判.疑问,以及在阅读时给自己或他人起到提示作用.本篇文章中将介绍如何在C#中操作Word批注,主要包含以下要 ...

  10. OO_BLOG1_简单表达式求导问题总结

    作业1-1 包含简单幂函数的多项式导函数的求解 I. 基于度量的程序结构分析 1)程序结构与基本度量统计图 2)分析 ​ 本人的第一次作业的程序实现逻辑十分简单,但是OOP的色彩并不强烈,程序耦合度过 ...