zoukankan      html  css  js  c++  java
  • NULL-safe equal null 索引 空字符串

    小结

    1、

    mysql> INSERT INTO my_table (phone) VALUES (NULL); 有手机号但是不知道

    mysql> INSERT INTO my_table (phone) VALUES ('');没有手机号

    http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to

    SELECT 1=1,1=NULL,0=NULL,NULL=NULL;

    1 NULL NULL NULL

    SELECT 1<=>1,1<=>NULL,0<=>NULL,NULL<=>NULL;

    1 0 0 1

     

    <=>

    NULL-safe equal. This operator performs an equality comparison like the = operator, but returns 1 rather than NULL if both operands are NULL, and 0rather than NULL if one operand is NULL.

    The <=> operator is equivalent to the standard SQL IS NOT DISTINCT FROM operator.

    For row comparisons, (a, b) <=> (x, y) is equivalent to:

    (a <=> x) AND (b <=> y)

    DEFAULT  NULL  

    [SQL]UPDATE tab SET toutiaoid=NULL WHERE NOT toutiaoid>0;
    受影响的行: 8
    时间: 0.046s

    [SQL]

    ALTER TABLE tab ADD UNIQUE KEY (toutiaoid);

    `toutiaoid` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '头条id',

    默认为NULL的字段 可以加unique约束  

    https://dev.mysql.com/doc/refman/5.7/en/create-index.html

    MySQL :: MySQL 8.0 Reference Manual :: B.4.4.3 Problems with NULL Values https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html

    MySQL :: MySQL 8.0 Reference Manual :: 3.3.4.6 Working with NULL Values https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html

    3.3.4.6 Working with NULL Values

    The NULL value can be surprising until you get used to it. Conceptually, NULL means a missing unknown value”and it is treated somewhat differently from other values.

    To test for NULL, use the IS NULL and IS NOT NULL operators, as shown here:

    mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
    +-----------+---------------+
    | 1 IS NULL | 1 IS NOT NULL |
    +-----------+---------------+
    |         0 |             1 |
    +-----------+---------------+

    You cannot use arithmetic comparison operators such as =<, or <> to test for NULL. To demonstrate this for yourself, try the following query:

    mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
    +----------+-----------+----------+----------+
    | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
    +----------+-----------+----------+----------+
    |     NULL |      NULL |     NULL |     NULL |
    +----------+-----------+----------+----------+

    Because the result of any arithmetic comparison with NULL is also NULL, you cannot obtain any meaningful results from such comparisons.

    In MySQL, 0 or NULL means false and anything else means true. The default truth value from a boolean operation is 1.

    This special treatment of NULL is why, in the previous section, it was necessary to determine which animals are no longer alive using death IS NOT NULL instead of death <> NULL.

    Two NULL values are regarded as equal in a GROUP BY.

    When doing an ORDER BYNULL values are presented first if you do ORDER BY ... ASC and last if you do ORDER BY ... DESC.

    A common error when working with NULL is to assume that it is not possible to insert a zero or an empty string into a column defined as NOT NULL, but this is not the case. These are in fact values, whereas NULL means not having a value.” You can test this easily enough by using IS [NOT] NULL as shown:

    mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
    +-----------+---------------+------------+----------------+
    | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
    +-----------+---------------+------------+----------------+
    |         0 |             1 |          0 |              1 |
    +-----------+---------------+------------+----------------+

    Thus it is entirely possible to insert a zero or empty string into a NOT NULL column, as these are in fact NOT NULL. See Section B.4.4.3, “Problems with NULL Values”.

    B.4.4.3 Problems with NULL Values

    The concept of the NULL value is a common source of confusion for newcomers to SQL, who often think that NULLis the same thing as an empty string ''. This is not the case. For example, the following statements are completely different:

    mysql> INSERT INTO my_table (phone) VALUES (NULL);
    mysql> INSERT INTO my_table (phone) VALUES ('');

    Both statements insert a value into the phone column, but the first inserts a NULL value and the second inserts an empty string. The meaning of the first can be regarded as phone number is not known” and the meaning of the second can be regarded as the person is known to have no phone, and thus no phone number.”

    To help with NULL handling, you can use the IS NULL and IS NOT NULL operators and the IFNULL() function.

    In SQL, the NULL value is never true in comparison to any other value, even NULL. An expression that contains NULL always produces a NULL value unless otherwise indicated in the documentation for the operators and functions involved in the expression. All columns in the following example return NULL:

    mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

    To search for column values that are NULL, you cannot use an expr = NULL test. The following statement returns no rows, because expr = NULL is never true for any expression:

    mysql> SELECT * FROM my_table WHERE phone = NULL;

    To look for NULL values, you must use the IS NULL test. The following statements show how to find the NULLphone number and the empty phone number:

    mysql> SELECT * FROM my_table WHERE phone IS NULL;
    mysql> SELECT * FROM my_table WHERE phone = '';

    See Section 3.3.4.6, “Working with NULL Values”, for additional information and examples.

    You can add an index on a column that can have NULL values if you are using the MyISAMInnoDB, or MEMORYstorage engine. Otherwise, you must declare an indexed column NOT NULL, and you cannot insert NULL into the column.

    When reading data with LOAD DATA, empty or missing columns are updated with ''. To load a NULL value into a column, use N in the data file. The literal word NULL may also be used under some circumstances. See Section 13.2.7, “LOAD DATA Statement”.

    When using DISTINCTGROUP BY, or ORDER BY, all NULL values are regarded as equal.

    When using ORDER BYNULL values are presented first, or last if you specify DESC to sort in descending order.

    Aggregate (summary) functions such as COUNT()MIN(), and SUM() ignore NULL values. The exception to this isCOUNT(*), which counts rows and not individual column values. For example, the following statement produces two counts. The first is a count of the number of rows in the table, and the second is a count of the number of non-NULL values in the age column:

    mysql> SELECT COUNT(*), COUNT(age) FROM person;

    For some data types, MySQL handles NULL values specially. If you insert NULL into a TIMESTAMP column, the current date and time is inserted. If you insert NULL into an integer or floating-point column that has the AUTO_INCREMENT attribute, the next number in the sequence is inserted.

    Target Server Type : MYSQL
    Target Server Version : 80016
    File Encoding : 65001

    Date: 2020-03-16 08:28:00
    */

    SET FOREIGN_KEY_CHECKS=0;

    -- ----------------------------
    -- Table structure for test
    -- ----------------------------
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `sum` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3334 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

    -- ----------------------------
    -- Records of test
    -- ----------------------------
    INSERT INTO `test` VALUES ('23', '1');
    INSERT INTO `test` VALUES ('333', null);

    [SQL]update test set sum=sum+1 where id=333;
    受影响的行: 0
    时间: 0.012s

    [SQL]
    update test set sum=sum+1 where id=23;
    受影响的行: 1
    时间: 0.012s

    对于null值增加失败。

  • 相关阅读:
    Records of Pytorch in Practice
    fast.ai Lesson 2: Deep Learning 2018
    fast.ai Lesson 1: Deep Learning 2018
    Learn You a PyTorch! (aka Introduction Into PyTorch)
    Deep RL Bootcamp Frontiers Lecture I: Recent Advances,
    Deep RL Bootcamp TAs Research Overview
    Deep RL Bootcamp Lecture 10B Inverse Reinforcement Learning
    Deep RL Bootcamp Lecture 9 Model-based Reinforcement
    Deep RL Bootcamp Lecture 8 Derivative Free Methods
    Deep RL Bootcamp Lecture 7: SVG, DDPG, and Stochastic Computation Graphs
  • 原文地址:https://www.cnblogs.com/rsapaper/p/6234565.html
Copyright © 2011-2022 走看看