读一读

alter table tbl_user drop email;

alter table tbl_user change id newid int(3);

alter table tbl_user add email varchar(255) not null;

alter table tbl_user rename to 新表名//记这种吧,都是用alter
rename table tbl_user to 新表名

SELECT DEFINER from mysql.proc WHERE db='chicai';//查询chicai数据库下的所有存储过程定义者
UPDATE mysql.proc SET definer="root@localhost" WHERE db='chicai';//修改数据库下面的所有定义者



使用show create procedure 存储过程名称,可以看到一个DEFINER定义者

所谓的定义者其实可以认为就是真正的操作者,因为所有的用户访问这个存储过程时,都是使用定义者的权限来执行这个存储过程的

也就是说,如果是超级管理员定义的存储过程,一个普通用户来调用,在存储过程区域中,是直接拥有超级管理员的权限的。


alter table table_name alter cloumn 字段 drop default;//如果以前存在默认值,先移除
alter table table_name alter cloumn 字段 set default 值;//设置默认值

select * from mysql.event;

  1. 用户变量,也叫做会话变量,在同一个链接下变量生效,可以传递到下一个sql,注意是同一个链接。

    注意:会话变量经常出问题的,有时候这行变量=1,下一行就变成0了,注意使用,推荐使用局部变量。

  2. 局部变量:作用范围是在存储过程之间,也就是在Begin和end之间生效

    在前面使用declare gold int default 1; 声明

  3. 系统变量:使用GLOBAL关键字或变量名加@@,要具有SUPER权限

    SET GLOBAL sort_buffer_size = value;

    SET @@sort_buffer_size = value;


declare gold int default 2;
#不同方式:
set gold = 100;
select table_gold into gold from accountinfo where UserID = 520;

要把数据库查出来的数据赋值给局部变量,使用into