mysql基本命令

安装mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# https://dev.mysql.com/downloads/repo/yum/ 查看对应版本
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum install -y mysql-server
echo "skip-grant-tables" >> /etc/my.cnf
systemctl start mysqld
mysql -uroot -proot
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
sed -i -e '/^skip-grant-tables/d' /etc/my.cnf
systemctl restart mysqld
mysql -uroot -proot
CREATE DATABASE `hive` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on *.* to root@localhost identified by 'root';
flush privileges;

权限和修改配置文件问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ubuntu的配置文件和docker mysql:5.7一样
vim /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
# 可以在上面两个目录下,创建*.conf来为启动mysql增加参数
# 默认使用到的是/etc/mysql/mysql.conf.d/mysqld.cnf
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
skip-grant-tables
# bind-address = 127.0.0.1 #注释掉就可以远程访问了
bind-address = 0.0.0.0 # 或者这样
# 允许本地ip的blog用户,使用blog密码访问blog数据库
GRANT ALL PRIVILEGES ON blog.* TO 'blog'@'localhost' IDENTIFIED BY 'blog';
# 允许远程的任何ip的root用户 使用root密码 访问所有数据库
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
# 不用密码登录
grant all privileges on *.* to root@localhost identified by '' with grant option;
# 刷新权限
FLUSH PRIVILEGES;

字符集问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看字符集的设置
show variables like 'character_set%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 #客户端来源数据使用的字符集
| character_set_connection | utf8 # 连接层字符集
| character_set_database | utf8 #当前选中数据库的默认字符集
| character_set_filesystem | binary
| character_set_results | utf8 #查询结果字符集 |
| character_set_server | utf8 #默认的内部操作字符集 |
| character_set_system | utf8 #系统元数据(字段名等)字符集
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
# 或者使用 status 命令
# 一般情况下,只需要设置如下两个选项,就会得到上面的结果
set character_set_server='utf8';
set character_set_database='utf8';
# 如果还是有中文乱码问题,则是在创建数据库时,没有设置默认字符集
CREATE DATABASE `hive` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
alter database hive default character set utf8;

导出导入

1
2
3
4
5
6
7
8
# 将数据库hive所有表导出(导入的时候就会导出所有的表)
mysqldump -uroot -proot hive >hive.sql
# 只导出 某些表(导入时只导入这些表)
mysqldump -hxx -uroot -proot --databases qhh --tables goods_goodscategory goods_banner goods_goods goods_goodsimage >db1.sql
# 导入
mysql -h0.0.0.0 -uroot -proot hive < hive.sql

连接mysql

1
2
3
4
5
# mysqladmin修改密码
mysqladmin -u root -p password 'root'
# mysqladmin创建/删除数据库
msyqladmin -uroot -p craete/drop hive

mysql基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
1. SELECT user(); -- 查看当前哪个用户登录到数据库
2. SHOW DATABASES; -- 查看DBMS中有哪些数据库
3. USE 数据库名 --更换要使用的数据库
4. SELECT database(); -- 查看当前正在使用哪个数据库
5. CREATE DATABASE 数据库名; -- 建立一个数据库
6. CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
C:\Program Files\MySQL\MySQL Server 5.7\bin
mysql -u tom -p
FLUSH PRIVILEGES
7. GRANT ALL ON world.* to 'tom'@'%'; -- 授予tom用户在world数据库中所有的权限
8. REVOKE ALL ON world.* from 'tom'@'%'; -- 回收tom用户在world数据库中所有的权限
9. SELECT "Hello, World!" AS "String";
10. SELECT "Hello, World!" AS "String" FROM dual;
11. SELECT now(); -- 显示当前数据库系统中的日期
12. SELECT code, name, gnp FROM world.country; -- 选择world数据库中country表格中code, name, gnp三列的内容进行显示
13. SHOW TABLES; -- 当前数据库中存在哪些表格
14. \g可以替代分号作为结尾
15. \G 将表格中的数据纵向排列显示
16. DELIMITER $$ -- 改变结束符号
DELIMITER ;
17. status -- 查看一些基本信息
18. \c -- 放弃当前语句
19. SOURCE c:\789.txt -- 执行789.txt文件中的内容
\. c:\789.txt -- 同上句,意思完全相同
20. TEE /home/name/111.txt -- 打开记录日志功能
NOTEE; -- 关闭日志记录功能
insert into test(id, name) values(1, 'Tom');
update test set name='XX';
select * from test where name='Tom' and (age > 4 or hige like '%0' or sex in ('男','女')) order by id asc/desc; --%就相当于正则中的*
SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
delete from test where id=1; --清空表中的内容
21.
CREATE TABLE new_table1(
id int NOT NULL AUTO_INCREMENT,
name varchar(20) default femn,
birthday date,
salary double,
sex boolean,
primary key (id) --constraint pk_id primary key (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 建立表innodb才支持事务
SHOW CREATE TABLE table_name \G;
22. DESC new_table1; -- 查看表结构
23. INSERT INTO new_table1(id, name, birthday, salary, sex) VALUES (1, 'Tom', DATE'1982-05-17', 5000.0, true); -- 插入一行数据
24. SELECT * FROM new_table1; -- 查看表中内容
25. TRUNCATE TABLE new_table1; -- 清除表中内容
26. DROP TABLE new_table1; -- 删除表
27. ALTER TABLE new_table1 modify id long; -- 修改列
28. ALTER TABLE new_table1 add xxx integer; -- 添加列
29. ALTER TABLE new_table1 drop xxx; -- 删除列
ALTER TABLE table_name CHANGE id id1 INT
ALTER TABLE testalter_tbl RENAME TO alter_tbl; --修改表名
主键约束=唯一性约束+非空约束
alter table test
add constraint pk_id primary key(id); 主键约束
alter table test
add constraint un_name unique(name); 唯一性约束:唯一但是允许非空
alter table test
add constraint ck_id check id >=1; 检查性约束
alter table emp
add constraint fk_deptno
foreign key(deptno) references dept(deptno);
外键就是另外一张表中的主键
alter table test
drop constraint `ck_id`;
select count(*) from test;
select max(id) from test;
select min(id) from test;
select avg(id) from test;
select sum(id) from test;
子查询 一个查询语句里面还套有一个查询语句.
select deptno from emp where ename='SCOTT';
select empno, ename, deptno from emp where deptno=20;
select empno, ename, deptno from emp
where deptno = (select deptno from emp where ename='SCOTT');
select empno, ename, deptno from emp as e1
where sal> (select avg(sal) from emp as e2 where e1.deptno=e2.deptno);--
-- 各部门有多少人高于本部门平均工资
select empno, ename, deptno from emp as e1
where sal<ANY(select sal from emp where deptno=30 ) AND deptno<>30;--
Share Comments