精华内容
下载资源
问答
  • 1、COUNT简介看看官网对COUNT的简介大致意思是COUNT(expr)返回SELECT语句中expr值不为NULL的行数,返回的结果类型为BIGINT;当没有匹配的行时,返回0;SELECT(*)将返回包括NULL值的行数。2、COUNT函数常用的几种...

    前言:COUNT函数相比大家都不陌生,接触过数据库的兄弟们想必都用过,但是,就是这个常用的COUNT函数,却暗含许多玄机。

    1、COUNT简介

    看看官网对COUNT的简介

    94065de9b3bd91d753e93bd20d0a9eda.png

    大致意思是:COUNT(expr)返回SELECT语句中expr值不为NULL的行数,返回的结果类型为BIGINT;当没有匹配的行时,返回0;SELECT(*)将返回包括NULL值的行数。

    2、COUNT函数常用的几种用法

    COUNT(常量),COUNT(*),COUNT(字段),那么他们之间都有什么区别。

    实际上,从前面的简介中就可以看出,COUNT(字段)和COUNT(*)的区别,COUNT(字段)返回的行数是不包括该字段为NULL的字段的,而COUNT(*)返回的行数其实就是实际查询结果的总行数,那么我们再看看COUNT(常量),举个例子,例如COUNT(1),1肯定不为NULL,那么根据MySQL COUNT(expr)的简介,返回expr值不为NULL的行数,那么其实COUNT(常量)返回的也是实际查询结果的总行数。

    下面我们建个表简单测试一下:

    create table count_test(col1 varchar(1),col2 varchar(1));

    insert into count_test value ('1','1');

    insert into count_test value ('1',null);

    insert into count_test value (null,'1');

    insert into count_test value ('1','1');

    insert into count_test value (null,'1');

    insert into count_test value ('1','1');

    select COUNT(1),COUNT(*),COUNT(col1),COUNT(col2) from count_test;

    a991fcadfc16a8f320cf18e5588ce711.png

    3、COUNT(*)和COUNT(1)到底该怎么选择

    如果有看过阿里的开发手册,就会知道阿里强制要求开发人员使用COUNT(*)进行数据统计,而非是COUNT(1),到底是为什么呢?

    在SQL92中,COUNT(*)是标准的统计行数的语法,而作为标准语法,MySQL本身其实是对COUNT(*)做了很多优化的,那么我们接下来看看MySQL对COUNT(*)做了哪些优化。

    MySQL对COUNT(*)其实在不同的存储引擎中是不同的,那么我们主要看看两种常用的存储引擎MyISAM和InnoDB。

    首先我们简单看看MyISAM和InnoDB的区别。MyISAM不支持事务,并且使用的是表锁;InnoDB支持事务,并且支持行锁。

    接下来我们看看到底做了什么优化:

    MyISAM:前面我们说到,MyISAM使用的是表锁,所以我们在进行读操作时,并不需要担心会有写操作对这张表进行修改,从而影响表中行数,在这样的前提下,MyISAM做了一个简单的优化,那就是单独把表中总行数单独记录下来,在使用SELECT COUNT(*)进行查询时,直接返回这个记录下来的数值就可以,当然有一个前提就是不能带where条件。

    InnoDB:说完MyISAM中的优化,我们再来看看InnoDB,首先InnoDB是支持行级锁的,那么就不能像MyISAM那样将行数缓存下来,因为在进行COUNT(*)查询时是有可能有写操作对行数产生影响的。那么InnoDB到底是怎么优化COUNT(*)的呢?我们都知道,COUNT(*)实际上是要进行全表扫描的,那不可避免的就要使用索引,而COUNT(*)并不关心获取的数据各字段的字段的值,那么在使用COUNT(*)进行查询的时候,MySQL会尽量选择一个成本最小的索引进行全表扫描。那么这里就不得不说一下聚簇索引和非聚簇索引了。

    在说聚簇索引和非聚簇索引之前,我们先简单的说一下,使用InnoDB存储引擎,实际上索引和数据是存在同一个文件下的(*.idb),然后表中数据是存在索引的叶子节点的(这里不理解的可以先学习一下索引和B+树),那么但有多个索引时,总不能每个索引的叶子节点都存一份完整的数据,这样不仅浪费磁盘空间,同时也为造成查询IO的瓶颈问题。这时候就有了聚簇索引和非聚簇索引。

    聚簇索引:根据上面说的,不可能每一个索引的叶子结点都存一份完整的数据,只需要其中一个索引的叶子结点存一份完整的数据即可,而这个索引就是聚簇索引,默认是主键索引,如果没有主键,会找第一个非空的唯一索引,如果还是没找到,就会以rowid创建一个索引作为聚簇索引。

    非聚簇索引:那么什么是非聚簇索引呢,前面说到不可能每个索引的叶子结点都存一份完整的数据,那除了聚簇索引,其他索引的叶子结点应该存什么数据呢。其实这些索引的叶子节点存的是数据id值,也就聚簇索引节点中存的key值,而这些索引就是非聚簇索引。

    那么回到前面的InnoDB对COUNT(*)的优化,MySQL会尽量选择一个成本最小的索引进行全表扫描,显然扫描非聚簇索引索引的成本是远远小于扫描聚簇索引的,而MySQL会选择一个成本最小的非聚簇索引进行全表扫描,这么说来,其实创建一个非主键索引也是非常必要的。当然这些都是在查询语句不包含where、group by等的前提下。

    那么,有的人会说了,难道MySQL只对COUNT(*)做了优化,对COUNT(1)没有做优化吗?我们看看MySQL官方是怎么说。

    InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

    大意是说:对于COUNT(1)和COUNT(*),MySQL的优化是完全一样的,根本不存在谁比谁快!

    那么既然COUNT(1)和COUNT(*)优化一致,而COUNT(*)又是SQL92定义的标准统计语法,那么为啥不用COUNT(*)呢?

    4、总结

    本文简单介绍了MySQL中COUNT(字段),COUNT(常量),COUNT(*)之间的区别,相对于COUNT(字段),COUNT(常量)和COUNT(*)的效率更高,并且查询的结果是实际的总行数(包括NULL),而COUNT(*)又是SQL92定义的标准语法,所以在日常工作中推荐使用COUNT(*)进行行统计。

    不知道大家有没有发现,本文中关于MySQL对COUNT(*)的优化都有一个前提,那就是查询语句不能包括where、group by,那么在有where的条件下,MySQL又是如何对COUNT(*)进行优化的呢,这个留作一个问题,在下篇文章中进行分析。

    --------------------------------------------------------------------------------------------

    展开全文
  • 主函数都是直接用的下面形式:#include而在C++标准中,其实main函数的主要形式有:int 前者就是前面提到的形式,而后者在C++开发中更常用到,那后者main函数的argc和argv参数是什么意思呢?这两个参数主要是用来保存...

    7b1b7e726424168c1f5be5a5343b9dbb.png

    1、argc 和 argv

    一般入门C或者C++基础知识时,主函数都是直接用的下面形式:

    #include

    而在C++标准中,其实main函数的主要形式有:

    int 

    前者就是前面提到的形式,而后者在C++开发中更常用到,那后者main函数的argcargv参数是什么意思呢?

    这两个参数主要是用来保存程序运行时传递给main函数的命令行参数的。

    1. argc:是argument count 的缩写,保存运行时传递给main函数的参数个数。
    2. argv:是argument vector 的缩写,保存运行时传递main函数的参数,类型是一个字符指针数组,每个元素是一个字符指针,指向一个命令行参数。

    argv[0]指向程序运行时的全路径名;

    argv[1] 指向程序在命令行中执行程序名后的第一个字符串;

    argv[2] 指向程序在命令行中执行程序名后的第二个字符串;

    以此类推直到argv[argc]......

    argv[argc] 在C++中指向nullptr,在C语言中指向NULL。

    2、实验验证

    运行如下代码:

    #include 

    先再vs中打断点:

    1f550792572adc3e2ab062a1a112f8fb.png

    运行程序后先在DOS中输出:

    12678635f6d20979c9d32d91e79d3e57.png

    然后程序崩溃:

    2b107ca8eb092f63b62b624bcd245497.png

    原因在于程序第13行引用数组越界,因为argv[argc] = nullptr(NULL):

    cout 

    将改行注释掉并重新编译生成,再从命令行启动程序,并在后面增加参数,每个参数用空格分隔:

    f4be0e43cf806b24ba66151f05cae7d7.png

    结果如下:

    405dfecc59e87882a454e0371b4ac273.png

    因此便可说明前述是正确的。

    展开全文
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    MySql的用户管理通过 User表来实现的,添加新用户常用的方法有两个,一在User表插入相应的数据行,同时设置相应的权限;二通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
  • 0x03: 聚合与排序

    2019-09-12 20:05:32
    什么是聚合函数? 用于汇总的函数称为聚合函数。所谓聚合,就是将多行汇总为一行。实际上,所有的聚合函数这样,输入多行输出一行。 常用的聚合函数 计算表中数据的行数 SELECT COUNT(*) FROM Product; 想要...

    聚合查询

    什么是聚合函数?

    用于汇总的函数称为聚合函数。所谓聚合,就是将多行汇总为一行。实际上,所有的聚合函数都是这样,输入多行输出一行。

    常用的聚合函数

    在这里插入图片描述

    计算表中数据的行数

    SELECT COUNT(*) FROM Product;
    

    想要计算表中全部数据的行数时,可以像SELECT COUNT(*) 这
    样使用星号。但是如果想列出某列非空的行数时,要用该列作为COUNT函数的参数。意思就是说,COUNT并不统计为NULL的数据。

    SELECT COUNT(purchase_price) FROM Product;
    

    另外,星号只能在COUNT中使用,其它的聚合函数不配用*。

    计算合计值

    SELECT SUM(sale_price) FROM Product;
    

    所有的聚合函数,如果以列名为参数,那么在计算之前就已经把NULL 排除在外了。并不是说NULL被当作0对待。

    计算平均值

    SELECT AVG(sale_price) FROM Product;
    

    计算最大值和最小值

    SELECT MAX(sale_price), MIN(purchase_price) FROM Product;
    

    MAX/MIN 函数和SUM/AVG 函数有一点不同,那就是SUM/AVG 函数只能对数值类型的列使用,而MAX/MIN 函数原则上可以适用于任何数据类型的列。

    使用聚合函数删除重复值

    应用场景:
    比如我们需要统计一共有多少个种类的商品。我们用count(*)是不正确的,因为在Product表中,product_type列中有大量重复数据,所以我们要对其进行去重操作,方式当然就是我们之前学过的DISTINCT了。

    SELECT COUNT(DISTINCT product_type)
    FROM Product;
    

    请注意,这时DISTINCT 必须写在括号中。这是因为必须要在计算行数之前删除product_type 列中的重复数据。 即 DISTINCT product_type 删除重复数据之后,交给了COUNT函数进行处理。
    如果用下面的语句那就错了:

    SELECT DISTINCT COUNT(product_type)
    FROM Product;
    

    这样会先返回聚合的结果,只有一行一列的数据,再DISTINCT也没用了。

    对表进行分组

    使用GROUP BY 子句可以像切蛋糕那样将表分割。
    应用场景:分别对某列中的不同项进行分别统计。比如统计一个班级中男生女生分别有多少人。
    语法:

    SELECT <列名1>, <列名2>, <列名3>, ……
    FROM <表名>
    GROUP BY <列名1>, <列名2>, <列名3>, ……;
    

    在未使用GROUP BY 子句时,是将表中的所有数据作为一组来对待的。而使用GROUP BY 子句时,会将表中的数据分为多个组进行处理。GROUP BY 子句对表进行了切分。怎么切的呢? 按GROUP BY 中指定的列的值进行分组的,相同值的分在一组。
    在GROUP BY 子句中指定的列称为聚合键或者分组列

    暂时我们学过的SQL语句的书写顺序如下:

    1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
    

    ATTENTION:SQL语句的难点就在于,书写顺序不等于执行顺序,要分别记忆。搞明白这个以后所有问题就迎刃而解了。

    使用WHERE子句时GROUP BY的执行结果

    SELECT purchase_price, COUNT(*)
    FROM Product
    WHERE product_type = '衣服'
    GROUP BY purchase_price;
    

    我们得到的执行结果是这样的:
    在这里插入图片描述
    而Product表是这样的:
    在这里插入图片描述
    为什么会是这样的执行结果呢?
    因为执行顺序是这样的:

    FROM → WHERE → GROUP BY → SELECT
    

    WHERE语句率先筛选出了为衣服的记录,然后GROUP BY再以purchase_price进行分组。

    与聚合函数和GROUP BY子句有关的常见错误

    在这块经常容易出错。

    常见错误① ——在SELECT子句中书写了多余的列

    在使用COUNT 这样的聚合函数时,SELECT 子句中的元素有严格的限制。实际上,使用聚合函数时,SELECT 子句中只能存在以下三种元素。

    • 常数
    • 聚合函数
    • GROUP BY子句中指定的列名(也就是聚合键)

    如果出现其他的元素,则就错了。
    为什么不能出现其他的元素呢?其实想一想就明白了。如果是按照衣服进行分组的,也SELECT了商品名称的话,那么运动衫和运动T恤谁显示在商品名称那一栏呢?这就冲突了。

    常见错误② ——在GROUP BY子句中写了列的别名

    GROUP BY和WHERE语句的执行都是在SELECT之前的,只有SELECT子句可以定义列的别名,所以说GROUP BY 和 WHERE子句一样都不能用列的别名的。

    常见错误③ —— GROUP BY子句的结果能排序吗

    是随机的,可以排序,需要在SELECT语句中指定,这个日后再说。只需要知道结果是随机的,可以排序即可。

    常见错误④ ——在WHERE子句中使用聚合函数

    应用场景:如果我想筛选出某个种类有2件产品的组,怎么办?
    用下面的语句试试?

    SELECT product_type, COUNT(*)
    FROM Product
    WHERE COUNT(*) = 2
    GROUP BY product_type;
    

    但是很遗憾这样是不行的。
    WHERE子句中是不能用聚合函数的。
    聚合函数只能用在SELECT、HAVING和ORDER BY 子句中。
    HAVING子句可以很完美的解决这个应用场景。

    DISTINCT和GROUP BY的区别

    有人发现GROUP BY也可以实现去重。(图样图森破)
    是的,但是第一,GROUP BY发明出来是为了分组的。第二,GROUP BY的去重是受限了的(不在GROUP BY中的其余列不能被SELECT),第三,SQL是一种类似英文的操作语言,DISTINCT就是去重用的,GROUP BY就是分组用的,不能乱用。

    为聚合结果指定条件

    我们在用聚合查询的时候,有时候需要指定条件。比如我们想取出来聚合结果正好为2行的组。 我们并不能像普通的SQL语句一样用WHERE指定条件。在为聚合结果指定条件时,我们应当用HAVING语句。

    WHERE子句只能指定记录(行)的条件,而不能用来指定的条件(例如,“数据行数为2 行”或者“平均值为500”等)。

    对集合指定条件就需要使用其他的子句了,此时便可以用HAVING 子句。

    HAVING子句的语法:

    SELECT <列名1>, <列名2>, <列名3>, ……
    FROM <表名>
    GROUP BY <列名1>, <列名2>, <列名3>, ……
    HAVING <分组结果对应的条件>
    

    HAVING 子句必须写在GROUP BY 子句之后,其在DBMS 内部的执行顺序也排在GROUP BY 子句之后。

    使用HAVING 子句时SELECT 语句的书写顺序:
    SELECT → FROM → WHERE → GROUP BY → HAVING

    针对按照商品种类进行分组后的结果,指定“包含的数据行数为2 行”这一条件的
    SELECT 语句:

    SELECT product_type, COUNT(*)
    FROM Product
    GROUP BY product_type
    HAVING COUNT(*) = 2;
    

    下面我们再来看一个使用HAVING 子句的例子。这次我们还是按照商品种类对表进行分组,但是条件变成了“销售单价的平均值大于等于2500 日元”。

    SELECT product_type, AVG(sale_price)
    FROM Product
    GROUP BY product_type
    HAVING AVG(sale_price) >= 2500;
    

    HAVING子句的构成要素

    HAVING 子句和包含GROUP BY 子句时的SELECT 子句一样,能够使用的要素有一定的限制,限制内容也是完全相同的。HAVING 子句中能够使用的3 种要素如下所示。

    • 常数
    • 聚合函数
    • GROUP BY子句中指定的列名(即聚合键)

    下面我们来看一个错误的例子:

    SELECT product_type, COUNT(*)
    FROM Product
    GROUP BY product_type
    HAVING product_name = '圆珠笔';
    

    这样是不行的,因为product_name并不是本语句的要素。

    product_name 列并不包含在GROUP BY 子句之中,因此不允许写在HAVING 子句里。在思考HAVING 子句的使用方法时,把一次汇总后的结果(类似表3-2 的表)作为HAVING 子句起始点的话更容易理解。

    在这里插入图片描述
    可以把这种情况想象为使用GROUP BY 子句时的SELECT 子句。汇总之后得到的表中并不存在product_name 这个列,SQL 当然无法为表中不存在的列设定条件了。

    HAVING和WHERE如此相似,如何区分?

    也许有的读者已经发现了,有些条件既可以写在HAVING 子句当中,又可以写在WHERE 子句当中。这些条件就是聚合键所对应的条件。原表中作为聚合键的列也可以在HAVING 子句中使用。

    比如,下面的语句是等价的:

    SELECT product_type, COUNT(*)
    FROM Product
    GROUP BY product_type
    HAVING product_type = '衣服';
    

    SELECT product_type, COUNT(*)
    FROM Product
    WHERE product_type = '衣服'
    GROUP BY product_type;
    

    WHERE 子句 = 指定行所对应的条件
    HAVING 子句 = 指定组所对应的条件

    虽然执行结果是一样的,但是能用WHERE的时候不要用HAVING.
    因为用WHERE效率更高一点。**使用聚合函数对表中的数据进行聚合操作时,DBMS内部就会进行排序处理。**排序处理是会大大增加机器负担的高负荷的处理。因此,只有尽可能的减少排序的行数,才能提高处理速度。

    此外,WHERE 子句更具速度优势的另一个理由是,可以对WHERE 子句指定条
    件所对应的列创建索引
    ,这样也可以大幅提高处理速度。创建索引是一种非常普遍的提高DBMS 性能的方法,效果也十分明显,这对WHERE 子句来说也十分有利。

    对查询结果进行排序

    比如我们查询了全班的总成绩,想有个排名咋办?用眼睛找?那可真是太蠢了。我们应当进行排序。

    ORDER BY子句

    我们普通查询出来的结果,有时候看似是有序的,其实全部都是随机的。可能再次执行同一条SELECT语句,顺序可能不相同了就。我们可以在SELECT语句的末尾添加ORDER BY子句来明确指定排列顺序。

    ORDER BY语法

    SELECT <列名1>, <列名2>, <列名3>, ……
    FROM <表名>
    ORDER BY <排序基准列1>, <排序基准列2>, ……
    

    实例:

    SELECT product_id, product_name, sale_price, purchase_price
    FROM Product
    ORDER BY sale_price;
    

    不论何种情况,ORDER BY 子句都需要写在SELECT 语句的末尾。这是因为对数据行进行排序的操作必须在结果即将返回时执行。ORDER BY子句中书写的列名称为排序键。

    子句的书写顺序

    1. SELECT 子句 → 2. FROM 子句 → 3. WHERE 子句 → 4. GROUP BY 子句 →
    5. HAVING 子句 → 6. ORDER BY 子句
    

    指定升序或降序

    升序不用指定,默认就是升序。降序的话需要在列名后面使用DESC 关键字。

    SELECT product_id, product_name, sale_price, purchase_price
    FROM Product
    ORDER BY sale_price DESC;
    

    指定多个排序键

    但是现实应用中有一种其他的场景,一次排序并不能解决问题。因为比如分房子来说,学历都是硕士,积分一样,怎么办?那就比较一下工龄,工龄也一样,怎么办?那就比工作业绩,工作业绩也相同怎么办?比就读学校谁的更厉害。
    这种情况怎么用SQL来进行筛选呢?好办。指定多个排序键就可以了。
    它的逻辑是对第一个排序键排好序的结果,如果有几列结果相同,那么这几列执行第二个排序键,以此类推直到用所有的排序键进行排序。

    SELECT product_id, product_name, sale_price, purchase_price
    FROM Product
    ORDER BY sale_price, product_id;
    

    这样一来,就可以在ORDER BY 子句中同时指定多个排序键了。
    规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键。当然,也可以同时使用3 个以上的排序键。

    NULL的顺序

    使用含有NULL 的列作为排序键时,NULL 会在结果的开头或末尾汇总显示。因为NULL和数字或者字符串并不能比较大小。

    究竟是在开头显示还是在末尾显示,并没有特殊规定。

    在排序键中使用显示用的别名

    GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在ORDER BY 子句中却是允许使用别名的。

    因此下面的代码是正确的。

    ELECT product_id AS id, product_name, sale_price AS sp, purchase
    _price
    FROM Product
    ORDER BY sp, id;
    

    不能在GROUP BY 子句中使用的别名,为什么可以在ORDER BY子句中使用呢?
    当然还是因为执行顺序在作怪啦。

    使用HAVING 子句时SELECT 语句的执行顺序

    FROMWHEREGROUP BYHAVINGSELECTORDER BY
    

    一定要记住SELECT 子句的执行顺序在GROUP BY 子句之后,ORDER BY 子句之前。所以SELECT语句定义的别名GROUP BY根本不知道有这回事儿,而ORDER BY就知道有这回事儿。

    ORDER BY子句中可以使用的列

    SELECT product_name, sale_price, purchase_price
    FROM Product
    ORDER BY product_id;
    
    SELECT product_type, COUNT(*)
    FROM Product
    GROUP BY product_type
    ORDER BY COUNT(*);
    

    在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。

    不要使用列编号

    在ORDER BY 子句中,还可以使用在SELECT 子句中出现的列所对应的编号。
    列编号是指SELECT 子句中的列按照从左到右的顺序进行排列时所对应的编号(1, 2, 3, …)。
    因此下面两端代码是等效的。

    -- 通过列名指定
    SELECT product_id, product_name, sale_price, purchase_price
    FROM Product
    ORDER BY sale_price DESC, product_id;
    -- 通过列编号指定
    SELECT product_id, product_name, sale_price, purchase_price
    FROM Product
    ORDER BY 3 DESC, 1;
    

    官方已经说了要砍掉这个功能了。所以说以后还是少用为妙。

    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef和#define有什么区别? 1.14 我似乎不能成功定义一个链表。我试过typedefstruct{...
  • 1.11 extern在函数声明中是什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.11 extern在函数声明中是什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过...
  • o 2.4 extern 在函数声明中是什么意思? o 2.5 关键字 auto 到底有什么用途? o 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道...
  • 4.C#中的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    1.4 extern 在函数声明中是什么意思? . . . . . . . . . . . . . . . . . 2 1.5 关键字auto 到底有什么用途? . . . . . . . . . . . . . . . . . . . 2 1.6 我似乎不能成功定义一个链表。我试过typedef struct f ...
  • 第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果 一样的。 这个程序里我们实现了两类窗口打开的方式,一个自身消失而 后打开另一个窗口,一个打开另一个窗口而自身不消失。可以看到他们...
  • Windows API这种命名方式的绝好例子,当人们看到ShowWindow,GetWindowText,DeleteFile和GetCommandLine之类的API函数名称时,恐怕不用查手册,就能知道它们什么用的。比起int 21h/09h和int 13h/02h之类的...
  • 经过跟踪变量值发现循环变量i的阀值pSysHead->dbf_count的数值为0xFFFFFFFF,该值从被破坏的内存数据库中获取的,正常情况下该值小于127。而pDBFat数据库的起始地址,如果pSysHead->dbf_count值异常过大,将...
  • "cm是什么意思单位", "cm是什么单位的名称" ] } 对于select多选类型表单,默认数据库保存值为半角逗号分隔的多个选择值。当你设置字段类型为无符号整型时,数据库会保存多个选择值的求和值(当然前提是选择值都是...
  • B) 在Java的类中可以有三类内容分别数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...
  • 14.1 什么是事务 386 14.2 事务的ACID属性 387 14.3 事务隔离级别 388 14.4 多版本读一致性 390 14.5 事务控制语句 391 14.5.1 Commit(提交) 391 14.5.2 Savepoint(保存点) 391 14.5.3 Rollback(回滚) 391 ...
  • 14.1 什么是事务 386 14.2 事务的ACID属性 387 14.3 事务隔离级别 388 14.4 多版本读一致性 390 14.5 事务控制语句 391 14.5.1 Commit(提交) 391 14.5.2 Savepoint(保存点) 391 14.5.3 Rollback(回滚) 391 ...
  • 查询数据数据库操作中最常用,也最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中使用SELECT语句来查询数据的。在这一章中将讲解的内容...
  • MySQL命令大全

    2018-01-15 11:19:17
    MySql的用户管理通过User表来实现的,添加新用户常用的方法有两个,一在User表插入相应的数据行,同时设置相应的权限;二通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
  • Phoenix-award workstation BIOS V6.00PC,An Energy star Ally copyright(c) 1984-2003,Phoenix Technologies,LTD 这句英语的意思是:Phoenix-award这两家COMS芯片开发公司合并后共同开发第6号BIOS版本,采用美国...
  • 7.1 什么是Lambda表达式: Java 8 的一个大亮点引入Lambda表达式,使用它设计的代码会更加简洁。 当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。 -> Java 8新增的Lambda表达式中,变量和...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

常用函数count是什么意思