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入门比较简单,难的是在实际开发中的灵活运用,加油。
![](https://gitee.com/isKyrie/mps/raw/master//img/20210129155311.jpeg)