----+
(4)全文索引:InnoDB存储引擎不支持全文索引
#创建全文索引
mysql> create fulltext index indexName on mytable(username(10));
#修改表结构来创建索引
mysql> alter table mytable add fulltext index indexName (username(10));
#删除全文索引
mysql> drop index indexName on mytable;
17)存储过程Procedure
存储过程:是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。MySQL存储过程创建的格式:create procedure 过程名 ([过程参数[,...]]) [特性 ...] 过程体。比如要往表test1中插入10000条数据,此时用普通的插入语句显然不太现实,这时可以考虑存储过程,实例如下:
mysql> desc test1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | | NULL | |
| value | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
#删除存储过程
mysql> drop procedure if exists pro_test1;
#创建存储过程
mysql> delimiter //
mysql> create procedure pro_test1()
-> begin
-> declare i int default 1;
-> while i < 10000 DO
-> insert into test1(name,value) value('name'+i,'value'+i);
-> set i = i + 1;
-> end while;
-> end;
-> //
mysql> call pro_test1;--执行存储过程
还可以在存储过程中使用自定义(用户)变量,简单实例演示:
mysql> create procedure pro_bigworld() select concat(@greeting,' world');
mysql> set @greeting='Hi';
mysql> call pro_bigworld;
+----------------------------+
| concat(@greeting,' world') |
+----------------------------+
| Hi world |
+----------------------------+
再看一个if-then-else语句:
delimiter ;
drop procedure if exists pro_test2;
delimiter //
create procedure pro_test2(IN para int)
begin
declare var1 int;
set var1=para+1;
if var1=0 then
insert into test1(name,value) values('var1name','var1value'+0);
end if;
if para=0 then
update test1 set value=value+'0';
else
update test1 set value=value+'1';
end if;
end;
//
mysql> call pro_test2(1);
mysql> //
mysql> select * from test1;
关于Mysql存储过程中的控制语句比较多,这里限于篇幅就不一一列举了。
18)事务Transaction
事务几个基本特性: ACID
原子性(atomicity):事务在执行时,要做到“要么不做,要么全做”,也就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
隔离性(isolcation):一个事务处理对另一个事务处理没有影响。
持续性(durability):事务处理的效果能够被永久保存下来 。
MYSQL的事务处理主要有两种方法:
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
select @@autocommit;//查看当前事务是否为自动提交(1为自动提交)
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
【注意】当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
19)MySQL用户创建,授权以及删除
创建用户yy,密码123: create user yy identified by '123';
授权:grant all privileges on dbname.* to yy@localhost identified by '123';
授予用户yy查询数据库dbname中所有表的权限:grant select on dbname.* to yy;
撤销用户yy查询数据库dbname中所有表的权限:revoke select on dbname.* from yy;
删除用户:drop user yy;
20)select支持的运算操作
select case 1 when 1 then 'one' when 2 then 'two' end;/*选择事件1:推荐使用单引号表示字符串*/
select if(1<2,'yes','no');/*判断语句*/
select char_length('qwert');/*求字符长度*/
select concat('my','sql');/*连接字符串*/
select locate('bar','foobarhat');/*查找母串'bar'所在位置,若未找到则为0*/
select substring('yichun university',5,6);/*提取字串*/
select trim(' bar ');;/*去掉前后空格*/
select repeat('mysql',3);/*mysql字符串重复3次*/
select reverse('abcd');/*反转*/
select round(2.5);/*四舍五入到3*/
select rand()*10;/*返回0~10之间的数*/
select hex('cat');/*查看ASCII码*/
select true,false;/*输出1,0*/
select now();/*显示当