mysql命令
基础命令
1 net start mysql:Windows系统启动MySQL服务。 2 安装目录/mysql start:Linux系统启动MySQL服务。 3 4 shutdown:后面的start换成这个,表示关闭MySQL服务。 5 restart:换成restart表示重启MySQL服务。 6 7 8 ps -ef | grep mysql:Linux查看MySQL后台进程的命令。 9 kill -9 MySQL进程ID:强杀MySQL服务的命令。 10 mysql -h地址 -p端口 -u账号 -p:客户端连接MySQL服务(需要二次输入密码)。 11 show status;:查看MySQL运行状态。 12 SHOW VARIABLES like %xxx%;:查看指定的系统变量。 13 show processlist;:查看当前库中正在运行的所有客户端连接/工作线程。 14 show status like "Threads%";:查看当前数据库的工作线程系统。 15 help data types;:查看当前版本MySQL支持的所有数据类型。 16 help xxx:查看MySQL的帮助信息。 17 quit:退出当前数据库连接。
mysql库相关命令
show databases;:查看目前MySQL中拥有的所有库。 show engines;:查看当前数据库支持的所有存储引擎。 use 库名;:使用/进入指定的某个数据库。 show status;:查看当前数据库的状态信息。 show grants;:查看当前连接的权限信息。 show errors;:查看当前库中记录的错误信息。 show warnings:查看当前库抛出的所有警告信息。 show create database 库名;:查看创建某个库的SQL详细信息。 show create table 表名;:查看创建某张表的SQL详细信息。 show tables;:查看一个库中的所有表。 desc 表名;:查看一张表的字段结构。除开这种方式还有几种方式: describe 表名;:查看一张表的字段结构。 show columns from 表名;:查看一张表的字段结构。 explain 表名;:查看一张表的字段结构。 create database 库名;:新建一个数据库,后面还可以指定编码格式和排序规则。 drop database 库名;:删除一个数据库。 ALTER DATABASE 库名 DEFAULT CHARACTER SET 编码格式 DEFAULT COLLATE 排序规则:修改数据库的编码格式、排序规则。
mysql表相关命令
CREATE TABLE `库名`.`表名` ( 字段名称1 数据类型(精度限制) [字段选项], 字段名称2 数据类型(精度限制) [字段选项] ) [表选项]; 字段选项(可以不写,不选使用默认值): NULL:表示该字段可以为空。 NOT NULL:表示改字段不允许为空。 DEFAULT 默认值:插入数据时若未对该字段赋值,则使用这个默认值。 AUTO_INCREMENT:是否将该字段声明为一个自增列。 PRIMARY KEY:将当前字段声明为表的主键。 UNIQUE KEY:为当前字段设置唯一约束,表示不允许重复。 CHARACTER SET 编码格式:指定该字段的编码格式,如utf8。 COLLATE 排序规则:指定该字段的排序规则(非数值类型生效)。 COMMENT 字段描述:为当前字段添加备注信息,类似于代码中的注释。 表选项(可以不写,不选使用默认值): ENGINE = 存储引擎名称:指定表的存储引擎,如InnoDB、MyISAM等。 CHARACTER SET = 编码格式:指定表的编码格式,未指定使用库的编码格式。 COLLATE = 排序规则:指定表的排序规则,未指定则使用库的排序规则。 ROW_FORMAT = 格式:指定存储行数据的格式,如Compact、Redundant、Dynamic....。 AUTO_INCREMENT = n:设置自增列的步长,默认为1。 DATA DIRECTORY = 目录:指定表文件的存储路径。 INDEX DIRECTORY = 目录:指定索引文件的存储路径。 PARTITION BY ...:表分区选项,后续讲《MySQL表分区》再细聊。 COMMENT 表描述:表的注释信息,可以在这里添加一张表的备注。
show table status like 'zz_users'\G;:纵排输出一张表的状态信息。alter table 表名 表选项;:修改一张表的结构,如alter table xxx engine=MyISAM。rename table 表名 to 新表名;:修改一张表的表名。alter table 表名 字段操作;:修改一张表的字段结构,操作如下:add column 字段名 数据类型:向已有的表结构添加一个字段。add primary key(字段名):将某个字段声明为主键。add foreing key 外键字段 表名.字段名:将一个字段设置为另一张表的外键。add unique 索引名(字段名):为一个字段创建唯一索引。add index 索引名(字段名):为一个字段创建普通索引。drop column 字段名:在已有的表结构中删除一个字段。modify column 字段名 字段选项:修改一个字段的字段选项。change column 字段名 新字段名:修改一个字段的字段名称。drop primary key:移除表中的主键。drop index 索引名:删除表中的一个索引。drop foreing key 外键:删除表中的一个外键。
drop table if exists 表名:如果一张表存在,则删除对应的表。truncate table 表名:清空一张表的所有数据。create table 表名 like 要复制的表名:复制一张表的结构,然后创建一张新表。create table 表名 as select * from 要复制的表名:同时复制表结构和数据创建新表。
mysql忘记密码怎么办
①先停掉MySQL的后台服务:
Windows系统请执行:net stop mysqlLinux系统请执行:安装目录/mysql shutdown(kill强杀进程也可以)
②进入到MySQL安装目录下的bin文件夹内,执行mysqld --skip-grant-tables去掉连接认证。
③因为上面关掉了连接认证,接着输入mysql敲下回车,进入mysql终端命令行。
④输入use mysql;,进入MySQL自身的系统数据库,然后输入show tables;查看所有表。
⑤查询MySQL中注册的所有用户:select user,host,password from user;。
⑥使用update语句,更改root超级管理员的账号密码,如下:
update user set password=password('123') where user="root" and host="localhost";
插入数据
insert into 表名(字段名...) values(字段值...);:向指定的表中插入一条数据。
insert into 表名(字段名...) values(字段值...),(...)...;:向表中插入多条数据。
insert into 表名 set 字段名=字段值,...;:插入一条数据,但只插入某个字段的值。
删除数据
delete from 表名;:删除一张表的所有数据。
delete from 表名 where 条件;:根据条件删除一条或多条数据。
truncate table 表名:清空一张表的所有数据。
修改数据
update 表名 set 字段名=字段值,...;:修改表中所有记录的数据。 update 表名 set 字段名=字段值,... where 条件;:根据条件修改一条或多条记录的数据。 replace 表名(字段名1,...) values(字段值...),...;:批量修改对应主键记录的数据。
查询数据
select * from 表名;:查询一张表的所有数据。 select * from 表名 where 条件;:根据条件查询表中相应的数据。 select 字段1,字段2... from 表名 where 条件;:根据条件查询表中相应数据的指定字段。 select 函数(字段) from 表名;:对查询后的结果集,进行某个函数的特殊处理。
高级用法
-- 为查询出来的字段取别名 select 字段1 as 别名,... from 表名 where 条件; select 字段1 别名,... from 表名; -- 为查询出的表取别名 select * from 表名 as 别名; -- 以多条件查询数据 select * from 表名 where 字段1=值1 and 字段2=值2 and ...; -- 所有条件都符合时才匹配 select * from 表名 where 字段1=值1 or 字段2=值2 or ...; -- 符合任意条件的数据都会返回 -- =符号,可以根据情况换为>、<、>=、<=、!=、between and、is null、not is null这些 -- 对查询后的结果集使用函数处理 select 函数(字段) from 表名 where 条件; -- 对查询条件使用函数处理 select * from 表名 where 函数(条件); -- 模糊查询 select * from 表名 where 字段 like "%字符"; -- 查询字段值以指定字符结尾的所有记录 select * from 表名 where 字段 like "字符%"; -- 查询字段值以指定字符开头的所有记录 select * from 表名 where 字段 like "%字符%"; -- 查询字段值包含指定字符的所有记录 -- 按照多值查询对应行记录 select * from 表名 where 字段 in (值1,值2,...); -- 按照多值查询相反的行记录 select * from 表名 where 字段 not in (值1,值2,...); -- 基于多个字段做多值查询 select * from 表名 where (字段1,字段2...) in ((值1,值2,...),(...),...); -- 只需要查询结果中的前N条数据 select * from 表名 limit N; -- 返回查询结果中 N~M 区间的数据 select * from 表名 limit N,M; -- 联合多条SQL语句查询(union all表示不去重,union表示对查询结果去重) select * from 表名 where 条件 union all select * from 表名 where 条件;
分组过滤、数据排序
-- 基于一个字段进行排序查询 select * from 表名 order by 字段名 asc; -- 按字段值正序返回结果集 select * from 表名 order by 字段名 desc; -- 按字段值倒序返回结果集 select * from 表名 order by 字段1 asc,字段2 desc; -- 按照多字段进行排序查询 -- 基于字段进行分组 select * from 表名 group by 字段1,字段2....; -- 基于分组查询后的结果做条件过滤 select * from 表名 group by 字段1 having 条件;
查询语句中的各类关键字执行优先级为:from → where → select → group by → having → order by。
子查询
-- 基于一条SQL语句的查询结果进一步做查询 select * from (select * from 表名 where 条件) as 别名 where 条件; -- 将一条SQL语句的查询结果作为条件继续查询(只适用于子查询返回单值的情况) select * from 表名 where 字段名 = (select 字段名 from 表名 where 条件); -- 将一条SQL语句的查询结果作为条件继续查询(适用于子查询返回多值的情况) select * from 表名 where 字段名 exists (select 字段名 from 表名 where 条件); -- 上述的exists可以换为not exists,表示查询不包含相应条件的数据 -- 将一条SQL语句的多个查询结果,作为条件与多个字段进行范围查询 select * from 表名 where (字段1,字段2...) in (select 字段1,字段2... from 表名);
关联查询
-- 交叉连接:默认把前一张表的每一行数据与后一张表的所有数据做关联查询 select * from 表1,表2...; -- 这种方式默认采用交叉连接的方式 select * from 表1 cross join 表2; -- 显式声明采用交叉连接的方式 -- 内连接:只返回两张表条件都匹配的数据 -- 隐式的内连接写法 select * from 表1,表2... where 表1.字段 = 表2.字段 ...; -- 等值内连接 select * from 表1 别名1 inner join 表2 别名2 on 别名1.字段 = 别名2.字段; -- 不等式内连接 select * from 表1 别名1 inner join 表2 别名2 on 别名1.字段 < 别名2.字段; -- 左外连接:左表为主,右表为次,无论左表在右表是否匹配,都返回左表数据,缺失的右表数据显示NULL select * from 表1 left join 表2 on 表1.字段 = 表2.字段; -- 右外连接:和左连接相反,右表为主,左表为次,永远返回右表的所有数据 select * from 表1 right join 表2 on 表1.字段 = 表2.字段; -- 全外连接:两张表没有主次之分,每次查询都会返回两张表的所有数据,不匹配的显示NULL -- MySQL中不支持全连接语法,只能通过union all语句,将左、右连接查询拼接起来实现 select * from 表1 left join 表2 on 表1.字段 = 表2.字段 union all select * from 表1 right join 表2 on 表1.字段 = 表2.字段; -- 继续拼接查询两张以上的表 select * from 表1 left join 表2 on 表1.字段 = 表2.字段 left join 表3 on 表2.字段 = 表3.字段; -- 通过隐式连接的方式,查询两张以上的表 select * from 表1,表2,表3... where 表1.字段 = 表2.字段 and 表1.字段 = 表3.字段...; -- 通过子查询的方式,查询两张以上的表 select * from (表1 as 别名1 left join 表2 as 别名2 on 别名1.字段 = 别名2.字段) left join 表3 as 别名3 on 别名1.字段 = 别名3.字段;
MySQL默认会将左表每一条数据挨个和右表所有数据关联一次,然后查询一次数据。比如左表有3条数据,右表有4条数据,笛卡尔积情况出现时,一共就会查询出3 x 4 = 12条数据。abs(X):返回X的绝对值,如传进-1,则返回1。 ln(X):返回X的自然相对数。 log(X,Y):返回以X的以Y为底的对数。 log10(X):返回以X基数为10的对数。 bin(X):返回X的二进制值。 oct(X):返回X的八进制值。 hex(X):返回X的十六进制值。 mod(X,Y):返回X除以Y的余数。 ceil(X) | ceiling(X):返回不小于X的最小整数,如传入1.23,则返回2。 round(X):返回X四舍五入的整数。 floop(X):返回X向下取整后的值,如传入2.34,会返回2。 greatest(X1,X2....,Xn):返回集合中的最大整数值。 least(X1,X2....,Xn):返回集合中的最小整数值。 rand(N):返回一个0~N``0~1之间的随机小数(不传参默认返回0~1之间的随机小数)。 sign(X):传入正数,返回1;传入负数,返回-1;传入0,返回0。 pow(X,Y) | power(X,Y):返回X的Y次方值。 pi():返回四舍五入后的圆周率,3.141593。 sin(X):返回X的正弦值。 asin(X):返回X的反正弦值。 cos(X):返回X的余弦值。 acos(X):返回X的反余弦值。 tan(X):返回X的正切值。 atan(X):返回X的反正切值。 cot(X):返回X的余切值。 radians(x):返回x由角度转化为弧度的值。 degrees(x):返回x由弧度转化为角度的值。 sqrt(X):返回X的平方根。 exp(e,X):返回e的x乘方的值。 truncate(X,N):返回小数X保留N位精准度的小数。 format(x,y):将x格式化位以逗号隔开的数字列表,y是结果的小数位数。 inet_aton(ip):将IP地址以数字的形式展现。 inet_ntoa(number):显示数字代表的IP地址。 ......
字符串函数
ascii(C):返回字符C的ASCII码。 length(S):返回字符串的占位空间,传入“中国”,返回6,一个汉字占位3字节。 bit_length(S):返回字符串的比特长度。 concat(S1,S2,...):合并传入的多个字符串。 concat_wa(sep,S1,S2...):合并传入的多个字符串,每个字符串之间用sep间隔。 position(str,s) | locate(str,s):返回s在str中第一次出现的位置,没有则返回0。 find_in_set(S,list):返回字符串S在list列表中的位置。 insert(S1,start,end,S2):使用S2字符串替换掉S1字符串中start~end的内容。 lcase(S) | lower(S):将传入的字符串中所有大写字母转换为小写。 ucase(S) | upper(S):将传入的字符串中所有小写字母转换为大写。 left(S,index):从左侧开始截取字符串S的index个字符。 right(S,index):从右侧开始截取字符串S的index个字符。 trim(S):删除字符S左右两侧的空格。 rtrim(S):删除字符S右侧的空格。 replace(S,old,new):使用new新字符替换掉S字符串中的old字符。 repeat(str,count):将str字符串重复count次后返回。 substring(S,index,N):截取S字符串,从index位置开始,返回长度为N的字符串。 reverse(S):将传入的字符串反转,即传入Java,返回avaJ。 quote(str):用反斜杠转移str中的英文单引号。 strcmp(S1,S2):比较两个字符是否相同。 lpad(str,len,s):对str字符串左边填充len个s字符。 rpad(str,len,s):对str字符串右边填充len个s字符。 ......
日期和时间函数
curdate() | current_date():返回当前系统的日期,如2022-10-21。 curtime() | current_time():返回当前系统的时间,如17:30:52。 now() | sysdate():返回当前系统的日期时间,如2022-10-21 17:30:59。 unix_timestamp():获取一个数值类型的unix时间戳,如1666348711。 from_unixtime():将unix_timestamp()获取的数值时间戳,格式化成日期格式。 month(date):获取date中的月份。 year(date):获取date中的年份。 hour(date):获取date中的小时。 minute(date):获取date中的分钟。 second(date):获取date中的秒数。 monthname(date):返回date中月份的英文名称。 dayname(date):获取日期date是星期几,如Friday。 dayofweek(date):获取date位于一周的索引位置,周日是1、周一是2...周六是7。 week(date):获取date是本年的第多少周。 quarter(date):获取date位于一年中的哪个季度(1~4)。 dayofyear(date):获取date是本年的第多少天。 dayofmonth(date):获取date是本月的第多少天。 time_to_sec(time):将传入的时间time转换为秒数,比如"01:00:00" = 3600s。 date_add(date,interval 时间 单位) | adddate(...):将date与给定的时间按单位相加。 date_sub(date,interval 时间 单位) | subdate(...):将date与给定的时间按单位相减。 addtime(date,time):将date加上指定的时间,如addtime(now(),"01:01:01")。 subtime(date,time):将date减去指定的时间。 datediff(date1,date2):计算两个日期之间的间隔天数。 last_day(date):获取date日期这个月的最后一天。 date_format(date,format):将一个日期格式化成指定格式,format可选项如下: %a:工作日的英文缩写(Sun~Sat)。 %b:月份的英文缩写(Jan~Dec)。 %c:月份的数字格式(1~12)。 %M:月份的英文全称(January~December)。 %D:带有英文后缀的数字月份(1th、2st、3nd....)。 %d:一个月内的天数,双数形式(01、02、03....31)。 %e:一个月内的天数,单数形式(1、2、3、4....31)。 %f:微妙(000000~999999)。 %H:一天内的小时,24小时的周期(00、01、02...23)。 %h | %I:一天内的小时,12小时的周期(01、02、03...12)。 %i:一小时内的分钟(00~59)。 %j:一年中的天数(001~366)。 %k:以24小时制显示时间(00~23)。 %l:以12小时制显示时间(01~12)。 %m:月份的数字形式,双数形式(01~12)。 %p:一天内的时间段(上午AM、下午PM)。 %r:12小时制的时间(12:01:09 AM)。 %S | %s:秒数,双数形式(00~59)。 %T:24小时制的时间(23:18:22)。 %U:一年内的周(00~53)。 time_format(time,format):将一个时间格式化成指定格式。 str_to_date(str,format):将日期字符串,格式化成指定格式。 timestampdiff(unit,start,end):计算两个日期之间间隔的具体时间,unit是单位: year:年。 quarter:季度。 month:月。 week:周。 day:天。 hour:小时。 minute:分钟。 second:秒数。 microsecond:微妙。 weekday(date):返回date位于一周内的索引(0是周一...6是周日)。
聚合函数
max(字段名):查询指定字段值中的最大值。
min(字段名):查询指定字段值中的最小值。
count(字段名):统计查询结果中的行数。
sum(字段名):求和指定字段的所有值。
avg(字段名):对指定字段的所有值,求出平均值。
group_concat(字段名):返回指定字段所有值组合成的结果,如下:
distinct(字段名):对于查询结果中的指定的字段去重。
控制流程函数
if(expr,r1,r2):expr是表达式,如果成立返回r1,否则返回r2。 ifnull(v,r):如果v不为null则返回v,否则返回r。 nullif(v1,v2):如果v1 == v2,则返回null,如果不相等则返回V1
-- if的用例
select if(user_id > 3,"√","×") from zz_users;
-- ifnull的用例
select ifnull(user_id,"×") from zz_users;
-- case语法1:
case <表达式>
when <值1> then <操作>
when <值2> then <操作>
...
else <操作>
end;
-- 用例:判断当前时间是星期几
select case weekday(now())
when 0 then '星期一'
when 1 then '星期二'
when 2 then '星期三'
when 3 then '星期四'
when 4 then '星期五'
when 5 then '星期六'
else '星期天'
end as "今天是星期几?";
-- case语法2:
case
when <条件1> then <命令>
when <条件2> then <命令>
...
else commands
end;
-- 用例:判断今天是星期几
select case
when weekday(now()) = 0 then '星期一'
when weekday(now()) = 1 then '星期二'
when weekday(now()) = 2 then '星期三'
when weekday(now()) = 3 then '星期四'
when weekday(now()) = 4 then '星期五'
when weekday(now()) = 5 then '星期六'
else '星期天'
end as "今天是星期几?";
加密函数
password(str):将str字符串以数据库密码的形式加密,一般用在设置DB用户密码上。
md5(str):对str字符串以MD5不可逆算法模式加密。
encode(str,key):通过key密钥对str字符串进行加密(对称加密算法)。
decode(str,key):通过key密钥对str字符串进行解密。
aes_encrypt(str,key):通过key密钥对str字符串,以AES算法进行加密。
aes_decrypt(str,key):通过key密钥对str字符串,以AES算法进行解密。
sha(str):计算str字符串的散列算法校验值。
encrypt(str,salt):使用salt盐值对str字符串进行加密。
decrypt(str,salt):使用salt盐值对str字符串进行解密。
系统函数
version():查询当前数据库的版本。 connection_id():返回当前数据库连接的ID。 database() | schema():返回当前连接位于哪个数据库,即use进入的库。 user():查询当前的登录的所有用户信息。 system_user():返回当前登录的所有系统用户信息。 session_user():查询所有连接的用户信息。 current_user():查询当前连接的用户信息。 charset(str):返回当前数据库的编码格式。 collation(str):返回当前数据库的字符排序规则。 benchmark(count,expr):将expr表达式重复运行count次。 found_rows():返回最后一个select查询语句检索的数据总行数。 cast(v as 类型):将v转换为指定的数据类型。
数值类型
tinyint:小整数类型,占位1Bytes,取值范围-128~127。 smallint:中整数类型,占位2Bytes,取值范围-32768~32767。 mediumint:中大整数类型,占位3Bytes,取值范围-8388608~8388607。 int | integer:常用整数类型,占位4Bytes,取值范围-2147483548~2147483647。 bigint:超大整数类型,占位8Bytes,取值范围-9223372036854775808~9223372036854775807。 float:单精度浮点数类型,占位4Bytes,取值范围-3.4E+38 ~ 3.4E+38。 double:双精度浮点数类型,占位8Bytes,取值范围-1.7E-308~1.7E+308。 decimal(m,d):小数类型,占位和取值范围都依赖m、d值决定,m是小数点后面的精度,d是小数点前面的标度。 bit(m):存储位值,可存储m个比特位,取值范围是1~64。
字符串类型
char:定长字符串类型,存储空间0~255Bytes。 varchar:变长字符串类型,存储空间0~65535Bytes。 tinyblob:二进制短字符串类型,存储空间0~255Bytes。 tinytext:短文本字符串类型,存储空间0~255Bytes。 blob:二进制长字符串类型,存储空间0~65535Bytes。 text:长文本字符串类型,存储空间0~65535Bytes。 mediumblob:二进制大字符串类型,存储空间0~16777215Bytes。 mediumtext:大文本字符串类型,存储空间0~16777215Bytes。 longblob:二进制超大字符串类型,存储空间0~4294967295Bytes。 longtext:超大文本字符串类型,存储空间0~4294967295Bytes。 binary(m):定长字符串类型,存储空间为M个字符。 varbinary(m):定长字符串类型,存储空间为M个字符+1个字节。 一般在为列指定数据类型时,都会varchar(255)这样写,其实中间的这个数字限制的并不是字节长度,而是字符数量,比如varchar(255),表示该列最大能存储255个字符。
时间日期类型
date:日期类型,占位3Bytes,格式为YYYY-MM-DD。 time:时间类型,占位3Bytes,格式为hh:mm:ss。 year:年份类型,占位1Bytes,格式为YYYY。 datetime:日期时间类型,占位8Bytes,格式为YYYY-MM-DD hh:mm:ss。 timestamp:时间戳类型,占位4Bytes,格式为YYYYMMDDhhmmss,最大可精确到微妙。
其他类型
json:MySQL5.7版本引入的,在此之前只能用字符串类型来存储json数据,需要通过函数辅助使用: json_array(...):存储一个json数组的数据。 json_array_insert(字段,'$[下标]',"值"):在指定的json数组下标位置上插入数据。 json_object(...):存储一个json对象。 json_extract(字段,'$.键'):查询键为某个值的所有数据。 json_search(....):通过值查询键。 json_keys(字段):获取某个字段的所有json键。 json_set(字段,'$.键',"值"):更新某个键的json数据。 json_replace(...):替换某个json中的数据。 json_remove(字段,'$.键'):删除某个json数据。 .....:还有一些其他json类型的函数,这里不再说明,一般json类型用的较少。 enum(选项1,选项2...选项n):新增数据时只能从已有的选项中选择一个并插入。 set(选项1,选项2...选项n):新增数据时可以从已有的选项中选择多个并插入。 eometry、point、linestring、polygon:空间类型(接触不多)。 稍微解释一下enum、set类型,这两种类型就类似于平时的单选框和多选框,必须从已有的选项中选择,两者的区别在于:enum枚举类型只能选择一个选项,而set集合类型可以选择多个选项(其实用的比较少,多数情况下都是直接在客户端中处理)。
索引方面命令
-- 创建一个普通索引(方式①) create index 索引名 ON 表名 (列名(索引键长度) [ASC|DESC]); -- 创建一个普通索引(方式②) alter table 表名 add index 索引名(列名(索引键长度) [ASC|DESC]); -- 创建一个普通索引(方式③) CREATE TABLE tableName( columnName1 INT(8) NOT NULL, columnName2 ...., ....., index [索引名称] (列名(长度)) ); -- 后续其他类型的索引都可以通过这三种方式创建 -- 创建一个唯一索引 create unique 索引名 ON 表名 (列名(索引键长度) [ASC|DESC]); -- 创建一个主键索引 alter table 表名 add primary key 索引名(列名); -- 创建一个全文索引 create fulltext index 索引名 ON 表名(列名); -- 创建一个前缀索引 create index 索引名 ON 表名 (列名(索引键长度)); -- 创建一个空间索引 alter table 表名 add spatial key 索引名(列名); -- 创建一个联合索引 create index 索引名 ON 表名 (列名1(索引键长度),列名2,...列名n);
索引查看、使用与管理的命令
-- 查看一张表上的所有索引
show index from 表名;
-- 删除一张表上的某个索引
drop index 索引名 on 表名;
-- 强制指定一条SQL走某个索引查找数据
select * from 表名 force index(索引名) where .....;
-- 使用全文索引(自然搜索模式)
select * from 表名 where match(索引列) against('关键字');
-- 使用全文索引(布尔搜索模式)
select * from 表名 where match(索引列) against('布尔表达式' in boolean mode);
-- 使用全文索引(拓展搜索模式)
select * from 表名 where match(索引列) against('关键字' with query expansion);
-- 分析一条SQL是否命中了索引
explain select * from 表名 where 条件....;
事务与锁
start transaction; | begin; | begin work;:开启一个事务。 commit;:提交一个事务。 rollback;:回滚一个事务。 savepoint 事务点名称;:添加一个事务点。 rollback to 事务点名称;:回滚到指定名称的事务点。 release savepoint 事务点名称;:删除一个事务点。 select @@tx_isolation;:查询事务隔离级别(方式一)。 show variables like '%tx_isolation%';:查询事务隔离级别(方式二)。 set transaction isolation level 级别:设置当前连接的事务隔离级别。 set @@tx_isolation = "隔离级别";:设置当前会话的事务隔离级别。 set global transaction isolation level 级别;:设置全局的事务隔离级别,选项如下: read uncommitted:读未提交级别。 read committed:读已提交级别。 repeatable-read:可重复读级别。 serializable:序列化级别。 show variables like 'autocommit';:查看自动提交事务机制是否开启。 set @@autocommit = 0|1|ON|OFF;:开启或关闭事务的自动提交。 select ... lock in share mode;:手动获取共享锁执行SQL语句。 select ... for share;:MySQL8.0之后优化版的共享锁写法。 select ... for update;:手动获取排他锁执行。 lock tables 表名 read;:获取表级别的共享锁。 lock tables 表名 write;:获取表级别的排他锁。 show open tables where in_use > 0;:查看目前数据库中正在使用的表锁。 flush tables with read lock;:获取全局锁。 unlock tables;:释放已获取的表锁/全局锁。 update 表名 set version=version+1 ... where... and version=version;:乐观锁模式执行。
其他详细信息:https://juejin.cn/post/7163148228420960263
作者:竹子爱熊猫
链接:https://juejin.cn/post/7163148228420960263
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号