精华内容
下载资源
问答
  • mysql创建视图sql 什么是SQL视图? (What is a View in SQL?) A View is a database object that presents data existing in one or more tables. Views are used in a similar way to tables, but they don’t ...

    mysql创建视图sql

    什么是SQL视图? (What is a View in SQL?)

    A View is a database object that presents data existing in one or more tables. Views are used in a similar way to tables, but they don’t contain any data. They just “point” to the data that exists elsewhere (tables or views, for example).

    视图是一个数据库对象,它显示一个或多个表中存在的数据。 视图的使用方式与表相似,但是它们不包含任何数据。 它们只是“指向”其他地方存在的数据(例如表或视图)。

    我们为什么喜欢它们? (Why do we like them?)

    • Views are a way to limit the data presented. For example, the human resources department data filtered to only present sensitive information. Sensitive information in this case could be social security numbers, sex of employee, payrate, home address, etc.

      视图是一种限制呈现数据的方法。 例如,人力资源部门数据被过滤为仅显示敏感信息。 在这种情况下,敏感信息可能是社会保险号,员工性别,薪资,家庭住址等。
    • Complex data across more than one table can be combined into a single “view.” This can make life easier for your business analysts and programmers.

      可以将多个表中的复杂数据合并为一个“视图”。 这可以使您的业务分析师和程序员的工作更加轻松。

    重要安全提示 (Important Safety Tips)

    • Views are managed by the system. When data in the related tables are changed, added, or updated, the View is updated by the system. We want to use these only when needed to manage use of system resources.

      视图由系统管理。 更改,添加或更新相关表中的数据时,系统将更新视图。 我们只想在需要管理系统资源使用时使用它们。
    • In MySQL, changes to the table design (that is, new or dropped columns) made AFTER a view is created are not updated in the view itself. The view would have to be updated or recreated.

      在MySQL中,创建视图后对表设计(即新列或删除的列)的更改不会在视图本身中更新。 该视图将必须更新或重新创建。
    • Views are one of the four standard database object types. The others are tables, stored procedures, and functions.

      视图是四种标准数据库对象类型之一。 其他是表,存储过程和函数。
    • Views can usually be treated as you would a table, but updates are limited or not available when the view contains more than one table.

      视图通常可以像对待表一样对待,但是当视图包含多个表时,更新受到限制或不可用。
    • There are many other details about views that are beyond the scope of this introductory guide. Spend time with your database managers manual and have fun with this powerful SQL object.

      关于视图的许多其他详细信息超出了本入门指南的范围。 花时间阅读数据库管理器手册,并使用这个功能强大SQL对象带来的乐趣。

    Create View语句的语法(MySQL) (Syntax of the Create View Statement (MySQL))

    CREATE
        [OR REPLACE]
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
    	[WITH [CASCADED | LOCAL] CHECK OPTION]

    This guide will cover this part of of the statement…

    本指南将涵盖声明的这一部分……

    CREATE
        VIEW view_name [(column_list)]
        AS select_statement

    从学生表创建示例视图 (Sample View creation from the student tables)

    Notes:

    笔记:

    • The name of the view has a “v” at the end. It’s recommended that the view name indicate that it’s a view in some way to make life easier for programmers and database administrators. Your IT shop should have its own rules on naming objects.

      视图名称的末尾带有“ v”。 建议视图名称以某种方式表明它是一个视图,以使程序员和数据库管理员的工作更加轻松。 您的IT部门应在命名对象方面有自己的规则。
    • The columns in the view are limited by the SELECT and the rows of data by the WHERE clause.

      视图中的列受SELECT限制,数据行受WHERE子句限制。
    • the ”`” character around the view names is required because of the ”-” in the names. MySQL reports an error without them.

      由于名称中的“-”,因此需要在视图名称周围添加“`”字符。 没有它们,MySQL报告一个错误。
    create view `programming-students-v` as
    select FullName, programOfStudy 
    from student 
    where programOfStudy = 'Programming';
    
    select * from `programming-students-v`;

    使用视图合并多个表中的数据的示例 (Sample of using a View to combine data from more than one table)

    A Student demographics table was added to the database to demonstrate this usage. This view will combine these tables.

    学生人口统计表已添加到数据库以演示此用法。 该视图将合并这些表。

    Notes:

    笔记:

    • To “join” tables, the tables must have fields in common (usually primary keys) that uniquely identity each row. In this case it’s the student ID. (More on this in the SQL Joins guide.)

      要“联接”表,表必须具有唯一标识每一行的公用字段(通常是主键)。 在这种情况下,这是学生证。 (有关更多信息,请参见《 SQL Joins指南》。)

    • Notice the “alias” given to each table (“s” for student and “sc” for student contact). This is a tool to shorten the table names and make it easier to identify which table is being used. It’s easier than typing long table names repeatedly. In this example, it was required because studentID is the same column name in both tables, and the system would present an “ambiguous column name error” without specifying which table to use.

      注意每个表的“别名”(学生用“ s”,学生联系用“ sc”)。 这是一个缩短表名并使其更容易识别正在使用的表的工具。 比重复输入长表名要容易。 在此示例中,这是必需的,因为StudentID在两个表中都是相同的列名,并且系统将显示“模棱两可的列名错误”而不指定要使用的表。

    翻译自: https://www.freecodecamp.org/news/sql-create-view-mysql/

    mysql创建视图sql

    展开全文
  • 第8章 视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。 用户可以不用看到整个数据库表中的数据,而只关心对自己有用的数据。 视图...

    第8章 视图

        视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
        视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
        用户可以不用看到整个数据库表中的数据,而只关心对自己有用的数据。
        视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。
    

    8.1 视图简介

        视图的作用是方便用户对数据的操作。
    

    8.1.1 视图的含义

        视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
        视图还可以从已经存在的视图的基础上定义。
        数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。
        因此,视图中的数据是依赖于原来的表中的数据的。
        一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
        MySQL的视图不支持输入参数的功能,因此交互性上还有欠缺。但对于不是很大的操作,使用视图可以很大程度上简化用户的操作。
    

    8.1.2 视图的作用

        1.使操作简单化
            视图需要达到的目的就是所见即所需。
            视图可以简化对数据的操作。
        2.增加数据的安全性
            通过视图,用户只能查询和修改指定的数据。
            数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上。
            使用视图,可以简单方便地将用户的权限限制到特定的行和列上。这样可以保证一些机密信息的安全。
        3.提高表的逻辑独立性             
    

    8.2 创建视图

    8.2.1 创建视图的语法形式

        语法形式:
        CREATE [ ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ]
                 VIEW 视图名 [( 属性清单 )]
                 AS SELECT 语句
                 [ WITH  [ CASCADED | LOCAL ]  CHECK  OPTION ];
        创建视图时,需要有CREATE VIEW的权限。同时,应该具有查询涉及的列的SELECT权限。
        在MySQL数据库下面的user表中保存这些权限信息,可以使用SELECT语句查询。
        SELECT语句查询的方式如下:
        SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user='用户名'
        详细说明见书上。
    

    8.2.2 在单表上创建视图

        创建视图的代码eg:
            CREATE VIEW department_view1
            AS SELECT * FROM department;
    

    8.2.3 在多表上创建视图

        MySQL中也可以在两个或两个以上的表上创建视图,也是使用CREATE VIEW语句实现的。
        例如:CREATE ALGORITHM=MERGE VIEW
                    worker_view1 (name, department, sex, age, address)
                    AS SELECT name, department.d_name, sex, 2009-birthday, address
                    FROM worker, departmment, WHERE worker.d_id=department.d_id
                    WITH LOCAL CHECK OPTION
    

    8.3 查看视图

        查看视图是指查看数据库中已存在的视图的定义。
        查看视图必须要有SHOW VIEW的权限,MySQL数据库下的user表中保存着这个信息。       
        查看视图的方法:
            DESCRIBE
            SHOW TABLE STATUS
            SHOW CREATE VIEW
        查询information_schema数据库下的views表等。
    

    8.3.1 DESCRIBE语句查看视图基本信息

        基本形式:
            DESCRIBE 视图名;
        eg:
            DESCRIBE worker_view1;
    

    8.3.2 SHOW TABLE STATUS语句查看视图基本信息

        语法:
            SHOW TABLE STATUS LIKE '视图名';
        eg:
            SHOW TABLE STATUS LIKE 'worker_view1';
    

    8.3.3 SHOW CREATE VIEW语句查看视图详细信息

        语法:
            SHOW CREATE VIEW 视图名;
        eg:
            SHOW CREATE VIEW worker_view1;
    

    8.3.4 在views表中查看视图详细信息

    SELECT * FROM information_schema.views;
    

    8.4 修改视图

        修改视图是指修改数据库中已存在的表的定义。
        当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。
        MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。
    

    8.4.1 CREATE OR REPLACE VIEW语句修改视图

        CREATE OR REPLACE VIEW的使用非常灵活:
        在视图已经存在的情况下,对视图进行修改;
        视图不存在时,可以创建视图。
        语法:
            CREATE OR REPLACE  [ ALGORITHM={ UNDEFINED | MERGE | TEMPTABLE} ]
                                 VIEW 视图名 [( 属性清单 )]
                                 AS SELECT 语句
                                 [ WITH  [CASCADED | LOCAL ]  CHECK  OPTION];
                                 CREATE  OR  REPLACE  ALGORITHM=TEMPLATE
                                 VIEW  department_view1 (department, function, location )
                                 AS  SELECT d_name, function, address  FROM department;
    

    8.4.2 ALTER语句修改视图

        在MySQL中,ALTER语句的作用:
            修改表的定义;
            创建索引;
            修改视图。
        语法:
            ALTER  [ ALGORITHM={UNDEFINED | MERGE | TEMPTABLE} ]
                     VIEW 视图名 [( 属性清单 )]
                     AS  SELECT 语句
                     [ WITH  [ CASCADED | LOCAL ]   CHECK  OPTION ];
    

    8.5 更新视图

        更新视图是指通过视图来插入(INSERT)、更新(UPDATE)、删除(DELETE)表中的数据。
        因为视图是一个虚拟表,所以其中没有数据。
        通过视图更新时,都是转换到基本表来更新。
        更新视图时,只能更新权限范围内的数据,超出了范围,就不能更新。
        注意:
        视图中虽然可以更新数据,但是有很多限制。
        一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。
        因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,可能会造成数据更新失败。
    

    8.6 删除视图

        删除视图时,只能删除视图的定义,不会删除数据。
        MySQL中,使用DROP VIEW来删除视图。但是用户必须拥有DROP权限。
        语法:
            DROP VIEW [IF EXISTS] 视图名列表 [RESTRICT  |  CASCADE]
        其中,IF EXISTS参数指判断视图存在,如果存在则执行,不存在则不执行;“视图名列表”参数表示要删除的视图的名称的列表。
    

    8.8 常见问题及解答

        1.MySQL中视图和表的区别及联系是什么?
            区别:
            (1)视图是按照SQL语句生成的一个虚拟的表;
            (2)视图不占实际的物理空间,而表中的记录需要占物理空间;
            (3)建立和删除视图只影响视图本身,不会影响实际的记录。而建立和删除表会影响实际的记录。
            联系:
            (1)视图是建立在表之上的表,其字段和记录都来自基本表,其依赖基本表而存在;
            (2)一个视图可以对应一个基本表,也可以对应多个基本表;
            (3)视图是基本表的抽象,在逻辑意义上建立的新关系。
        2.为什么视图更新不了?
        可能的原因:
            视图中包含SUM()、COUNT()、MAX()、MIN()等函数;
            视图中包含UNION、UNION ALL、DISTINCT、GROUP BY、HAVING等关键字;
            视图是一个常量视图,而且该列没有包含在视图中等。
    

    参考文献:
    1.《MySQL入门很简单》

    展开全文
  • 3.创建并显示视图

    2018-09-05 10:04:22
    无论是使用Android SDK中的各种视图和小部件,还是创建自定义显示,所有的应用程序都需要使用视图来与用户进行交互。在Android中构建用户界面的首选方法是,在XML中将其定义,然后在运行调用。 Android中的视图...

    3.1 问题

    应用程序需要视图元素来显示消息并与用户交互。

    3.2 解决方案

    (API Level1)
    无论是使用Android SDK中的各种视图和小部件,还是创建自定义显示,所有的应用程序都需要使用视图来与用户进行交互。在Android中构建用户界面的首选方法是,在XML中将其定义,然后在运行时调用。
    Android中的视图结构是树状的,根部通常是Activity或窗口的内容视图。ViewGroup是一种特殊的视图,用于管理一个或多个子视图的显示方式。子视图可以是另一个ViewGroup,整颗视图树就这样继续生长。所有的标准布局类都源自ViewGroup,经常作为XML布局文件的根节点。

    3.3 实现机制

    下面定义一个有两个Button实例和一个EditText的布局来接收用户输入。我们可以在res/layout中定义一个名为main.xml的文件,参见以下代码:
    res/layout/main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:id="@+id/save"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Save"/>
            <Button
                android:id="@+id/cancel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:text="Cancel"/>
        </LinearLayout>
    </LinearLayout>

    Linearlayout是一个ViewGroup,它将元素横向或纵向排列。在main.xml中,EditText和其中的LinearLayout是按序纵向排列的。内部的LinearLayout(里面是按钮)的内容是横向排列的。带有android:id值的视图元素可以在Java代码中引用,以备进一步自定义或显示之用。
    为了用这个布局显示Activity的内容,必须在运行时将其填充。经过重载的Activity.setContentView()方法可以很方便地完成这个工作,只需要提供布局的ID值即可。在Activity中设置布局就是这样简单:

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
          //继续初始化 Activity
        }

    除了提供ID值(main.xml有一个自动生成ID——R.layout.main),不需要其他的内容。如果在将布局附加到窗口之前还需要进一步自定义,可以手动将其填充,在完成所需的自定义后再将其作为内容视图添加。以下代码填充了同一个布局,但在显示之前加上了第三个按钮。
    在显示之前修改布局

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
               //填充布局文件
            LinearLayout layout = (LinearLayout)getLayoutInflater().inflate(R.layout.main,null);
            //添加一个按钮
            Button reset  = new Button(this);
            reset.setText("Reset Form");
            layout.addView(reset,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
            //将视图关联到窗口
            setContentView(layout);

    在这个示例中,这个XML布局是在Activity的代码中用LayoutInflater填充的,它的inflate()方法会返回一个指向填充后的视图的句柄。因为LayoutInflater.inflate()返回的是视图,所以我们必须将其转换成XML中的某个子类,这样才能在将其关联到窗口之前进行修改。

    注意:
    XML布局文件中的根元素是LayoutInflater.inflate()返回的View元素。

    inflate()的第二个参数代表父ViewGroup,这个参数非常重要,因为它定义了如何解释被填充布局中的LayoutParams。可能的话,只要你知道被填充视图的父视图,就应该把它传进来;否则,XML中根视图的LayoutParams会被忽略。当传入一个父视图后,还要注意inflate()的第三个参数,该参数决定了被填充的布局是否会自动关联到父视图上。在后面的示例中会看到这种机制对于自定义视图是非常有用的。但在本例中,我们填充的是Activity最顶层的视图,因为这里传递了null。

    完全自定义视图

    有时,SDK中的可用小部件不足以提供你所需的输出。或许是要将多个显示元素结合到单个视图中,减少层次结构中视图的数量以提升性能。对于这些情况,就要创建自己的View子类。创建View子类之后,类和框架之间就有两个主要的交互方面需要关注:测量和绘制

    测量
    自定义视图必须满足的第一个要求是向框架提供其内容的测量。在显示视图的层次结构之前,Android会为每个元素(布局和视图节点)调用onMeasure()并向该方法传递两个约束,视图应该使用两个约束来管理如何报告其应该具备的大小。每个约束是一个称为MeasureSpec的封包整数,它包含模式标记和大小值。其中,模式采用如下值之一:

    • AT_MOST : 如果视图的布局参数是match_parent或存在其他的大小上限,则通常使用此模式。该模式告诉视图,其应该报告所需大小,前提是不超出规范中规定的值。
    • EXACTLY : 如果视图的布局参数是固定的,则通过使用此模式。框架期望视图自动设置大小及匹配规范——不多不少。
    • UNSPECIFIED : 该值通常用于指出视图在无约束时所需大小。它可能是另一个具有不同约束的测量的前置模式,或者可能只是因为布局参数被设置为wrap_content且父节点中没有其他约束。在此模式中,视图可能报告其在任何情况下所需的大小。此规范中的大小通常为0。

    完成所报告大小的计算之后,必须在onMeasure()返回之前将这些值传入setMeasuredDimension()调用。如果没有这样做,框架将报告严重的错误。
    通过测量还可以基于可用控件配置视图的输出。测量约束基本上表明在布局内分配了多少空间,因此如果要创建的视图在方向上与其所包含的内容不同,例如垂直空间或多或少,onMeasure()将提供决策所需的信息。
    注意:
    在测量期间,视图实际上还没有确定大小;它只有已测量的尺寸。如果在分配大小后需要对视图做一些自定义工作,则应该重写onSizeChanged()并添加适当的代码。

    绘制
    自定义视图的第二个步骤就是绘制内容,这可能是最重要的步骤。对视图进行测量并将其放置在布局层次结构中之后,框架将为该视图构造一个Canvas示例,调整其大小并放置在适当的位置,然后通过onDraw()传递该实例以供视图使用。Canvas对象驻留单独的绘制调用,因此它包括的drawLine()、drawBitmap()和drawText()等方法用于独立地布局视图内容。如同其名称所暗示的那样,Canvas使用Painter的算法,因此最后绘制的项将放在第一个绘制项的顶部。
    绘制的内容会依附到通过测量和布局提供的视图的边界上,因此虽然可以对Canvas元素进行平移、缩放、旋转等操作,但不能在放置视图的矩形外部绘制内容。
    最后,在onDraw()中提供的内容不包括视图的背景,可以使用setBackgroundColor()或setBackgroundResource()等方法设置该背景。如果在视图上设置背景,则背景会自动绘制,不需要再onDraw()中进行处理。
    以下代码显示了应用程序可以遵循的非常简单的定制视图模版。至于其中的内容,我们绘制了一系列同心圆表示靶心目标。
    自定义视图的示例

    public class BullsEyeView extends View {
    
        private Paint mPaint;
        private Point mCenter;
        private float mRadius;
    
        /*
         * Java构造函数
         */
        public BullsEyeView(Context context) {
            this(context, null);
        }
    
        /*
         * XML构造函数
         */
        public BullsEyeView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        /*
         * 带有样式的XML构造函数 
         */
        public BullsEyeView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            //在此构造函数中进行视图的初始化工作
    
            //创建用于绘制的画刷
            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            //我们要绘制填充的圆
            mPaint.setStyle(Style.FILL);
            //创建圆的中心点
            mCenter = new Point();
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int width, height;
            //确定内容的理想大小,无约束
            int contentWidth = 200;
            int contentHeight = 200;
    
            width = getMeasurement(widthMeasureSpec, contentWidth);
            height = getMeasurement(heightMeasureSpec, contentHeight);
            //必须使用测量值调用此方法!
            setMeasuredDimension(width, height);
        }
    
        /*
         *用于测量宽度和高度的辅助方法
         */
        private int getMeasurement(int measureSpec, int contentSize) {
            int specSize = MeasureSpec.getSize(measureSpec);
            switch (MeasureSpec.getMode(measureSpec)) {
                case MeasureSpec.AT_MOST:
                    return Math.min(specSize, contentSize);
                case MeasureSpec.UNSPECIFIED:
                    return contentSize;
                case MeasureSpec.EXACTLY:
                    return specSize;
                default:
                    return 0;
            }
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            if (w != oldw || h != oldh) {
                //如果有变化,则复位参数
                mCenter.x = w / 2;
                mCenter.y = h / 2;
                mRadius = Math.min(mCenter.x, mCenter.y);
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            //绘制一系列从小到大且颜色交替变换的同心圆
            mPaint.setColor(Color.RED);
            canvas.drawCircle(mCenter.x, mCenter.y, mRadius, mPaint);
    
            mPaint.setColor(Color.WHITE);
            canvas.drawCircle(mCenter.x, mCenter.y, mRadius * 0.8f, mPaint);
    
            mPaint.setColor(Color.BLUE);
            canvas.drawCircle(mCenter.x, mCenter.y, mRadius * 0.6F, mPaint);
    
            mPaint.setColor(Color.WHITE);
            canvas.drawCircle(mCenter.x, mCenter.y, mRadius * 0.4F, mPaint);
    
            mPaint.setColor(Color.RED);
            canvas.drawCircle(mCenter.x, mCenter.y, mRadius * 0.2F, mPaint);
        }
    }

    首先可以注意到该视图有如下3个构造函数:

    • View(Context context):通过Java代码构造视图时使用该版本。
    • View(Context,AttributeSet):从XML填充视图时使用该版本。AttributeSet包括附加到视图的XML元素的所有属性。
    • View(Context,AttributeSet,int):该版本类似于上一个版本,但在将样式属性添加到XML元素时被调用。

    常用的方案是将所有3个构造函数链接在一起,并且仅在最后一个构造函数中实现定制,这就是我们在视图示例中完成的工作。
    在onMeasure()中,我们使用一种简单的实用方法,基于测量约束返回正确的尺寸。我们基本上可以在所需的内容大小(在此任意选择大小,但应该表示真实应用程序中的视图内容)和所提供的大小之间选择。对于AT_MOST,我们选择两者中较小的值;即视图的大小应该适合我们的内容,前提是不超出规范的大小。完成测量后,我们调用onSizeChanged()收集一些所需的基本数据来绘制目标圆。我们等到此处才调用该方法,这是为了确保使用确切符合视图布局的值。
    在onDraw()内部,我们构造显示内容。在Canvas上绘制5个逐步递减半径且颜色交替交换的同心圆。Paint元素控制所绘制内容样式的相关信息,例如笔画宽度,文本大小和颜色。在为此视图声明Paint时,设置样式为FILL,这就确保使用每种颜色填充圆。根据Painter的算法,在较大圆的顶部绘制较小的圆,这就提供了我们所需的目标效果。
    将此视图添加到XML布局非常简单,但因为视图没有驻留在android.view或android.widget包中,我们需要使用类的完全限定包名命名元素。例如,如果应用程序包是com.androidrecipes.customwidgets,则XML代码如下所示:

        <com.examples.customwidgets.BullsEyeView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    如图显示了将此视图添加到Activity的结果。
    靶心定制视图

    展开全文
  • 查询每次引用视图时,Microsoft® SQL Server™ 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑中。生成视图结果的过程称为视图具体化。有关更多信息,请参见视图解析...

    视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在 SQL 语句中引用视图的方式也与引用表的方式相同。标准视图的结果集不是永久地存储在数据库中。查询每次引用视图时,Microsoft® SQL Server™ 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑中。生成视图结果的过程称为视图具体化。有关更多信息,请参见视图解析。

    对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图更为可观。若经常在查询中引用这类视图,可通过在视图上创建唯一聚集索引来提高性能。在视图上创建唯一聚集索引时将执行该视图,并且结果集在数据库中的存储方式与带聚集索引的表的存储方式相同。

    说明  只有安装了 Microsoft SQL Server 2000 企业版或 Microsoft SQL Server 2000 开发版,才可以创建索引视图。

    在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命名视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。有关更多信息,请参见在视图上使用索引。

    在视图上创建聚集索引可存储创建索引时存在的数据。索引视图还自动反映自创建索引后对基表数据所做的更改,这一点与在基表上创建的索引相同。当对基表中的数据进行更改时,索引视图中存储的数据也反映数据更改。视图的聚集索引必须唯一,从而提高了 SQL Server 在索引中查找受任何数据更改影响的行的效率。

    与基表上的索引相比,对索引视图的维护可能更复杂。只有当视图的结果检索速度的效益超过了修改所需的开销时,才应在视图上创建索引。这样的视图通常包括映射到相对静态的数据上、处理多行以及由许多查询引用的视图。

    视图的要求

    在视图上创建聚集索引之前,该视图必须满足下列要求:

    • 当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。OBJECTPROPERTY 函数通过 ExecIsAnsiNullsOn 或 ExecIsQuotedIdentOn 属性为视图报告此信息。

    • 为执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。

    • 视图不能引用任何其它视图,只能引用基表。

    • 视图引用的所有基表必须与视图位于同一个数据库中,并且所有者也与视图相同。

    • 必须使用 SCHEMABINDING 选项创建视图。SCHEMABINDING 将视图绑定到基础基表的架构。

    • 必须已使用 SCHEMABINDING 选项创建了视图中引用的用户定义的函数。

    • 表和用户定义的函数必须由 2 部分的名称引用。不允许使用 1 部分、3 部分和 4 部分的名称。

    • 视图中的表达式所引用的所有函数必须是确定性的。OBJECTPROPERTY 函数的 IsDeterministic 属性报告用户定义的函数是否是确定性的。有关更多信息,请参见确定性函数和非确定性函数。

    • 视图中的 SELECT 语句不能包含下列 Transact-SQL 语法元素:
      • 选择列表不能使用 * 或 table_name.* 语法指定列。必须显式给出列名。

      • 不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:
        SELECT ColumnA, ColumnB, ColumnA
        

        下列选择列表是合法的:

        SELECT ColumnA, AVG(ColumnA), ColumnA + Column B AS AddColAColB
        
        SELECT SUM(ColumnA), ColumnA % ColumnB AS ModuloColAColB
        
      • 派生表。

      • 行集函数。

      • UNION 运算符。

      • 子查询。

      • 外联接或自联接。

      • TOP 子句。

      • ORDER BY 子句。

      • DISTINCT 关键字。

      • COUNT(*)(允许 COUNT_BIG(*)。)
      • AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。如果在引用索引视图的查询中指定 AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。
        复杂聚合函数 替代简单聚合函数
        AVG(X)

        SUM(X), COUNT_BIG(X)

        STDEV(X)

        SUM(X), COUNT_BIG(X), SUM(X**2)

        STDEVP(X)

        SUM(X), COUNT_BIG(X), SUM(X**2)

        VAR(X)

        SUM(X), COUNT_BIG(X), SUM(X**2)

        VARP(X)

        SUM(X), COUNT_BIG(X), SUM(X**2)


        例如,索引视图选择列表不能包含表达式 AVG(SomeColumn)。如果视图选择列表包含表达式 SUM(SomeColumn) 和 COUNT_BIG(SomeColumn),则 SQL Server 可为引用视图并指定 AVG(SomeColumn) 的查询计算平均数。

      • 引用可为空的表达式的 SUM 函数。
      • 全文谓词 CONTAINS 或 FREETEXT。
      • COMPUTE 或 COMPUTE BY 子句。
    • 如果没有指定 GROUP BY,则视图选择列表不能包含聚合表达式。
    • 如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,并且,视图定义不能指定 HAVING、CUBE 或 ROLLUP。
    • 通过一个既可以取值为 float 值也可以使用 float 表达式求值的表达式而生成的列不能作为索引视图或表的索引的键。
    CREATE INDEX 语句的要求

    在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。有关更多信息,请参见 CREATE INDEX。

    除了一般的 CREATE INDEX 要求外,CREATE INDEX 语句还必须满足下列要求:

    • 执行 CREATE INDEX 语句的用户必须是视图的所有者。
    • 当执行 CREATE INDEX 语句时,下列 SET 选项必须设置为 ON:
      • ANSI_NULLS
      • ANSI_PADDING
      • ANSI_WARNINGS
      • ARITHABORT
      • CONCAT_NULL_YIELDS_NULL
      • QUOTED_IDENTIFIERS
    • 必须将选项 NUMERIC_ROUNDABORT 选项设置为 OFF。
    • 视图不能包含 text、ntext 或 image 列,即使在 CREATE INDEX 语句中没有引用它们。
    • 如果视图定义中的 SELECT 语句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定的列。
    注意事项

    创建聚集索引后,对于任何试图为视图修改基本数据而进行的连接,其选项设置必须与创建索引所需的选项设置相同。如果这个执行语句的连接没有适当的选项设置,则 SQL Server 生成错误并回滚任何会影响视图结果集的 INSERT、UPDATE 或 DELETE 语句。有关更多信息,请参见影响结果的 SET 选项。

    若除去视图,视图上的所有索引也将被除去。若除去聚集索引,视图上的所有非聚集索引也将被除去。可分别除去非聚集索引。除去视图上的聚集索引将删除存储的结果集,并且优化器将重新象处理标准视图那样处理视图。

    尽管 CREATE UNIQUE CLUSTERED INDEX 语句仅指定组成聚集索引键的列,但视图的完整结果集将存储在数据库中。与基表上的聚集索引一样,聚集索引的 B 树结构仅包含键列,但数据行包含视图结果集中的所有列。

    若想为现有系统中的视图添加索引,必须计划绑定任何想要放入索引的视图。可以:

    • 除去视图并通过指定 WITH SCHEMABINDING 重新创建它。
    • 创建另一个视图,使其具有与现有视图相同的文本,但是名称不同。优化器将考虑新视图上的索引,即使在查询的 FROM 子句中没有直接引用它。

    说明  不能除去参与到用 SCHEMABINDING 子句创建的视图中的表或视图,除非该视图已被除去或更改而不再具有架构绑定。另外,如果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响视图定义,则这些语句将会失败。

    必须确保新视图满足索引视图的所有要求。这可能需要更改视图及其所引用的所有基表的所有权,以便它们都为同一用户所拥有。

    转自:http://goaler.xicp.net/ShowLog.asp?ID=526

    转载于:https://www.cnblogs.com/Dicky/archive/2005/02/01/122583.html

    展开全文
  • 本人在前段时间实际开发工作中遇到一个很奇怪的问题,就是Ext.Window在创建之后,显示出来头部就超出屏幕可见区域造成窗口无法拖动的问题很是苦恼, 后来通过查阅Ext的API文档得知其中window有个...
  • MySQL视图

    2015-11-07 17:43:04
    *****MySQL视图********1、视图(1)视图是一个虚拟的表,是从数据库中一个或多个表中导出来的表 (2)数据库中只存放了视图的定义,而并没有存放视图的...(3)提高表的逻辑独立性3、创建视图create [algorithm = {u
  • 视图

    2017-09-11 19:15:00
    视图, 默认指的是关系视图, 又叫虚表。 不占用数据空间可以简化语句可以隐藏细节可以提升安全 除了关系视图,广义的视图包括: 关系视图(狭义的视图,虚表)内嵌视图(子查询中的临时结果)对象视图(面向对象)...
  • MySQL:视图

    2019-04-13 19:13:22
    视图:视图概念,视图作用,操作视图,更新视图 一:视图概念 视图就是一条select 语句执行后返回的结果集, ...关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息, 简化操作; (2)对机密数...
  • MySQL中视图的定义、原理和如何使用、创建

    万次阅读 多人点赞 2016-05-26 09:56:24
    林炳文Evankaka原创作品。转载请注明出处...  摘要:本文主要讲了  林炳文Evankaka原创作品。...  摘要:本文主要讲了MySQL中视图的定义、原理和如何使用、创建、删除等 一. 视图概述
  • 使用索引的列创建筛选的视图是一个两步过程: 创建索引的列并创建使用索引的列筛选的视图视图: 索引 索引快速检索的项目,并且可以提高列表和库的性能。您可以创建最多 20 个索引的列表或库。唯一值需要...
  • arcgis中创建逼真的三维视图

    千次阅读 2014-03-03 13:31:00
    规划和交通部门的员工已为这一区域的建筑物轮廓线、街灯、树木和样品车创建了 GIS 数据集。您还拥有这一区域的影像,且一名建筑师已提供了一组照片般逼真的建筑模型。 您要将 GIS 数据与 ArcGlobe 中的影像和...
  • iOS 基本视图创建-UIImageView

    千次阅读 2018-05-25 16:09:46
    基本创建 UIImageView *IconView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200, 300, 300)]; IconView.center = self.view.center; IconView.image = [UIImage imageNamed:@"test...
  • MySQL数据库——视图

    千次阅读 2019-04-12 10:18:58
    1、什么是视图 视图就是一条SELECT语句执行后返回的结果集, ...关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息, 简化操作; (2)对机密数据提供保护作用 不希望用户访问表中某些含敏感...
  • 视图操作 小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试。这时候很多班级筛选出来的这些同学就可以临时组成一个班级,如果我们把每一个班级都当做是一张真实的表,...
  • MySql视图原理讲解与使用大全

    千次阅读 2015-07-31 16:58:42
    摘要:本文主要讲了MySql中视图的定义、原理和如何使用、创建、删除等
  • MySQL-视图

    2017-07-30 19:31:42
    视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。视图可以使用户的操作...
  • 1、什么是视图 视图就是一条SELECT语句执行后返回的结果集, ...关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息, 简化操作; (2)对机密数据提供保护作用 不希望用户访问表中某些含敏感...
  • mysql视图

    2015-05-18 09:10:10
    视图是虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图...创建视图格式: create [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WITH [CAS
  • 旋转循环页视图实现 设置节点 编写代码 在这一节中我们实现一个类似旋转门的页视图...首先创建以下节点: 1. cardsNode为一个空节点,大小跟Canvas一样(我们之后会在该节点上设置触摸监听)。 2. card1...
  • OCUI界面设计:视图视图控制器

    千次阅读 2015-08-07 06:29:34
    视图视图控制器
  • 对于基于视图创建的odoo模型,我们在创建数据库视图时需要给一个唯一性标识(ID)。 这个时候就需要确定ID怎么取值: 对于以某一个表作为主表查询结果创建视图,或者可以找到一个唯一性标识的, 这种情况下,以主...
  • Scrollbar:滑动块 本身自带Image:代表的是背景图片 子物体:sliding area:代表的是滑动块图片 Scrollbar的属性: Direction:方向 ...6.在第一个panel添加组件Mask超出镜头范围即可隐藏。
  • 关于对视图创建索引的一些问题

    千次阅读 2007-08-07 17:14:00
    今天晚上在网上找了一些关于对视图创建索引的文章,比较不错,发上来:第一篇 聚集索引与非聚集索引索引是在数据库表或者视图创建的对象,目的是为了加快对表或视图的查询的速度按照存储方式分为:聚集与非聚集...
  • 手把手教你mysql(十一)视图创建和查看   一: 视图的简介,作用,优点 1. 什么是视图? a. 视图是一种虚拟的表,是从数据库中一个或者多个表中导出的表 b. 数据库只存放了视图的定义,而并没有存放视图中的数据...
  • iOS开发系列课程(09) --- 滚动视图

    千次阅读 2015-10-07 17:31:48
    移动设备的屏幕⼤小是极其有限的,因此直接展⽰在⽤户眼前的内容也相当有限,当展⽰的内容较多超出一个屏幕,用户可通过滚动操作来查看屏幕以外的内容,普通的UIView不具备滚动功能,不能显⽰过多的内容。...
  • //1.点击textField没有响应 //(1)textField上面还有视图 UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 220, 40)]; tf.backgroundColor = [UIColor yellowColor]; tf.borderStyle
  • 数据查询、试图、索引及连接操作数据查询试图索引及连接操作 ANSI SQL 的select语句 选择指定的列 条件查询 SQL 关于 LIKE 子句和通配符的...创建视图 使用视图 修改和删除视图 索引 高级连接 ANSI SQL 的select语句
  •  (1)textField上面还有视图(如下)  UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 220, 40)];  tf.backgroundColor = [UIColor yellowColor];  tf.borderSt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,637
精华内容 16,654
关键字:

创建视图时视图超出范围