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

CREATE INDEX idx_cust_name ON user (cust_name(6));复制代码

  1. 使用ALTER TABLE
  2. 语法为:
ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name(index_col_name,...) [USING index_type]复制代码4.2 删除索引
删除指定表中指定名称的索引,语法为:
ALTER TABLE table_nameDROP INDEX index_name;复制代码例如删除名称为idx_cust_name的索引,其SQL语句为:
ALTER TABLE customersDROP INDEX idx_cust_name;复制代码4.3 修改索引
在MySQL中并没有提供修改索引的直接指令,一般情况下,我们需要先删除掉原索引,再根据需要创建一个同名的索引,从而变相地实现修改索引操作 。
--先删除ALTER TABLE userDROP INDEX idx_user_username;--再以修改后的内容创建同名索引CREATE INDEX idx_cust_name ON customers (cust_name(8));复制代码4.4 查看索引
在MySQL中,要查看某个数据库表中的索引也非常简单,只需要使用以下两个命令中的任意一种即可 。
--如果查看索引前,没有使用user db_name等命令指定具体的数据库,则必须加上FROM db_nameSHOW INDEX FROM table_name [FROM db_name]--如果查看索引前,没有使用user db_name等命令指定具体的数据库,则必须加上db_name.前缀SHOW INDEX FROM [db_name.]table_name复制代码5. 存储过程
  1. 什么是存储过程?存储过程简单来说,就是为了复用性或者实现复杂的业务功能,而保存的一条或多条MySQL语句的集合,可将其视为批文件;
  2. 为什么使用存储过程?(1)通过把处理封装在容易使用的单元中,简化复杂的操作;(2)由于不要求反复建立一系列处理步骤,这保证了数据的完整性,如果所有的开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的;(3)简化对变动的管理 。如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码,使用它的开发人员甚至不需要知道这些变化,也就是具备了安全性;(4)提高了性能,因为使用存储过程比单独使用SQL语句要快;(5)存储过程可用来编写功能更灵活的代码 。因此,存储过程的具备三个特性:简单可复用、安全以及高性能;
  3. 存储过程的缺点?(1)存储过程编写比基本的SQL语句更加复杂,需要更高的技能;(2)可能没有创建存储过程的权限,数据库管理员可能会限制创建存储过程的权限,允许用户使用存储过程,而不允许用户自由创建存储过程;
创建存储过程
  1. 创建存储过程 。如需要统计用户订单总金额,如果该用户需要交税的话,订单总金额则需要再加上税费
DELIMITER // CREATE PROCEDURE ordertotal( IN custid INT, IN taxable BOOLEAN, OUT ototal DECIMAL(8,2) )COMMENT 'obtain total order price'BEGIN/*declare variable for total*/ DECLARE total DECIMAL(8,2); DECLARE taxrate INT DEFAULT 6;/*get the order total*/SELECT SUM(item_price*item_quantity) INTO total FROM customers WHERE cust_id = custid;/*is this taxable?*/IF taxable THENSELECT total+(total/100*taxrate) INTO total; END IF; SELECT total INTO ototal; END //复制代码有这样一些细节: 1. 使用CREATE PROCEDURE语句进行创建,()圆括号中为存储过程的参数,其中参数类型有:1. IN类型,表示传递给存储过程;2. OUT 类型,表示存储过程返回的结果,在调用存储过程时需要传入@开始的变量;3. INOUT类型,表示在存储过程中可以传入和传出; 2. DECLARE用来声明一个变量,如这里的total,taxrate 。注意MySQL中定义变量时都是变量名在前,数据类型在后 。3. 存储过程具体逻辑写在BEGIN END之间; 4. 将值赋给变量使用INTO关键字; 5. 由于存储过程中每个SQL语句中用;作为分隔符,会和单个SQL造成冲突,因此可使用DELIMITER重新定义分类符,如该例子中定义//为分隔符,自然存储过程结尾就用END //结尾,而不再是END 。同时,分隔符//成对出现后,恢复到默认的";"作为分隔符;
执行存储过程
  1. 使用CALL子句执行存储过程,CALL子句接受存储过程的名称以及需要传递的参数 。
CALL ordertotal(1,TRUE,@total); SELECT @total;复制代码如果存储过程中定义了OUT类型的输入参数,那么在执行存储过程时需要传入变量,如这里@total,并且变量都是用@开始的 。如果存储过程中没有参数的话,就用空圆括号表示即可,CALL ordertotal();
删除存储过程
  1. 删除存储过程,可以使用DROP PROCEDURE子句 。如DROP PROCEDURE ordertotal;
查询存储过程
  1. 显示创建一个存储过程的语句,可以使用SHOW CREATE PROCEDURE 。如SHOW CREATE PROCEDURE ordertotal;


    推荐阅读