MySQL
修改密码
mysql -uroot -p
set password = password('new password');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
创建用户
use mysql
create user '新用户名'@'%' identified by '密码';
数据库授权
mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'new password' WITH GRANT OPTION;
flush privileges;
#创建数据库(默认编码)
CREATE DATABASE impp_i3_mes DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
#创建数据库(指定编码)
CREATE DATABASE impp_i3_mes COLLATE 'utf8_danish_ci';
#特定账号看到特定数据库:impp_i3_mes_user用户只能看到impp_i3_mes数据库
CREATE USER 'impp_i3_mes_user'@'%' IDENTIFIED BY 'impp_i3_mes_pwd';
grant all privileges on impp_i3_mes.* to impp_i3_mes_user@'%';
FLUSH PRIVILEGES;
mysqldump备份-docker版
docker exec -it 7116927f71f1_dbmaster mysqldump -uroot -pestsh123 impp_i3_mes_pcn > /root/impp_i3_mes_pcn.sql
#压缩sql文件
tar -zcvf mes-pcn.tar.gz impp_i3_mes_pcn.sql
zip mes-pcn.zip impp_i3_mes_pcn.sql
#导出123服务器上所有数据库(导出目录要检查下空间是否充足)
docker exec -it 7116927f71f1_dbmaster mysqldump -uroot -pestsh123 -h172.16.0.123 -P33066 --all-databases > /home/impp_123_all.dump
mysql恢复-docker版
基于Mysqldump导出的sql文件业务需要重新导入另一台数据库,如果数据量比较少使用Navicat可直接导入,非常方便。如果数据量比较大,使用Navicat导入则会出现很多报错并且会很吃电脑内存,电脑会非常烫,这里记录下使用命令方式导入。
1、将sql文件解压出来拷贝到docker容器里(容器里没有unzip命令,需要安装)
unzip impp_i3_mes-2021-04-20_063001.zip
#docker cp 需要导入的文件 docker容器的名称:容器内存放的路径
docker cp impp_i3_mes.sql dbmaster:/root/
2、进入容器
docker exec -it dbmaster bash
3、在容器里执行导入命令
mysql -uroot -pestsh123 impp_i3_mes < /root/impp_i3_mes.sql
等待执行完毕就OK了!
第二种方式是进入到数据库后使用source执行(未测试,理论可行)
mysql -uroot -pestsh123
use impp_i3_mes;
source /root/impp_i3_mes.sql
查找重复值(HAVING)
select count(object_code) as oct, object_code
from mes_pcn_sync_cfg
where is_valid = 1 AND is_deleted = 2
group by object_code
HAVING oct > 1
order by oct
去除重复值(DISTINCT)
select distinct * from mes_pcn_sync_cfg
清空表
TRUNCATE TABLE mes_time
区别:
delete删除表数据,相当于一条条删除。如果有字段是自增的(一般为id),这样删除后,id 值还是存在的。举例来说,就是加入你在删除之前最大的id为100,你用这种方式清空表后 ,新插入一条数据其id为101,而不是1。
truncate table 表名,直接清空表,相当于重建表,保持了原表的结构,id也会清空。相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。
SqlServer
查找重复值(HAVING)
select count(object_code) as oct, object_code
from mes_pcn_sync_cfg
where is_valid = 1 AND is_deleted = 2
group by object_code
HAVING COUNT(object_code) > 1
order by oct
与MySQL区别:SqlServer不能使用oct别名来判断,MySQL可以