MySQL命令,一篇文章替你全部搞定( 三 )

  • 将查询出来的数据插入表中,可以使用INSERT SELECT语句 。INSERT INTO customers(cust_id,cust_contact) SELECT cust_id, cust_contact FROM customers WHERE cust_id>5;其中SELECT中可以带WHERE过滤条件;INSERT SELECT通常被用于复制表数据
  • 2.3 更新表数据
    1. 如果要更新表数据的话,使用UPDATE子句:UPDATE customers SET cust_name ='happy',cust_email='happy@gmail.com' WHERE cust_id = 1001;
    2. 注意:如果不加WHERE条件指定到某一行的话,会更新表中某一列全部的数据 。
    2.4 删除表数据
    1. 如果从表中删除数据的话,可以使用DELETE子句 。DELETE FROM customers WHERE cust_id = 10086;删除的数据必定是表中行数据,而不是某一列 。因此,与UPDATE子句相比,DELETE子句并不需要指定是哪一列,而仅仅只需要指定具体的表名即可;
    2. 注意:如果不添加WHERE指定条件的话,会将整个表中所有行数据全部删除 。另外,DELETE只是删除表中的数据,而不会删除表结构信息;
    3. 如果想删除表中全部的数据,可以使用TRUNCATE,比DELETE删除效率更高;
    3. SQL中关键字执行顺序在SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后产生的虚拟表会作为执行的最终结果返回 。下面的是常用的关键字的执行顺序:
    (8)SELECT (9)DISTINCT<select_list>(1)FROM <left_table>(3)<join_type> JOIN <right_table>(2) ON <join_condition>(4)WHERE <where_condition>(5)GROUP BY<group_by_list>(6)WITH{CUBE|ROLLUP}(7)HAVING<having_condition>(10)ORDER BY<order_by_list>(11)LIMIT<limit_number>复制代码
    1. FROM:对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1;
    2. ON:对虚拟表VT1进行ON筛选,只有那些符合<join_condition>条件的行才会被记录在虚拟表VT2中;
    3. JOIN:如果是OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3;
    4. WHERE:对虚拟表VT3进行WHERE条件过滤,只有符合<where_condition>的记录才会被放入到虚拟表VT4;
    5. GROUP BY:根据GROUP BY子句中的列,对虚拟表VT4进行分组操作,产生虚拟表VT5;
    6. CUBE|ROLLUP:对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6;
    7. HAVING:对虚拟表VT6进行HAVING条件过滤,只有符合<having_condition>的记录才会被插入到虚拟表VT7中;
    8. SELECT:执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
    9. DISTINCT:对虚拟表VT8中的记录进行去重,产生虚拟表VT9;
    10. ORDER BY:将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10;
    11. LIMIT:取出指定行的记录,产生虚拟表VT11,并将结果返回 。
    4. 索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度 。索引分单列索引和组合索引 。单列索引,即一个索引只包含单个列,而组合索引,即一个索引包含多个列 。
    4.1 创建索引
    创建索引有两种方式,一种是直接利用CREATE INDEX进行创建,另外一种则是通过修改表结构来进行添加,则是利用ALTER TABLE语句 。
    1. 使用CREATE INDEX
    2. 语法为:
    CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_name (index_col_name,...)复制代码
    1. 其中对应的语法变量信息如下:
    [UNIQUE|FULLTEXT|SPATIAL]
    1. 其中括号中的这三个关键字表示创建的索引类型,它们分别表示唯一索引、全文索引、空间索引三种不同的索引类型 。如果我们不指定任何关键字,则默认为普通索引 。
    index_name
    1. index_name表示索引的名称,由用户自行定义,以便于以后对该索引进行修改等管理操作 。
    index_type
    1. index_type表示索引的具体实现方式,在MySQL中,有两种不同形式的索引——BTREE索引和HASH索引 。在存储引擎为MyISAM和InnoDB的表中只能使用BTREE,其默认值就是BTREE;在存储引擎为MEMORY或者HEAP的表中可以使用HASH和BTREE两种类型的索引,其默认值为HASH 。
    index_colname
    1. index_col_name表示需要创建索引的字段名称,我们还可以针对多个字段创建复合索引,只需要在多个字段名称之间以英文逗号隔开即可 。此外,对于CHAR或VARCHAR类型的字段,我们还可以只使用字段内容前面的一部分来创建索引,只需要在对应的字段名称后面加上形如(length)的指令即可,表示只需要使用字段内容前面的length个字符来创建索引 。在这里,我们以customers表的cust_name字段(类型为VARCHAR(50))为例,使用cust_name字段的6个字符前缀来创建索引 。


      推荐阅读