#change可以修改字段名字ALTERTABLE yyfs_table CHANGE id id int;ALTERTABLE yyfs_table MODIFY id int;#修改字段位置#(1)FIRST:指定位置为表的第一个位置 #(2)AFTER 字段名2:指定“字段名1”插入在“字段名2”之后。ALTERTABLE yyfs_table MODIFY 字段名1intFIRST | AFTER 字段名2;
增加字段
ALTERTABLE yyfs_table ADD id int;
删减字段
ALTERTABLE yyfs_table DROP id;
增加索引
ALTERTABLE yyfs_table ADDINDEX idx_union(dept);CREATE FULLTEXT INDEX ft_name ON`student`(`name`(20))
删减索引
ALTERTABLE yyfs_table DROPINDEX index_name;DROPINDEX index_name ON yyfs_table;
#exists查询子句不包含外部条件,返回true,返回全部结果集select art_id from blog_article a whereexists(select art_id from blog_artic
le c where c.art_id=1);#exists查询子句包含外部条件,返回a.art_id=1的结果集select art_id from blog_article a whereexists(select art_id from blog_artic
le c where a.art_id=1);#not exists查询子句不包含外部条件,返回true,返回空结果集select art_id from blog_article a wherenotexists(select art_id from blog_artic
le c where c.art_id=1);#not exists查询子句包含外部条件,返回除了a.art_id=1的结果集select art_id from blog_article a wherenotexists(select art_id from blog_artic
le c where a.art_id=1);
11.数据控制语言-DCL
(1)用户管理
创建用户 形式:create user ‘用户名’@‘允许登录的地址/服务器’ identified by ‘密码’; “%”代表“任何地址”
createuser'yyfs'@'localhost' identified by 'root';
授予权限 1.形式:grant 权限列表 on 某库.某个对象 to ‘用户名’@‘允许登录的地址/服务器’ [identified by ‘密码’]; 2.说明: a.权限列表就是多个权限的名词,相互之间逗号隔开,如select、insert、update……也可以是all,表示全部权限 b.某库.某对象表示给指定的某个数据库中的某个“下级单位”赋权,下级单位有:表名、视图名、存储过程名、存储函数名.如下有2个特殊的写法: *.*:代表所有数据库中的所有下级单位 某库.*:代表某库中的所有下级单位 c.[identified by ‘密码’]如果不省略,即可改密码,但如果用户不存在时,则会创建一个新用户,此时不能省略
剥夺权限 1.形式:revoke 权限列表 on 某库.某个对象 to ‘用户名’@‘允许登录的地址/服务器’;
#先改结束字符delimiter///#定义形式createprocedure 存储过程名([in|out|inout]形参 类型,[in|out|inout]形参 类型,……)#如 IN name varcharbegin#写完整的过程中的语句#可以有各种流程控制的#查询语句会作为存储过程中调用的结果end///delimiter;
#先改结束字符delimiter///#定义形式createtrigger 触发器名 触发时机 触发事件 on 表明 for each rowbegin#触发器内部sql语句end///delimiter;
15.游标
使用游标也可以轻易的取出在检索出来的行中前进或后退一行或多行的结果,只适用于存储过程或函数
1.定义游标:declare 游标名 cursor for select语句; 2.打开游标:open 游标名; 获取结果:fetch 游标名 into 变量名[,变量名]; 关闭游标:close 游标名;
createprocedure p()begindeclare id int;declare name varchar(15);-- 声明游标declare mc cursorforselect*from class;-- 打开游标open mc;-- 获取结果fetch mc into id,name;-- 这里是为了显示获取结果select id,name;-- 关闭游标close mc;end;
16.查询缓存
查看参数: (1)show variables like ‘%query_cache%’;可以看到关于查询缓存的相关参数,其中重要的参数为 1.query_cache_type:查询缓存类型,取值:0:不使用查询缓存、1:使用查询缓存、2:特定条件下可使用查询缓存 2.query_cache_size :为查询缓存预留的内存 (2)show variables like ‘%Qcache%’;查看缓存空间状态 1.Qcache_free_memory:剩余缓存空间
######## key分区 #########分10个区createtable yyfs_table(
id intauto_incrementprimarykey,
name varchar(32)notnulldefault'',
recdate timestampnotnulldefaultCURRENT_TIMESTAMP)ENGINE=Myisam charset=utf8 partitionbykey(id) partitions 10;######## hash分区 #########按月份分12个区partitionbyhash(month(recdate)) partitions 10;######## range分区 ########partitionby range(year(recdate))(partition p2007 values less than (2008)#定义文件路径DATA DIRECTORY ='/data/data'INDEX DIRECTORY ='/data/idx',partition p2008 values less than (2009),partition p2009 values less than (2010)partition p2010 values less than MAXVALUE
#MAXVALUE 表示最大的可能的整数值,否则插入超过2010会出错);######## list分区 #########按照月份分成4个季节partitionby list(month(recdate))(partition spring valuesin(3,4,5),partition summer valuesin(6,7,8),partition fall valuesin(9,10,11),partition winter valuesin(12,1,2),);
######## range columns分区 ########partitionby range columns(year((a,b))(PARTITION p0 VALUES LESS THAN (5,12),PARTITION p1 VALUES LESS THAN (MAXVALUE, MAXVALUE));######## list columns分区 ########partitionby list columns(city)(PARTITION hunan VALUESIN('长沙','张家界'),PARTITION fujian VALUESIN('厦门','福州'),PARTITION gaungdong VALUESIN('广州','深圳','汕头'));
#range根据年份分区#子分区根据天数再hash分区,分成两个#总分区:3*2=6个分区partitionby range(year(recdate))
subpartition byhash(to_days(recdate)) subpartitions 2(partition p0 values less than (1990),partition p1 values less than (2018),partition p1 values less than maxvalue
);
分区管理: (1)删除分区 ALTER TABLE yyfs_table DROP PARTITION 分区名称; (2)增加分区 1.RANGE分区:ALTER TABLE yyfs_table ADD PARTITION (partition user_3 values less than maxvalue); 2.LIST分区:ALTER TABLE yyfs_table ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)); 3.HASH/KEY分区:ALTER TABLE yyfs_table ADD PARTITION PARTITIONS 8; (3)重建分区 1.RANGE分区: 将原来的 p0,p1 分区合并起来,放到新的 p0 分区中 ALTER TABLE yyfs_table REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000)); 2.LIST分区: 将原来的 p0,p1 分区合并起来,放到新的 p0 分区中 ALTER TABLE yyfs_table REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13)); 3.HASH/KEY分区: 重建分区的数量变成2,在这里数量只能减少不能增加 ALTER TABLE yyfs_table REORGANIZE PARTITION COALESCE PARTITION 2;
SELECT user_id FROM blog_user WHERE user_id in(1,2,3,4,5)ORDERBY FIELD(user_id,5,4,3,1,2);// 纯数字字段不用处理引号,比较好拼接SELECT user_name FROM blog_user WHERE user_id in(1,2,3,4,5)ORDERBY FIND_IN_SET(user_name,'yyfs,wldfeq,hhfs,yy-fs');// 一个引号全包住,搞定字符值字段
PS:FIND_IN_SET:查找某一值在字段中是否存在,数据量大时,尽量别用
SELECT*from good_number where FIND_IN_SET(4,attr_list);
19.慢查询日志
说明:把查询速度很慢的sql语句统计出来,可以进行优化分析
开启慢查询日志: (1)查询属性配置:show variables like ‘%slow_query%’; (2)开启:set global slow_query_log = 1; (3)设置时间阈值:set global long_query_time =2; (4)设置存储路径:set global slow_query_log_file =/usr/slow_query.log;