mysql知识梳理
前期准备
安装mysql
- 下载安装包:官网下载地址。
- 双击安装包就可以进行安装。务必当场记住root的密码,我当初没记住后面记不起来了各种碰壁。(如果不幸忘记了密码,下面有鞋解决办法)
- 安装完在system preference中就会出现mysql服务,自己可以手动开启和关闭。
如果手动关闭不了可以重启电脑或者查杀进程,查杀进程命令如下1
2
3ps aux |grep mysql
kill [进程id]
忘记root密码怎么办
- 关闭mysql 服务。
- 以管理员权限开启安全模式访问,步骤如下:
1
2
3
4
5
6
7
8
9
10
111. 获取管理员权限
sudo su
2. 查找mysql安装目录
which mysql
3. 进入mysql的bin目录
cd [你的mysql目录]/bin/
4. 开启安全访问
./mysqld_safe --skip-grant-tables &
5. 安全访问成功之后会展示如下信息,否则大概率是服务没有关闭
mysqld_safe Logging to '/usr/local/mysql/data/lyqdeMacBook-Pro.local.err'.
mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data - 更新密码。
1
2
3
4
5
6
7
8
9
10
11
121. 新开一个terminal,进入mysql的bin目录
2. 免密登录mysql
mysql -u root -p // 不用输入密码直接回车2次
3. 更换至mysql数据库
use mysql;
4. 刷新数据
flush privileges;
5. 更新root密码
set password fot root@localhost = '12345678'; // 早期版本(应该是8以前)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; // 新版命令
6. 再次刷新数据
flush privileges;
mysql 语法知识
连接数据库语句
- 默认连接本机数据库
1
mysql -u root -p
- 连接远端数据库
1
mysql -h 192.168.1.134 -u root -p
数据库定义语句(DDL:Data Denifition Language)
- 数据库定义语句
- 创建数据库
1
2-- windows 下需改写成 create database db_test charset=utf8
create database db_test character set=utf8; - 查看数据库
1
show databases;
- 选择数据库
1
use db_test;
- 删除数据库
1
drop database db_test;
- 表定义语句
- 创建表
1
2
3
4
5create table tb_test(
id int,
name char(10),
phone char(11)
); - 查看数据的所有表
1
show tables;
- 删除表
1
drop table tb_test;
- 表的约束设置
1
2
3
4
5
6
7
8
9
10
11
12create table tb_test(
id int [primary key], // 主键约束
name char(10) [not null], // 非空约束
phone char(11) [unique], // 唯一约束
email char(50), // 字符串长度约束
sex int [default 1], // 默认约束
depart_id int, // 类型约束
CONSTRAINT `emp_dept_fk` FOREIGN KEY (`depart_id`) REFERENCES `tb_dept` (`id`)
ON DELETE NO ACTION
ON UPDATE CASCADE, // 外键约束
primary key (id, name) // 复合主键(复合主键要求对应的字段不能为空)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; // mysql只有InnoDB引擎支持外键设置。 - 重设表主键约束
1
2
3
4-- 删除原来主键
alter table tb_emp drop primary key;
-- 添加主键
alter table tb_emp add pripary key id; - 重新设置表字段约束
1
alter table tb_test modify name char(20) default null;
- 重新设置表的外键约束
1
2
3
4
5
6
7-- 删除外键
alter table tb_emp drop foreign key emp_dept_fk;
-- 删除外键索引
alter table tb_emp drop index emp_dept_fk;
-- 设置外键
alter table tb_emp add constraint emp_dept_fk foreign key (dept_id) references tb_dept (id);
- 其他数据库定义语句
1
2
3
4
5
6
7
8-- 展示所有数据
show databases;
-- 展示所有表(请先使用use [数据库名]来选定数据库)
show tables;
-- 展示表的创建语句
show create table [表名];
-- 展示表中各列的信息
desc [表名];
数据库操作语句(DML:Data Manipulation Language)
- insert 语句
1
insert into tb_dept(id, name, address) values (1, '研发部', '杭州');
- delete 语句
1
delete from tb_emp where id = 1;
- update 语句
1
update tb_emp set name = 'weihh', age = 18 where id = 1;
数据库查询语句(DML:Data Query Language)
- 查询表所有数据
1
select * from tb_emp;
- 条件查询
1
select name as 名字, age as 年龄 from tb_emp where name = 'weihh' and age = 18;
- 模糊查询
1
2
3select * from tb_emp where name like '%weihh%';
select * from tb_emp where name like 'weihh%';
select * from tb_emp where name like '%weihh'; - 范围查询
1
2select * from tb_emp where age between 18 and 35;
select * from tb_emp where age in (18, 20, 30, 35); - 查询结果排序
1
select * from tb_emp order by id desc, age asc;
- 聚合函数查询
1
2
3
4
5
6
7
8
9
10-- count 函数(推荐使用count(1)代替count(*)提高效率,count(colunm)会过滤null值导致计数和count(1)不一致)
select count(1) from tb_emp where age > 18;
-- max 函数
select max(age) from tb_emp;
-- min 函数
select min(age) from tb_emp;
-- avg 函数
select ave(age) from tb_emp;
-- sum 函数
select sum(age) from tb_emp; - 查询分组
1
select count(1) from tb_emp group by dept_id;
- 分页查询
1
select * from tb_emp limit 0, 4;
- inner join:内连接
组合两个表中相关联的记录,也就是返回两个表的交集部分。(连接查询会返回两个表中的所有查询字段)1
select * from tb_a a inner join tb_b b on a.id = b.a_id;
- left join:左连接
根据两个表中相关联的记录,返回左表中所有记录+右表中相关联的记录(右表中不足的部分null补充)1
select * from tb_a a left join tb_b b on a.id = b.a_id;
- right join:右连接
根据两个表中相关联的记录,返回右表中所有记录+左表中相关联的记录(左表中不足的部分null补充)1
select * from tb_a a right join tb_b b on a.id = b.a_id;
- union all:全连接
返回union all两边的合集。(要求查询2边的列数相同,如果列名不同则以第一个查询语句为准)1
(select id, name from tb_a) union all (select name, address from tb_b);
事务控制语句(TCL:Trasactional Control Languag)
- 提交事务
1
2
3
4begin;
insert into tb_dept(id, name, address) values(3, 'development', 'HangZhou');
insert into tb_emp(name, age) values('whh', 21,3);
commit; - 设置保存点
1
savepoint s1;
- 回滚
1
rollback to s1;
- 改变事物提交模式
1
2
3
4-- 禁止自动提交
set autocommit = 0;
-- 开启自动提交
set autocommit = 1;
数据库控制语句(DCL:Data Control Language)
用来管理数据库用户、控制数据库的访问权限
- 管理用户
- 查询数据库的用户信息
1
2
3
4-- 连接数据库后选择mysql数据库
use mysql;
-- 查询用户表信息
select Host, User from user; - 创建用户
1
create user '用户名'@'主机名' identified by '密码';
- 删除用户
1
drop user '用户名'@'主机名';
- 设置权限
- 查看权限
1
show grants for '用户名'@'主机名';
- 赋予权限
1
2grant 权限列表 on 数据库.表名 to '用户名'@'主机名';
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP on *.* to 'weihh'@'localhost'; - 撤销权限
1
revoke 权限列表 on 数据库.表名 from '用户名'@'主机名';