一、数据库相关概念🍓
数据库: 存储数据的仓库,数据是有组织的进行存储,英文:DataBase,简称 DB
- 存储和管理数据的仓库
- 其本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上
数据库管理系统:管理数据库的大型软件英文:DataBase Management System,简称 DBMS,指一种操作和管理维护数据库的大型软件。
MySQL就是一个 数据库管理系统软件, 安装了Mysql的电脑,我们叫它数据库服务器
数据库管理系统的作用
用于建立、使用和维护数据库,对数据库进行统一的管理
SQL:英文:Structured Query Language,简称 SQL,结构化查询语言
是一种特殊目的的编程语言,是一种数据库 查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
常见的关系型数据库管理系统:
-
Oracle:收费的大型数据库,Oracle 公司的产品 ---->甲骨文 银行Oracle
-
MySQL: 开源免费的中小型数据库。后来 Sun 公司收购了 MySQL,而 Sun 公司又被 Oracle 收购 java
-
SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用
-
PostgreSQL:开源免费中小型的数据库 定位
-
DB2:IBM 公司的大型收费数据库产品
-
SQLite:嵌入式的微型数据库。如:作为 Android 内置数据库
-
MariaDB:开源免费中小型的数据库–mysql 的一个分支
二、 MySQL 数据库🍓
(一)、安装🥝
MySQL 5.7 下载路径
找到安装目录 ,默认在C 盘 配置环境变量
C:\Program Files (x86)\MySQL\MySQL Server 5.7\bin
登录
打开cmd 命令行
win+R 输入cmd回车
在黑框中输入,mysql -uroot -p123456,回车,出现下图且左下角为mysql>,则登录成功。
-u user 的缩写
-p password
mysql -uroot -p123456
远程链接:
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
win + R
cmd
navivate sqlyog idea —>datagrip
退出
- exit
- quit
安装目录
(二)、 MySQL数据模型🥝
关系型数据库:
关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库
如下 学生表和教师表 都是有行有列二维表我们将这样的称为关系型数据库
关系型数据库的优点:
- 都是使用表结构,格式一致,易于维护。
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
- 关系型数据库都可以通过SQL进行操作,所以使用方便。
- 数据存储在磁盘中,安全。
数据模型:
如上图,我们通过客户端可以通过数据库管理系统创建数据库,在数据库中创建表,在表中添加数据。
创建一个数据库,会在本地文件夹生成.frm 表文件 和 .MYD 数据文件,在安装目录下的 data文件下
mysql> create database db1;
- MySQL中可以创建多个数据库,每个数据库对应到磁盘上的一个文件夹
- 在每个数据库中可以创建多个表,每张都对应到磁盘上一个 frm 文件
- 每张表可以存储多条数据,数据会被存储到磁盘中 MYD 文件中
三、SQL概述🍓
(一)、 SQL 简介🥝
- 英文:Structured Query Language,简称 SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”
通用语法
1) SQL语句可以单行 或者 多行书写,以分号 结尾 ;
2) 可以使用空格和缩进来增加语句的可读性。
3) MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
4) 注释方式
# show databases; 单行注释
-- show databases; 单行注释
/* 多行注释
show databases; */
(二)、 SQL分类🥝
1.DDL:操作数据库🍎
/* 方式1 直接指定数据库名进行创建 默认数据库字符集为:latin1 */
CREATE DATABASE db1;
/* 方式2 指定数据库名称,指定数据库的字符集 一般都指定为 utf8,
与Java中的编码保持一致 */
CREATE DATABASE db1_1 CHARACTER SET utf8;
为了避免错误
CREATE DATABASE IF NOT EXISTS 数据库名称;
查看/选择数据库
数据库创建好了,要在数据库中创建表,得先明确在哪儿个数据库中操作,此时就需要使用数据库。
代码示例
-- 切换数据库 从db1 切换到 db1_1
USE db1_1;
-- 查看当前正在使用的数据库
SELECT DATABASE();
-- 查看Mysql中有哪些数据库
SHOW DATABASES;
-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;
修改数据库
修改数据库字符集
-- 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
-- 查看当前数据库的基本信息,发现编码已更改
SHOW CREATE DATABASE db1;
删除数据库
-- 删除某个数据库
DROP DATABASE db1_1;
DROP DATABASE IF EXISTS 数据库名称;
2.DDL:操作表🍎
操作表也就是对表进行增(Create)删(Retrieve)改(Update)查(Delete)。
查询表
查询当前数据库下所有表名称
SHOW TABLES;
查询表结构
DESC 表名称;
创建表
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 注意 最后一列不要加逗号
);
数据类型
常见数据类型
char
详细的数据类型(了解即可)
注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,
区别在于:
char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
varchar类型是可变长度的: 只使用字符串长度所需的空间
比如:保存字符串 “abc”
x char(10) 占用10个字节
y varchar(10) 占用3个字节
适用场景: char类型适合存储 固定长度的字符串,比如 密码 ,性别一类 varchar类型适合存储 在一定范围内,有长度变化的字符串
需求1: 创建商品分类表
表名:
category 分类
表中字段:
分类ID :cid ,为整型
分类名称:cname,为字符串类型,指定长度20
-- 切换到数据库 db1
USE db1;
-- 创建表
CREATE TABLE category(
cid INT,
cname VARCHAR(20)
);
练习:
创建测试表
表名:
test1
表中字段:
测试ID : tid ,为整型
测试时间: tdate , 为年月日的日期类型
-- 创建测试表
CREATE TABLE test1(
tid INT,
tdate DATE
);
快速创建一个表结构相同的表(复制表结构)
语法格式
create table 新表名 like 旧表名
-- 创建一个表结构与 test1 相同的 test2表
CREATE TABLE test2 LIKE test1;
-- 查看表结构
DESC test2;
-- 查看创建表的SQL语句
SHOW CREATE TABLE category;
删除表
-- 直接删除 test1 表
DROP TABLE test1;
-- 先判断 再删除test2表
DROP TABLE IF EXISTS test2;
修改表
1)修改表名
语法格式
rename table 旧表名 to 新表名
将category表 改为 category1
RENAME TABLE category TO category1;
- 修改表的字符集
alter table 表名 character set 字符集
create table
drop table
rename table
alter table
将category表的字符集 修改为gbk
alter table category character set gbk;
3)向表中添加列, 关键字 ADD
alter table 表名 add 字段名称 字段类型
为分类表添加一个新的字段为 分类描述 cdesc varchar(20
# 为分类表添加一个新的字段为 分类描述 cdesc varchar(20)
ALTER TABLE category ADD cdesc VARCHAR(20);
- 修改表中列的 数据类型或长度 , 关键字 MODIFY
alter table 表名 modify 字段名称 字段类型
对分类表的描述字段进行修改,类型varchar(50)
ALTER TABLE category MODIFY cdesc VARCHAR(50);
5)修改列名称 , 关键字 CHANGE
alter table 表名 change 旧列名 新列名 类型(长度);
对分类表中的 desc字段进行更换, 更换为 description varchar(30)
ALTER TABLE category CHANGE cdesc description VARCHAR(30);
6)删除列 ,关键字 DROP
alter table 表名 drop 列名;
删除分类表中description这列
ALTER TABLE category DROP description;
案例
需求:设计一张学生表,请注重数据类型、长度的合理性
1. 编号
2. 姓名,姓名最长不超过10个汉字
3. 性别,因为取值只有两种可能,因此最多一个汉字
4. 生日,取值为年月日
5. 入学成绩,小数点后保留两位
6. 邮件地址,最大长度不超过 64
7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
8. 学生状态(用数字表示,正常、休学、毕业…)
create table student (
id int,
name varchar(10),
gender char(1), -- boolean
birthday date,
score double(5,2),
email varchar(15),
tel varchar(15),
status tinyint
);
练习使用 navicate/idea 操作数据库
可能遇到的问题:
报错:Server returns invalid timezone. Go to ‘Advanced‘ tab and set serverTimezone‘ property manually.
百度一下设置时区,如
https://blog.csdn.net/Andy86666/article/details/115090903
https://blog.csdn.net/qq_22136439/article/details/106429131
《SQL必知必会》
《从零蛋开始学Mysql》—>小孩子
《从根上理解mysql》
《高性能MYSQL》