使用 docker 部署 mysql

进击的学霸Docker大约 2 分钟

通过 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 语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入

Loading...