MySQL笔记(coderwhy⽼师Nodejs课程)
MySQL 笔记
数据库概述
数据库通俗来讲就是⼀个存储数据的仓库,数据库本质上就是⼀个软件。⼀个程序
常见的数据库有哪些?
关系型数据库
MySQL、Oracle、DB2、SQL Server、Postgre SQL等
关系型数据库通常我们会创建很多个⼆维数据表
数据表之间相互关联起来,形成 ⼀对⼀、⼀对多、多对多 等关系
之后可以利⽤SQL语句在多张表中查询我们所需的数据
⽀持事务,对数据的访问更加安全
⾮关系型数据库
MongoDB、Redis、Memcached、HBse 等
⾮关系型数据库的英⽂其实是 Mot only SQL,也简称为 NoSQL
相当于已⾮关系型数据库⽐较简单⼀些,存储数据也会更加⾃由(甚⾄我们可以直接将⼀个复杂的json对象直接塞⼊到数据库中)
NoSQL 是基于 Key-Value 的对⽤关系,并且查询的过程中不需要经过 SQL 解析,所以性能更⾼
NoSQL 通常不⽀持事务,需要在⾃⼰的程序中来保证⼀些原⼦性的操作
开发中如何选择?
⽬前在公司进⾏后端开发(Node、Java、Go等),还是以关系型数据库为主
⽐较常⽤的⽤到菲关系型数据库的,在爬取⼤量数据进⾏存储时,会⽐较常见
认识 MySQL
MySQL 是⼀个关系型数据库,其实本质上就是⼀个软件、⼀个程序
这个程序中管理着多个数据库
每个数据库中可以有多张表
每个表可以有多条数据
查看数据库
show databases;
MySQL 默认的数据库:
infomation_schema:信息数据库,其中包括 MySQL 在维护的其他数据库、表、列、访问权限等信息
performance_schema:性能数据库,记录着 MySQL Server 数据库引擎在运⾏过程中的⼀些资源消耗相关的信息
mysql:⽤于存储数据库管理者的⽤户信息、权限信息以及⼀些⽇志信息等
sys:相当于是⼀个简易版的performance_schema,将性能数据库中的数据汇总成更容易理解的形式创建数据库-表
# 创建数据库
create database coderhub;
# 查看数据库
show databases;
# 指定要使⽤的数据库
use coderhub;
# 查看当前正在使⽤的数据库
select database();
# 查看数据库中的表
show tables;
# 创建表
create table users(name varchar(10), age int, height double);
# 查看表中数据
select*from users;
# 向表中插⼊数据
insert into users (name, age, height)values('kobe',40,1.98);
认识 SQL 语句
我们希望数据库(特别是在程序中),就需要有和数据库沟通的语⾔,这个⾔就是 SQL:
SQL 是 Structured Query Language,称之为结构化查询语⾔,简称 SQL
使⽤ SQL 遍写出来的语句,就称之为 SQL 语句
SQL 语句可以⽤于对数据库进⾏操作
事实上,常见的关系型数据库SQL语句都是⽐较相似的,所以你学会了MySQL 中的 SQL 语句,之后去操作⽐如 Oracle 或者其他的关系型数据库,也是⾮常⽅便的
SQL 语句的常⽤规范:
通常关键字是⼤写的,⽐如 CREATE、TABLE、SHOW 等
⼀条语句结束后,需要以 ; 结尾
如果遇到关键性作为表名或者字段名称,可以⽤ `` 包裹
SQL 语句的分类:
常见的 SQL 语句分为4类
DDL (Data Definition Language):数据定义语⾔
可以通过 DDL 语句对数据库或者表进⾏:创建、删除、修改等操作
DML (Data Manipulation Language):数据操作语⾔
可以通过 DML 语句对表进⾏:添加、删除、修改等操作
DQL (Data Query Language):数据查询语⾔
可以通过 DQL 从数据库中查询记录(重点)
DCL (Data Control Language):数据控制语⾔
对数据库、表格的权限进⾏相关访问控制操作
数据库的操作
# 查看所有数据库
show databases;
# 选择某⼀个数据库
use coderhub;
# 查看当前正在使⽤的数据库
select database();
# 创建⼀个新的数据库
-
- create database douyu;
# ⾸先判断数据库是否已存在,避免重复创建报错
create database if not exists douyu;
# 指定字符集utf8mb4、排序规则utf8mb4_0900_ai_ci
create database if not exists huya default character set utf8mb4 collate utf8mb4_0900_ai_ci;
# 删除数据库
drop database if exists douyu;
# 修改数据库的编码
alter database huya character set= utf8 collate= utf8_unicode_ci;
数据表的操作
# 查看所有的表
show tables;
# 新建表
create table if not exists`students`(
`name`varchar(10),
`age`int,
`score`int
);
# 删除表
drop table if exists`moment`;
# 查看表的结构
desc`students`;
# 查看创建表的SQL语句
show create table`students`;
-- CREATE TABLE `students` (
--    `name` varchar(10) DEFAULT NULL,
--    `age` int DEFAULT NULL,
--    `score` int DEFAULT NULL
--  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
SQL 的数据类型
1. 数字类型
1. 整数数字类型:INTEGER, INT, SMALLINT, TINYNT, MEDIUMINT, BIGINT
2. 浮点数字类型:FLOAT, DOUBLE (FLOAT 是 4 个字节,DOUBLE 是8个字节)
3. 精确数字类型:DECIMAL, NUMERIC (DECIMAL是NUMERIC的实现形式)
2. ⽇期和时间类型
1. YEAR 以 YYYY 格式显⽰值,范围 1901到2155,和 0000
2. DATE 类型⽤于具有⽇期部分但没有时间部分的值
1. DATE 以格式 YYYY-MM-DD 显⽰值
2. ⽀持的范围是 1000-01-01 到 9999-12-31
3. DATETIME 类型⽤于包含⽇期部分和时间部分的值
1. DATETIME 以格式 YYYY-MM-DD hh:mm:ss 显⽰值
mysql文档手机版2. ⽀持的范围是 1000-01-01 00:00:00 到 9999-12-31 23:59:59
4. TIMESTEMP 数据类型被⽤于包含时间和⽇期部分的值
1. TIMESTAMP 以格式 YYYY-MM-DD hh:mm:ss 显⽰值
2. 但是它的范围是 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
3. 字符串(字符和字节)类型
1. CHAR 类型在创建表时为固定长度,长度可以是0 到 255 之间的任何值
1. 在被查询时,会删除后⾯的空格
2. VARCHAR 类型的值是可变长度的字符串,长度可以指定为 0 到 65535 之间的值
1. 在被查询时,不会删除后⾯的空格
3. BINARY 和 VARBINARY 类型⽤于存储⼆进制字符串,存储的是字节字符串
4. BLOB ⽤于存储⼤的⼆进制类型
5. TEXT ⽤于存储⼤的字符类型
4. 空间类型
5. JSON 数据类型
表约束
主键 PRIMARY KEY
⼀张表中,我们为了区分每⼀条记录的唯⼀性,必须有⼀个字段永远不会重复,并且不会为空的,这个字段我们通常将它设置为主键:
主键是表中唯⼀的索引
并且必须是 NOT NULL 的,如果没有设置 NOT NULL,那么 MySQL 也会隐式的设置为 NOT NULL
主键也可以是多列索引,PRIMARY KEY(key_part, ...),我们⼀般称之为联合主键
建议:开发中主键字段应该是和业务⽆关的,尽量不要使⽤业务字段来作为主键
唯⼀:UNIQUE
create table if not exists`students`(
`name`varchar(10),
`age`int,
`score`int,
`height`decimal(10,2),
`birthday`timestamp,
`phonenumber`varchar(20)unique
);
某些字段在开发中我们希望是唯⼀的,不会重复的,⽐如⼿机号码、⾝份证号码等,这个字段我们可以使⽤ UNIQUE 来约束
使⽤ UNIQUE 约束的字段在表中必须是不同的
对于所有引擎,UNIQUE 索引允许 NULL 包含的列有多个值 NULL
不能为空:NOT NULL
某些字段我们要求⽤户必须插⼊值,不可以为空,这个时候我们可以使⽤ NOT NULL 来约束
默认值:DEFAULT
某些字段我们希望在没有设置值时给予⼀个默认值,这个时候我们可以使⽤ DEFAULT 来完成
⾃动递增:AUTO_INCREMENT
某些字段我们希望不设置值时可以进⾏递增,⽐如⽤户的id,这个时候可以使⽤ AUTO_INCREMENT 来完成外键约束也是最常⽤的⼀种约束⼿段
创建⼀个完整的表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。