MYSQL
1.为什么需要数据库
◼ 任何的软件系统都需要存放大量的数据,这些数据通常是非常复杂和庞大的:
比如用户信息包括姓名、年龄、性别、地址、身份证号、出生日期等等;
比如商品信息包括商品的名称、描述、价格(原价)、分类标签、商品图片等等;
比如歌曲信息包括歌曲的名称、歌手、专辑、歌曲时长、歌词信息、封面图片等等;
◼ 那么这些信息不能直接存储到文件中吗?可以,但是文件系统有很多的缺点:
很难以合适的方式组织数据(多张表之前的关系合理组织);
并且对数据进行增删改查中的复杂操作(虽然一些简单确实可以),并且保证单操作的原子性;
很难进行数据共享,比如一个数据库需要为多个程序服务,如何进行很好的数据共享;
需要考虑如何进行数据的高效备份、迁移、恢复; 等等…
◼ 数据库通俗来讲就是一个存储数据的仓库,数据库本质上就是一个软件、一个程序。
2.常见的数据库有哪些?
◼ 通常我们将数据划分成两类:关系型数据库和非关系型数据库;
◼ 关系型数据库:MySQL、Oracle、DB2、SQL Server、Postgre SQL等;
关系型数据库通常我们会创建很多个二维数据表; 数据表之间相互关联起来,形成一对一、一对多、多对对等关系;
之后可以利用SQL语句在多张表中查询我们所需的数据;
支持事务,对数据的访问更加的安全;
◼ 非关系型数据库:MongoDB、Redis、Memcached、HBse等;
非关系型数据库的英文其实是Not only SQL,也简称为NoSQL;
相当而已非关系型数据库比较简单一些,存储数据也会更加自由(甚至我们可以直接将一个复杂的json对象直接塞入到数据库中);
NoSQL是基于Key-Value的对应关系,并且查询的过程中不需要经过SQL解析,所以性能更高;
NoSQL通常不支持事物,需要在自己的程序中来保证一些原子性的操作;
◼ 如何在开发中选择他们呢?具体的选择会根据不同的项目进行综合的分析,我这里给一点点建议:
目前在公司进行后端开发(Node、Java、Go等),还是以关系型数据库为主;
比较常用的用到非关系型数据库的,在爬取大量的数据进行存储时,会比较常见;
3.下载mysql软件
◼ 下载地址:https://dev.mysql.com/downloads/mysql/
◼ 根据自己的操作系统下载即可
◼ 这里我安装的是MySQL的版本:5.5
4.启动mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zQFEbjWw-1655883541508)(D:\面试题\my.png)]
5.mysql的链接操作
◼ 打开终端,查看 M y S Q L的安装:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obmhVwv9-1655883541510)(D:\面试题\33.png)]
6.终端链接数据库
◼ 我们如果想要操作数据,需要先和数据建立一个连接,最直接的方式就是通过终端来连接;
◼ 有两种方式来连接:
两种方式的区别在于输入密码是直接输入,还是另起一行以密文的形式输入;
7.Navicat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWP8tfl7-1655883541510)(D:\面试题\55.png)]
8.创建数据库-表
◼ MySQL默认的数据库:
infomation_schema:信息数据库,其中包括MySQL在维护的其他数据库、表、 字段、访问权限等信息;
performance_schema:性能数据库,记录着MySQL Server数据库引擎在运行 过程中的一些资源消耗相关的信息;
mysql:用于存储数据库管理者的用户信息、权限信息以及一些日志信息等;
sys:相当于是一个简易版的performance_schema,将性能数据库中的数据汇 总成更容易理解的形式;
9.认识sql语句
◼ 我们希望操作数据库(特别是在程序中),就需要有和数据库沟通的语言,这个语言就是SQL:
SQL是Structured Query Language,称之为结构化查询语言,简称SQL;
使用SQL编写出来的语句,就称之为SQL语句;
SQL语句可以用于对数据库进行操作;
◼ SQL语句的常用规范:
通常关键字是大写的,比如CREATE、TABLE、SHOW等等;
一条语句结束后,需要以 ; 结尾;
如果遇到关键字作为表明或者字段名称,可以使用引号包裹;
10.数据库的操作
–查询数据库列表
SHOW DATABASES;
– 创建数据库
CREATE DATABASE corderhub;
– 选中数据库
USE corderhub;
CREATE TABLE users(
name
VARCHAR(20),
age INT,
height DOUBLE
);
– 插入数据
INSERT INTO users VALUES(‘admin’,18,1.88);
INSERT INTO users VALUES(‘admin123’,20,1.78);
– 查询记录
SELECT * FROM users;
– 查询所有的数据库
SHOW DATABASES;
– 使用数据库
USE corderhub;
– 查看当前正在使用的数据库
SELECT DATABASE();
– 创建数据库
CREATE DATABASE bilibili;
– 如果不存在就创建
CREATE DATABASE IF NOT EXISTS bilibili;
– 删除数据库
DROP DATABASE corderhub;
– 如果存在就删除
DROP DATABASE IF EXISTS corderhub;
– 选中bilibili
USE bilibili;
– 查询选中数据库下的所有表
SHOW TABLES;
– 创建数据库表
CREATE TABLE IF NOT EXISTS user
(
name
VARCHAR(10),
age INT,
height double
);
– 查询表的结构
DESC user
;
– 创建一个完整的表
CREATE TABLE IF NOT EXISTSgoods
(
id INT PRIMARY KEY AUTO_INCREMENT,
name
VARCHAR(10) UNIQUE,
price DOUBLE NOT NULL,
– 创建时间 默认值 是当前的时间
createAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
– 插入记录
INSERT INTO goods
VALUES(null,‘华为’,4999.5,null);
INSERT INTO goods
(name
,price) VALUES(‘小米’,4999.5);
– 删除数据库表
DROP TABLE user
;
DROP TABLE IF EXISTS user
;
– 修改表
– 修改表名称
ALTER TABLE goods
RENAME TO products
;
– 添加一个新的字段
ALTER TABLE products
ADD updateAt TIMESTAMP;
ALTER TABLE products
ADD publishTime
DATETIME;
– 删除字段
ALTER TABLE products
DROP publishTime
;
– 修改字段的名称(类型也可以修改)
ALTER TABLE products
CHANGE updateAt updateTime DATETIME;
– 修改字段的数据类型
ALTER TABLE products
MODIFY updateTime TIMESTAMP;
DESC products
;
13.SQL的数据类型 – 日期类型
◼ MySQL的日期类型也很多:
◼ YEAR以YYYY格式显示值 范围 1901到2155,和 0000。
◼ DATE类型用于具有日期部分但没有时间部分的值:
DATE以格式YYYY-MM-DD显示值 ;
支持的范围是 ‘1000-01-01’ 到 ‘9999-12-31’;
◼ DATETIME类型用于包含日期和时间部分的值:
DATETIME以格式’YYYY-MM-DD hh:mm:ss’显示值;
支持的范围是1000-01-01 00:00:00到9999-12-31 23:59:59;
◼ TIMESTAMP数据类型被用于同时包含日期和时间部分的值:
TIMESTAMP以格式’YYYY-MM-DD hh:mm:ss’显示值;
但是它的范围是UTC的时间范围:‘1970-01-01 00:00:01’到’2038-01-19 03:14:07’;
◼ 另外:DATETIME或TIMESTAMP 值可以包括在高达微秒(6位)精度的后小数秒一部分
比如DATETIME表示的范围可以是’1000-01-01 00:00:00.000000’到’9999-12-31 23:59:59.999999’;