MySQL介绍

184 阅读6分钟

关系型数据库系统是指使用了关系模型的数据库系统,关系模型中,数据是分类存放的,数据之间可以有联系。

NoSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统,可与关系型数据库互补,如秒杀超卖。

NoSQL数据库没有严格的表结构,数据读写没有那么多的校验,读写速度快于关系型数据库,如用户登录信息,网站消息通知。

软件工具:MySQL、数据库管理工具navicat premium、代码编辑器VScode和nodepad++。

一、MySQL数据库安装与配置

用户管理

用户名:dev(开发者)

主机:%(可使用任意ip地址的主机使用该数据库)

navicat操作完成后别忘了保存

如何修改root密码

MySQL配置文件

在my.ini文件中,我们可以设置各种MySQL的配置

my.ini      [client]

               [mysql]  这俩负责客户端配置信息

               [mysqld] 数据库配置信息

my.ini位置:C:\ProgramData\MySQL\MySQL Server 8.0

二、MySQL表操作

SQL是用于访问和处理数据的标准的计算机语言

SQL语言分类 1. DML 添加 修改 删除 查询

                     2. DCL 用户 权限 事务

                     3. DDL 逻辑库 数据表 视图 索引 

SQL语句不区分大小写,但是字符串区分大小写

SQL语句必须以分号结尾

SQL语句中的空白和换行没有限制,但是不能破坏语法

SQL注释 #单行注释

关键字大写,非关键字小写,字符串该大则大,该小则小,表名可用英文、英文加数字,但不可使用中文

真实存在的表,表名t_xxx,像视图,表名则写为v_xxx

/*多行注释*/

创建逻辑空间 (等同于创建文件夹)

SHOW DATABASES; 

CREATE DATABASE demo; 

DROP DATABASE demo;

使用逻辑库

USE test;

创建数据表 (创建.ibd文件)

CREATE TABLE 数据表(

   列名1 数据类型 [约束] [注释],

   列名2 数据类型 [约束] [注释]

)[注释];

CREATE TABLE student(

  id INT UNSIGNED PRIMARY KEY, 无符号整数确保学号不会出现负数,主键确保学号不会重复

  name VARCHAR(20) NOT NULL, 不定长度20个字符以内

  sex CHAR(1) NOT NULL, 固定长度1个字符

  birthday DATE NOT NULL,

  tel CHAR(11) NOT NULL,

  remark VARCHAR(200)

);

增 INSERT INTO student VALUES(1,"李强","男","1995-07-09","15024733460",null);

SHOW tables;

DESC student; 数据表详情

SHOW CREATE TABLE student; 查看创建时所用SQL语句

DROP TABLE student;

数据类型:数字

类型                   大小            说明

TINYINT            1字节           小整数

SMALLINT         2字节           普通整数

MEDIUMINT      3字节           普通整数

INT                     4字节           较大整数

BIGINT                8字节          大整数

FLOAT                 4字节          单精度浮点数

DOUBLE             8字节           双精度浮点数

DECIMAL                                DECIMAL(10,2) 整数位加小数位一共10位,精确到小数点后2位,可以自定义。并非将十进制转换成二进制再存储,而是转换成字符串存储,所以万无一失。

十进制的整数转换成二进制的整数不会损失精度。

十进制的浮点数无法再计算机中用二进制精确表达。

例如用二进制小数表示十进制的0.2,1/8+1/16+1/128+...无限逼近但不等于。

数据类型:字符串

类型                    大小                       说明

CHAR             1-255字符                固定长度字符串

VARCHAR      1-65535字符            不固定长度字符串

TEXT              1-65535字符             不确定长度字符串

MEDIUMTEXT  1-1千6百万字符       不确定长度字符串

LONGTEXT        1-42亿字符             不确定长度字符串

前两个加小括号

数据类型:日期类型

类型             大小          说明

DATE          3字节        日期

TIME          3字节         时间

YEAR          1字节        年份

DATETIME   8字节       日期时间

TIMESTAMP 4字节       时间戳

插入数据时要加引号,中间用-隔开

修改表结构

添加字段

ALTER TABLE 表名称

ADD 列1 数据类型 [约束] [注释],

ADD 列2 数据类型 [约束] [注释];

修改已有字段、约束、注释

ALTER TABLE 表名称

MODIFY 列1 数据类型 [约束] [注释],

MODIFY 列2 数据类型 [约束] [注释];

修改字段名称

ALTER TABLE 表名称

CHANGE 列1 新列名1 数据类型 [约束] [注释],

CHANGE 列2 新列名2 数据类型 [约束] [注释];

删除字段

ALTER TABLE 表名称

DROP 列1,

DROP 列2;

数据库的范式

构造数据库必须遵循一定的规则,这种规则就是范式

目前关系数据库有6种范式,一般情况下,只满足第三范式即可

第一范式:原子性

第一范式是数据库的基本要求,不满足这一点就不是关系数据库

数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。

第二范式:唯一性

数据表中的每条记录必须是唯一的,为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称作主键列

第三范式:关联性

每列都与主键有直接关系,不存在传递依赖

依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联

字段约束

MySQL中的字段约束共有四种:

约束名称           关键字                 描述

主键约束          PRIMARY KEY      字段值唯一,且不能为NULL

非空约束          NOT NULL           字段值不能为NULL 后面可以加DEFAULT 

唯一约束          UNIQUE               字段值唯一,且可以为NULL

外键约束          FOREIGN KEY       保持关联数据的逻辑性

建议主键一定要使用数字类型,因为数字的检索速度会非常快

如果主键是数字类型,还可以设置自动增长

CREATE TABLE teacher(

  id INT PRIMARY KEY AUTO_INCREMENT,

  ......

);

sex ENUM("男","女") NOT NULL, 枚举类型,只能从中选一个存储

外键约束的定义是写在子表上的

FOREIGN KEY (A属性)REFERENCES 父表表名(A属性)

如果形成外键闭环,我们将无法删除任何一张表的记录,所以不推荐使用外键

如何创建索引

CREATE TABLE 表名称(

  ...,

  INDEX [索引名称] (字段),

  ......

);

主键(整型)自带索引,索引利用二叉树的二分查找可以大大提高查找数据的速度

添加索引

CREATE INDEX  索引名称 ON 表名 (字段);

ALTER TABLE 表名称 ADD INDEX [索引名] (字段);

查看索引

SHOW INDEX FROM 表名;

删除索引

DROP INDEX 索引名称 ON 表名;

索引的使用原则

数据量很大,而且经常被查询的数据表可以设置索引

索引只添加在经常被用作检索条件的字段上面

不要在大字段上创建索引