2018-11-13-MySQL-Basic

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)