使用 docker 部署 mysql
2023年2月3日...大约 2 分钟mysql
通过 docker 部署 MySQL,使用 docker-compose 配置的方式
# docker-compose 配置文件
version: "3.7"
services:
mysql: #mysql容器
image: mysql
container_name: mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: "123456" #这里自行设置root用户的密码
volumes:
- /service/mysql/my.cnf:/etc/my.cnf/
- /service/mysql/data:/var/lib/mysql
- /service/mysql/initdb.d:/docker-entrypoint-initdb.d
ports:
- 3306:3306 #宿主机和容器间的端口映射,可自行配置
接下来运行命令启动容器,并以root用户、密码连接上数据库
docker-compose up -d
docker exec -it mysql mysql -u root -p
开始好几次登录都遇到 Access denied for user 'root'@'localhost' (using password: Yes)
的报错,还在查着原因突然就可以登入了,不知是我前面密码确实输错了还是什么别的问题,就 6 个数字还会输错的吗😂。
基础命令
show databases; -- 查询所有数据库
create databse 库名; -- 创建数据库
use 库名; -- 切换数据库
drop database 库名 -- 删除数据库
show tables; -- 查看所有表
show tables from 库名; -- 查看其他库的表
create table 表名; -- 建表
desc 表名; -- 查看表结构
insert into 表名 (列名) values (值); -- 添值
select * from 表名; -- 查看表中所有数据
show create table 表名; -- 查询建表时的结构
delete from 表名 where 条件; -- 删除字段中的值
delete from 表名 drop column 字段名; -- 删除表中的字段
drop table 表名; -- 删除表
select version(); -- 查看 mysql 版本
-- 建表字段属性
auto_increment -- 定义列为自增的属性,一般是用于主键自增
primary key -- 主键约束
unique -- 唯一约束
not null -- 非空约束
default -- 默认约束
foreign key(外键)references主表(主键) -- 外键约束
建表语句
create table if not exists student (
id int primary key,
`name` VARCHAR(32),
age int,
sex char(1),
class VARCHAR(32)
) charset utf8;
常用SQL
修改表
-- 添加字段
ALTER TABLE player ADD (age int(11));
-- 修改字段名
ALTER TABLE player RENAME COLUMN age to player_age;
-- 修改字段的数据类型
ALTER TABLE player MODIFY (player_age float(3,1));
-- 删除字段
ALTER TABLE player DROP COLUMN player_age;
INSERT TO
INSERT INTO table_name
VALUES (value1,value2,value3,...);
DELETE
DELETE FROM table_name
WHERE condition;
UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
SELECT
-- 语句书写顺序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
-- 语句执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
-- 示例
SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7
在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入