文章目录
1.MySQL8.0安装配置
1.安装教程
2.启动方法
- 管理员身份打开命令行
net start mysql
mysql -u root -p
(用户名root)- 输入密码 root
3.启动注意事项
4.Navicat使用
- 点击连接选择MySQL
- 输入相关信息,跟命令行时候的参数是一样的
- 点击测试连接
- 点击确定即可
5.Navicat演示
- 打开连接
- 新建数据库
- 打开数据库
- 新建表
- 设置表
- 保存
- 插入
2.MySQL数据库基本介绍
1.三层结构
2.SQL语句分类
3.MySQL数据库基本操作
1.创建数据库
mysql
-- 使用指令创建数据库
CREATE DATABASE hsp_db01
-- 删除数据库指令
DROP DATABASE hsp_db01
-- 创建utf8bm4字符集并带校对规则(区分大小写)的数据库
CREATE DATABASE db02
CHARACTER SET utf8mb4
COLLATE utf8mb4_bin;
-- 创建utf8bm4字符集并带有校对规则(不区分大小写)的数据库
CREATE DATABASE db03
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
2.不区分大小写的校对规则
3.查看、删除数据库
mysql
-- 查看所有数据库
-- SHOW DATABASES;
-- 查看前面创建的数据库的定义信息
SHOW CREATE DATABASE hsp_db01;
-- 在创建数据库表的时候,为了规避关键字,可以使用反引号解决
CREATE DATABASE `db04`;
-- 删除数据库,可以不加反引号
DROP DATABASE db04;
4.备份和恢复数据库
在命令行的原因是这个mysqldump.exe实际上在bin目录下
1.备份数据库db01和db02(dos)
dos
C:\Windows\system32>mysqldump -u root -p -B db01 db02 > e:\\back.sql
2.恢复数据库db01和db02(mysql命令行界面)
mysql
mysql> Source e:\\back.sql
5.备份和恢复数据表
1.备份数据库db01中的表users(dos)
mysql
C:\Windows\system32>mysqldump -u root -p db01 users > e:\\users.sql
2.恢复数据库db01中的表users(mysql命令行界面)
1.选择数据库
mysql
mysql> use db01
2.执行恢复语句
mysql
mysql> Source e:\\users.sql
3.课堂练习
题目
答案
mysql
mysql> Source e:\\ecshop.sql
C:\Windows\system32>mysqldump -u root -p -B ecshop > e:\\ecshop.sql
mysql> drop database ecshop;
mysql> Source e:\\ecshop.sql
细节说明
在进行数据备份到指定文件夹的时候,要退出那个文件夹,否则系统认为你在操作文件夹,则不会进行导入
4.MySQL数据表操作
1.创建表
基本介绍
代码实例
mysql
CREATE TABLE `user` (
`id` INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE
)
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE INNODB;
-- 设置字符集,校对方式,引擎
2.列类型基本介绍
1.数值类型
2.文本类型
3.二进制数据类型
4.日期类型
3.列类型之整型
以tinyint为例
1.创建一个有符号的tinyint字段
mysql
CREATE TABLE `t1` (
id TINYINT
);
INSERT INTO `t1` VALUES(-200);
-- 有符号的范围是-128到127,无符号的是0到255,所以这个插入不进去
SELECT * FROM `t1`;
2.创建一个无符号的tinyint字段
mysql
CREATE TABLE `t1` (
id TINYINT UNSIGNED
);
INSERT INTO `t1` VALUES(250);
-- 有符号的范围是-128到127,无符号的是0到255,所以这个可以插入
SELECT * FROM `t1`;
4.列类型之bit
mysql
CREATE TABLE `t2` (
id BIT(8)
);
INSERT INTO `t2` VALUES(255);
-- 八个bit的范围是0到255
-- 是以位的形式显示的数据
-- 查询还是可以按照输入的数据来查询数据
-- 如果只有0和1则可以使用bit类型来节省空间
SELECT * FROM `t2` WHERE id = 255;
5.列类型之小数类型
mysql
CREATE TABLE t06 (
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20)
);
INSERT INTO t06 VALUES(88.123434444,88.123434444,88.123434444);
SELECT * FROM t06;
6.列类型之字符串
细节说明
- char(4) 表示字符数,最大255,不是字节数,不管是中文还是英文都是放四个,按字符计算
- varchar(4)表示字符数,最大255,不是字节数,不管是中文还是英文都是放四个,按字符计算
- char(4)是定长(固定的大小),就是说,即使你插入'aa',也会占用分配的四个字符的空间
- varchar(4)是变长(变化的大小),就是说 如果你插入了'aa',则就按照实际占用空间来分配
- varchar本身还需要占用1到3个字节来记录存放内容长度,L(实际数据大小) + (1-3)个字节
- 什么时候使用char或varchar
- 如果数据定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等
- 如果字段的长度不确定,使用varchar
- 查询速度 char > varchar
6.列类型之日期类型
mysql
CREATE TABLE t07 (
birthday DATE,
job_time DATETIME,
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP -- 如果这样设置的时间戳会在每次修改这条语句的时候更新时间
);
INSERT INTO t07(birthday, job_time) VALUES('2022-11-11','2022-11-11 10:10:10');
-- 字符串使用单引号
SELECT * FROM t07;
7.创建表的练习
题目
答案
mysql
CREATE TABLE createtable (
Id int,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entry_date DATETIME,
job VARCHAR(32),
Salary DOUBLE,
resume TEXT
);
INSERT INTO createtable VALUES(100,'小妖怪','男','2000-11-11','2010-11-10 11:11:11',
'巡山的',3000,'大王叫我来巡山');
SELECT * FROM createtable;
8.修改表
修改表实例
答案
mysql
-- 查看表结构
DESC employee;
-- 增加一个image列,VARCHAR类型,在RESUME后面
ALTER TABLE emp
ADD image VARCHAR(255) NOT NULL DEFAULT '' AFTER RESUME
-- 修改job列使其长度为60
ALTER TABLE emp
MODIFY job VARCHAR(60)
-- 删除sex列
ALTER TABLE emp
DROP sex;
-- 表名改为employee
RENAME TABLE emp to employee
-- 修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8mb4
-- 列名name修改为user_name
ALTER TABLE employee CHANGE COLUMN NAME username VARCHAR(20)
注意
表的名字和列的名字是不区分大小写的
5.MySQL数据库CRUD
1.Insert
1.快速入门案例
mysql
CREATE TABLE sp (
id int,
goods_name VARCHAR(10),
price DOUBLE
);
INSERT INTO SP VALUES(1, '手机', 9000);
INSERT INTO SP VALUES(2, '电脑', 8000);
2.细节说明
-
插入的数据应与字段的数据类型相同,比如,把'abc'插入到int类型会报错
-
数据的长度应在列的规定范围内,例如,不能将一个长度为80的字符串加入到长度为40的列中
-
在values中列出的数据位置必须与被加入的列的排列位置 相对应
-
字符和日期型数据应包含在单引号中
-
列可以插入空值,前提是该字段允许为空
-
insert into table_name(列名...) values(),(),() 形式添加多条记录
-
如果是给表中的所有字段添加数据,可以不写前面的字段名称
-
默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错
mysqlCREATE TABLE goods ( id int, goods_name VARCHAR(10) NOT NULL DEFAULT '苹果', --不添加则是默认值 price DOUBLE );
2.Update
1.案例
mysql
-- 将所有员工的工资设置为5000
UPDATE createtable SET salary = 5000
-- 将姓名为小妖怪的员工薪水改为3000元
UPDATE createtable SET salary = 3000 WHERE name = '小妖怪'
-- 将老妖怪的薪水增加10000元
UPDATE createtable SET salary = salary + 1000 WHERE name = '老妖怪'
2.使用细节
-
set指定修改哪些列和要给予哪些值
-
where子句指定应更新哪些行,如果没有where语句,则更新所有的行
-
如果需要修改多个字段,可以通过set字段1 = 值1, set字段2 = 值2
mysql-- 修改多个字段 UPDATE createtable SET salary = salary + 2000, job = '培训机构' WHERE name = '小妖怪'
3.Delete
1.案例
mysql
-- 删除表中名称为'老妖怪'的记录
DELETE FROM createtable WHERE name = '老妖怪'
-- 删除表中所有记录
DELETE FROM createtable
2.细节
-
如果不使用where子句,将删除表中所有数据
-
delete语句不能删除某一列的值,可以使用update设置为null或''
mysql-- UPDATE将一列清空 UPDATE createtable SET name = NULL
-
使用delete语句只能删除记录,不能删除表本身,如果要删除表,需要使用
drop table 表名
4.Select
案例1
mysql
-- 查询所有学生成绩
SELECT * FROM student
-- 查询表中所有学生的姓名和对应的英语成绩
SELECT name, english FROM student
-- 过滤表中的重复数据
SELECT DISTINCT * FROM student
案例2
mysql
-- 统计每个学生的总分
SELECT name , (chinese + english + math) from student
-- 在所有学生总分加10分的情况
SELECT name , (chinese + english + math + 10) from student
-- 加别名
SELECT name AS '姓名' , (chinese + english + math) AS '成绩' from student
案例3
mysql
-- 查询姓名为赵云的学生成绩
SELECT * FROM student where name = '赵云'
-- 查询英语成绩大于90分的同学
SELECT * FROM student WHERE english > 90
-- 查询总分大于200分的所有同学
SELECT * FROM student WHERE (chinese + english + math) > 200
-- 查询math大于60并且id大于4的学生成绩
SELECT * FROM student WHERE math > 60 and id > 4
-- 查询英语成绩大于语文成绩的学生
SELECT * FROM student WHERE english > chinese
-- 查询总分大于200分并且数学成绩小于语文成绩的,姓韩的学生
SELECT * FROM student WHERE (chinese + english + math) > 200 and math < chinese and name LIKE '韩%'
-- 查询英语分数在80到90之间的同学
SELECT * FROM student WHERE english BETWEEN 80 AND 90
-- 查询数学分数为89,90,91的学生
SELECT * FROM student WHERE math = 89 or math = 90 or math = 91
SELECT * FROM student WHERE math IN (89, 90, 91)
-- 查询所有姓李的学生成绩
SELECT * FROM student WHERE name LIKE '李%'
-- 查询数学分>80,语文分>80的同学
SELECT * FROM student WHERE math > 80 AND chinese > 80
ORDER BY排序
mysql
-- 对数学成绩排序后升序
SELECT math from student ORDER BY math
-- 对总分从高到低的顺序输出
SELECT (chinese + math + english) as '总分' FROM student ORDER BY '总分' DESC
-- 对姓韩的学生成绩排序输出(降序)
SELECT (chinese + math + english) AS total FROM student WHERE name LIKE '韩%' ORDER BY total DESC