备份表
create table km_team_member_20201221 like km_team_member;
insert into km_team_member_20201221 select * from km_team_member;
添加索引
ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)
//普通索引
alter table table_name add index index_name (column_list);
//唯一索引
alter table table_name add unique (column_list);
//主键索引
alter table table_name add primary key (column_list) ;
常用操作
show PROCESSLIST 查看进程
mysql缓存:
https://blog.csdn.net/weixin_39626613/article/details/113121854
https://blog.csdn.net/yabingshi_tech/article/details/49494487
查询优化:
https://www.cnblogs.com/firstdream/p/5899383.html
create table km_team_member_20201221 like km_team_member;
insert into km_team_member_20201221 select * from km_team_member;
rename table 旧表名 to 新表名;
alter table 旧表名 rename [as] 新表名
1、 添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
1、修改字段
alter table access_log modify column `duration` int(11) NOT NULL DEFAULT '0' COMMENT '请求耗时';
2、修改备注
alter table km_materials modify column `bitrate` int(11) DEFAULT '0' COMMENT '视频码率(总码率)';
导入数据表:
nohup mysqldump -h 127.0.0.1 -uroot -p123456 xunmall < user.sql 2>&1 &
导入导出
mysql命令:导入
source /home/xunmall.sql (要先use 数据库)
linux命令:导入
nouhp mysqldump -h 127.0.0.1 -uroot -p123456 ugdesk < xunmall.sql 2>&1 & exit
# nohup npm run dev >/dev/null 2>&1 & exit (不记录日志)
导出:
mysqldump -h 127.0.0.1 -uugdesk -D ugdesk -p123456 数据库名 表名 >
/tmp/
ug_stats_materila_hourly
1
.sql
函数会阻止索引
5.7,虚拟列
查询语句可以正常使用虚拟列作为索引。
通过虚拟列的方式,即满足了查询性能,也不会有之前那个解决方案的潜在麻烦。
虚拟列不存储在数据行中,但虚拟列的元数据信息会存在于相关系统表中,对虚拟列的添加或者删除只会涉及这些系统表,不会导致数据表的重建,所以效率很高。
需要注意,不能建立虚拟列和真实列的联合索引
给IP和账号设置数据库权限
grant all on *.* to root@'192.168.20.49';
grant select on *.* to root@192.168.20.49 ; -- dba 可以查询 MySQL 中所有数据库中的表。
grant all on *.* to root@192.168.20.49 ; -- dba 可以管理 MySQL 中的所有数据库
以上不行就下面
GRANT ALL PRIVILEGES ON *.* TO 'aitang'@'192.168.100.142' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
PHPstudy升级MySQL到5.7.17
1、复制新下载的文件夹内容到MySQL,并新建data文件夹
2、把MySQL/bin 加入到系统变量
3、mysqld --initialize 然后 mysqld --install
4、sc delete mysql (删除旧的服务,否则不能启动)
5、net start mysql 启动新服务 (4/5顺序可调换)
6、此时密码错误,(要跳过表权限,修改密码,重启服务)
group_contact 用法
用于分组查询 https://www.cnblogs.com/hanybblog/p/6125792.html
高级SQL查询
1、
date格式的条件选择
SELECT * FROM fa_front_project WHERE dayofweek(updatetime) = 2; ###
时间格式化,两位小数,平均值
SELECT DATE_FORMAT(QX_D_DATE,'%Y-%m-%d') as new_time,id,format(AVG(QX_D_T_CR),2) as t FROM t_ir_qxdtcr_m WHERE QX_D_DATE < '2018-12-17' AND QX_D_DATE > '2017-11-17' AND QXZ_STN_ID = 54113 GROUP BY new_time;
2、 MySQL函数
数字函数
随机函数 round()
格式化小数format(x,d)
截取函数truncate()函数会将小数部分2位以后的值直接舍去。
类型转换函数 convert(expr,type),用法:select convert(salary,decimal(10,2)); convert()函数会对小数部分进行四舍五入操作,
时间格式函数:
DATE_FORMAT(QX_D_DATE,'%Y-%m-%d') 把'2008-08-08 22:23:01' 转成 2008-08-09
3、替换某个表中某个字段的某个字符
update 表名
set 字段名=REPLACE (字段名,'原来的值','要修改的值')
4、 批量更新
UPDATE fa_front_project
SET edge_json = CASE id
WHEN 1 THEN
101
WHEN 2 THEN
102
ELSE
999999
END CASE;
5、FIND_IN_SET 查找
6、一张表中两个字段互换
SET SQL_SAFE_UPDATES = 0;
update temp3 as a, temp3 as b set a.test1=b.test3, a.test3=b.test1 where a.id=b.id and a.test4=1 and b.test4=1;
SET SQL_SAFE_UPDATES = 1;
索引
索引数量不宜太多,可以联合索引,遵从最左前缀,遇到范围查找不适用后面的索引
haproxy实现mysql双主高可用的详细过程
https://blog.csdn.net/bbwangj/article/details/82969078