zoukankan      html  css  js  c++  java
  • MySql 学习之路-高级2

    目录:

    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:

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

    如果多个列添加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:

    1 ALTER TABLE TABLENAME ADD COLUMN SCORE INT;-- 新增字段SCORE
    2 
    3 ALTER TABLE TABLENAME MODIFY SCORE VARCHAR(255); -- 修改字段数据类型
    4 
    5 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的网站信息,那么我们如何创建这个视图呢?

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

      实例2:

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

    SELECT * FROM INTERNET;

    还可以添加条件:

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

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

      2.更新视图

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

      格式:

    1 CREATE OR REPLACE VIEW view_name AS
    2 SELECT column_name(s)
    3 FROM table_name
    4 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)修改限制  
         当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

  • 相关阅读:
    C++ and OO Num. Comp. Sci. Eng.
    C++ and OO Num. Comp. Sci. Eng.
    C++ and OO Num. Comp. Sci. Eng.
    C++ and OO Num. Comp. Sci. Eng.
    C++ and OO Num. Comp. Sci. Eng.
    C++ and OO Num. Comp. Sci. Eng.
    WPF 应用程序使用程序的模型视图 ViewModel 设计模式 WVVM
    穿透Session 0 隔离(二)(How to use Windows service run a GUI application.)
    穿透Session 0 隔离(一)(how to use Windows service run a GUI application.)
    .Net 远程路径权限访问。
  • 原文地址:https://www.cnblogs.com/linuxchao/p/linuxchao-mysql-G2.html
Copyright © 2011-2022 走看看