美文网首页
2018-11-13-MySQL-Basic

2018-11-13-MySQL-Basic

作者: LiuYanPin | 来源:发表于2018-11-14 00:17 被阅读0次

    SELECT

    SELECT
        [ALL | DISTINCT | DISTINCTROW ]
          [HIGH_PRIORITY]
          [STRAIGHT_JOIN]
          [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
          [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
        select_expr [, select_expr ...]
        [FROM table_references
          [PARTITION partition_list]
        [WHERE where_condition]
        [GROUP BY {col_name | expr | position}
          [ASC | DESC], ... [WITH ROLLUP]]
        [HAVING where_condition]
        [ORDER BY {col_name | expr | position}
          [ASC | DESC], ...]
        [LIMIT {[offset,] row_count | row_count OFFSET offset}]
        [PROCEDURE procedure_name(argument_list)]
        [INTO OUTFILE 'file_name'
            [CHARACTER SET charset_name]
            export_options
          | INTO DUMPFILE 'file_name'
          | INTO var_name [, var_name]]
        [FOR UPDATE | LOCK IN SHARE MODE]]
    

    INSERT

    INSERT INTO table_name ( field1, field2,...fieldN )
                           VALUES
                           ( value1, value2,...valueN );
    

    WHERE

    SELECT field1, field2,...fieldN FROM table_name1, table_name2...
    [WHERE condition1 [AND [OR]] condition2.....
    

    操作符

    =
    <>, !=
    >
    <
    >=
    <=
    

    UPDATE

    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause]
    

    DELETE

    DELETE FROM table_name [WHERE Clause]
    

    LIKE

    SELECT field1, field2,...fieldN 
    FROM table_name
    WHERE field1 LIKE '%com%' [AND [OR]] filed2 = 'somevalue'
    

    UNION

    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions]
    UNION [ALL | DISTINCT]
    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions];
    UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
    UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
    

    ORDER BY

    SELECT field1, field2,...fieldN table_name1, table_name2...
    ORDER BY field1, [field2...] [ASC [DESC]]
    

    GROUP BY

    GROUP BY 语句根据一个或多个列对结果集进行分组。

    • 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
    SELECT column_name, function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    
    • WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
    • 分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by

    JOIN

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。


      INNER JOIN
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。


      LEFT JOIN
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。


      RIGHT JOIN

    NULL

    • 在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。
    • MySQL 中处理 NULL 使用 IS NULLIS NOT NULL运算符。

    REGEXP

    MySQL中使用 REGEXP 操作符来进行正则表达式匹配

    SELECT name FROM person WHERE name REGEXP '^ly';
    

    事务

    事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)

    ALTER

    ALTER TABLE test DROP i;
    ALTER TABLE test ADD i INT;
    ALTER TABLE test MODIFY c CHAR(10);
    ALTER TABLE test CHANGE j j INT;
    ALTER TABLE test RENAME TO alter_tbl;
    

    如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
    修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

    索引

    -- 普通索引
    创建索引
    CREATE INDEX indexName ON mytable(username(length));
    修改表结构(添加索引)
    ALTER table tableName ADD INDEX indexName(columnName);
    创建表的时候直接指定
    CREATE TABLE mytable(  
    ID INT NOT NULL,    
    username VARCHAR(16) NOT NULL,   
    INDEX [indexName] (username(length))   
    ); 
    删除索引
    DROP INDEX [indexName] ON mytable;
    -- 唯一索引
    创建索引
    CREATE UNIQUE INDEX indexName ON mytable(username(length)) ;
    修改表结构
    ALTER table mytable ADD UNIQUE [indexName] (username(length));
    创建表的时候直接指定
    CREATE TABLE mytable(  
    ID INT NOT NULL,   
    username VARCHAR(16) NOT NULL,  
    UNIQUE [indexName] (username(length))  
    );  
    

    使用ALTER 命令添加和删除索引

    有四种方式来添加数据表的索引:
    ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
    ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
    ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
    ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
    

    使用 ALTER 命令添加和删除主键

    主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。
    可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。

    MySQL复制表

    CREATE TABLE targetTable LIKE sourceTable;
    INSERT INTO targetTable SELECT * FROM sourceTable;
    

    拷贝数据表的数据INSERT INTO... SELECT
    复制表结构及数据到新表create table新表 select * from 旧表

    序列

    使用 AUTO_INCREMENT

    处理重复数据

    INSERT IGNORE INTO会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。

    统计重复数据

    • 确定哪一列包含的值可能会重复。
    • 在列选择列表使用COUNT(*)列出的那些列。
    • 在GROUP BY子句中列出的列。
    • HAVING子句设置重复数大于1。
    SELECT COUNT(*) as repetitions, last_name, first_name
    FROM person_tbl
    GROUP BY last_name, first_name
    HAVING repetitions > 1;
    

    过滤重复数据

    • DISTINCT 关键字
    • GROUP BY

    MySQL 运算符

    比较运算符

    逻辑运算符

    NOT!逻辑非
    AND逻辑与
    OR逻辑或
    XOR 逻辑异或

    相关文章

      网友评论

          本文标题:2018-11-13-MySQL-Basic

          本文链接:https://www.haomeiwen.com/subject/rddlfqtx.html