MySQL数据库(一)

文章目录

1.MySQL8.0安装配置

1.安装教程

MySQL8安装教程

2.启动方法
  1. 管理员身份打开命令行
  2. net start mysql
  3. mysql -u root -p(用户名root)
  4. 输入密码 root
3.启动注意事项
4.Navicat使用
  1. 点击连接选择MySQL
  2. 输入相关信息,跟命令行时候的参数是一样的
  3. 点击测试连接
  4. 点击确定即可
5.Navicat演示
  1. 打开连接
  2. 新建数据库
  3. 打开数据库
  4. 新建表
  5. 设置表
  6. 保存
  7. 插入

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.列类型之字符串

细节说明
  1. char(4) 表示字符数,最大255,不是字节数,不管是中文还是英文都是放四个,按字符计算
  2. varchar(4)表示字符数,最大255,不是字节数,不管是中文还是英文都是放四个,按字符计算
  3. char(4)是定长(固定的大小),就是说,即使你插入'aa',也会占用分配的四个字符的空间
  4. varchar(4)是变长(变化的大小),就是说 如果你插入了'aa',则就按照实际占用空间来分配
  5. varchar本身还需要占用1到3个字节来记录存放内容长度,L(实际数据大小) + (1-3)个字节
  6. 什么时候使用char或varchar
    1. 如果数据定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等
    2. 如果字段的长度不确定,使用varchar
    3. 查询速度 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.细节说明
  1. 插入的数据应与字段的数据类型相同,比如,把'abc'插入到int类型会报错

  2. 数据的长度应在列的规定范围内,例如,不能将一个长度为80的字符串加入到长度为40的列中

  3. 在values中列出的数据位置必须与被加入的列的排列位置 相对应

  4. 字符和日期型数据应包含在单引号中

  5. 列可以插入空值,前提是该字段允许为空

  6. insert into table_name(列名...) values(),(),() 形式添加多条记录

  7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称

  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错

    mysql 复制代码
    CREATE 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.使用细节
  1. set指定修改哪些列和要给予哪些值

  2. where子句指定应更新哪些行,如果没有where语句,则更新所有的行

  3. 如果需要修改多个字段,可以通过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.细节
  1. 如果不使用where子句,将删除表中所有数据

  2. delete语句不能删除某一列的值,可以使用update设置为null或''

    mysql 复制代码
    -- UPDATE将一列清空
    UPDATE createtable SET name = NULL
  3. 使用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
相关推荐
师太,答应老衲吧2 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis3 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林3 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享4 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil274 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk5 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境5 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n5 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼6 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库