Docker安装Mysql以及Mysql的基本操作——入门必看

Docker安装Mysql以及Mysql的基本操作——入门必看

1.首先

​ 文章介绍了mysql使用docker安装的基本操作过程,以及mysql的基本用法,提供一张学生表,一张老师表,一张成绩表来作为例子,每一行命令都是经过了实际实验,确认无误,提供给初学者学习。本文mysql使用的是5.7版本。

2.Docker安装Mysql

寻找mysql镜像

docker search mysql

拉取镜像,这里使用mysql5.7

docker pull mysql:5.7

配置端口映射,镜像名称,数据库密码123456

docker run -d -p 3306:3306 --name he-mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

查看ip,Navicat连接测试

ifconfig

3.创建用户

这行代码一般会报错,不推荐使用insert直接插入新用户(mysql5.7后password字段使用authentication_string代替)

INSERT INTO user (host,user,authentication_string,Select_priv,Insert_priv,Update_priv,Delete_priv)
					VALUES('localhost','manager',PASSWORD('ma123456'),'Y','Y','Y','Y');

使用以下方式添加新用户

-- 添加用户manager设置密码ma123456,并给予数据库testdb下所有表增删改查创建权限,任意ip访问
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ON testdb.*
    TO 'manager'@'%'
		IDENTIFIED BY 'ma123456';
		
-- 刷新授权
FLUSH PRIVILEGES;

-- 查询添加是否成功
SELECT * FROM user

4.数据库相关操作

创建数据库

CREATE DATABASE testdb

显示所有数据库

SHOW DATABASES

使用数据库

USE testdb

显示数据库表所有表的信息

SHOW TABLE STATUS  FROM testdb;

5.表的相关操作

创建张表

学生表

CREATE TABLE `student`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  `hobby` varchar(255),
  `birth` date ,
  PRIMARY KEY (`id`) 
) ENGINE = InnoDB DEFAULT CHARSET=utf8; 

老师表

CREATE TABLE `teacher`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  `hobby` varchar(255),
  PRIMARY KEY (`id`) 
) ENGINE = InnoDB DEFAULT CHARSET=utf8;

增加一条信息

INSERT INTO `testdb`.`student`(`name`, `age`, `hobby`, `birth`) VALUES ('he', 18, '篮球', '2021-1-30')

同时插入多条信息

INSERT INTO `testdb`.`student`(`name`, `age`, `hobby`, `birth`) VALUES ('he2', 19, '篮球', '2022-1-30'), ('he2', 20, '篮球', '2023-1-30')

查询表

基本查询
-- 查询全部字段
SELECT * FROM testdb.student;

-- 查询部分字段
SELECT id,name FROM testdb.student;
条件查询
where
-- 根据条件查询字段->WHERE
SELECT * FROM testdb.student WHERE id=2;

-- 只取两个查询结果
SELECT * from student LIMIT 2
like
-- 根据条件查询字段百分号表示模糊匹配,类似'he1',"he2"都会被查出来->like
SELECT * FROM testdb.student WHERE name like 'he%';
UNION
-- 联合查询,会将相同的覆盖,只保留查询的种类,强调种类
SELECT hobby FROM student
UNION
SELECT hobby FROM teacher;

-- 联合查询,会查出所有的项目,包括重复的
SELECT hobby FROM student
UNION ALL
SELECT hobby FROM teacher;
升降序
-- 查询结果根据字段升序排序
SELECT * from student ORDER BY id ASC;

-- 查询结果根据字段降序排序
SELECT * from student ORDER BY id DESC;
GROUP
-- 查询数据库表统计相同名字的人都各自有多少人(相同名字的人组成一个 GROUP)
SELECT name,COUNT(*) FROM testdb.student GROUP BY name

-- 查询学生表中名字相同的人的年龄总和,最后一行NULL代表的是所有的人的年龄总和
SELECT name, SUM(age) as age_count FROM  student GROUP BY name WITH ROLLUP;

-- 查询学生表中名字相同的人的年龄总和,最后一行的名字替换为‘年龄总和’
SELECT coalesce(name, '年龄总和'), SUM(age) as age_count FROM  student GROUP BY name WITH ROLLUP;

-- 查询学生表中名字相同的人的年龄平均,最后一行NULL代表的是所有的人的年龄平均
SELECT coalesce(name, '年龄总和'), AVG(age) as age_count FROM  student GROUP BY name WITH ROLLUP;
JOIN

创建report_card表,

CREATE TABLE `report_card`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `math` int(11) NULL DEFAULT NULL,
  `english` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) 
) ENGINE = InnoDB;
-- INNER JOIN->查询学生表的id,name,和report_card的math,english,匹配条件是student的id和report_card的student_id相同
SELECT a.id,a.name,b.math,b.english FROM student a INNER JOIN report_card b ON a.id=b.student_id

-- LEFT JOIN->查询出左表的全部数据,右表与坐表不存在的字段用Null表示
SELECT a.id,a.name,b.math,b.english FROM student a LEFT JOIN report_card b ON a.id=b.student_id

-- RIGHT JOIN-》查询出右表的全部数据,左表与右表不存在的字段用Null表示
SELECT a.id,a.name,b.math,b.english FROM student a RIGHT JOIN report_card b ON a.id=b.student_id

IS NULL
-- 查询学生表中爱好为空的项(使用=null和!=null是不起作用的)
SELECT * FROM student WHERE hobby is NULL
-- 查询学生表中爱好不为空的项
SELECT * FROM student WHERE hobby is  NOT NULL
正则查询
-- 查找name字段中以'h'为开头的所有数据:
SELECT name FROM student WHERE name REGEXP '^h';

-- 查找name字段中以'e'为结尾的所有数据:
SELECT name FROM student WHERE name REGEXP 'e$';

-- 查找name字段中包含'e'字符串的所有数据:
SELECT name FROM student WHERE name REGEXP 'e';

修改表

-- 删除学生表age字段(不是清空)
ALTER TABLE student_copy1 DROP age;

-- 在学生表的name字段后面添加age字段
ALTER TABLE student_copy1 ADD age INT AFTER name;

-- 修改字段name的属性为默认的 VARCHAR(255)为 VARCHAR(100);
ALTER TABLE student_copy1 MODIFY name VARCHAR(100);

-- 修改字段名称name为newname 并指定新的类型
ALTER TABLE student_copy1 CHANGE name newname VARCHAR(100);

更新表

-- 更新字段,将名字为he2的修改为he3
UPDATE testdb.student SET name='he3' WHERE name='he2'

-- 模糊匹配更新字段
UPDATE testdb.student SET name='he2' WHERE name LIKE 'he%'

建立索引

-- 建立普通索引,没有限制
CREATE INDEX index_name ON student (name)

-- 通过这条查看索引
SHOW INDEX FROM student; 

-- 删除索引 
DROP INDEX index_name ON student; 

-- 创建唯一索引(假设name不重复)
CREATE UNIQUE INDEX index_name ON student_copy1(name(99)) 

删除表

DROP TABLE student;

6.最后

mysql入门比较简单,难的是在实际开发中的灵活运用,加油。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值