MySQL基础知识
MySQL基础知识
1.数据库简介
1.1 使用数据库的原因
Windows、Linux、MacOS :三个都是基于文件的操作系统。
文件可以保存数据,但难管理(CRUD),Excel可以保存数据,但是不支持关联表查找。数据库系统虽也用文件保存数据,在此之上还提供了一个系统,并且提供了SQL语言便于管理。比如使用了关系模型的数据库系统的关系型数据库系统(RDBMS) Relational Database Management System
1.2 RDBMS关系型数据库系统
关系模型:数据分类存放,数据之间可以有联系
第一个关系型数据库是Oracle数据库,主流的有 DB2, Oracle,MySQL,SQL Server
1.3 NoSQL非关系型数据库
数据分类存放,数据之间没有联系,适用于秒杀库存,登陆信息,消息通知等业务场景,读写快,没有明显的表结构,单线程的,是关系型数据库的一种补充。主流的有redis、MongoDB。
2.Windows系统下MySQL数据库安装
安装版本 8.0.23 MSI ,下载页面 注意到这个版本似乎是 x86 32位的。
2.1安装步骤:
- Chooseing a Setup Type:选择 Server only;
- Check Requirements:需要安装一个 Visual C++ 2015(联网);
- Installation;
- Group Replication 默认是单机;
- Type and Networking:首次安装无需修改,若之前安装过则修改一下端口号,如5001;
- Authentication Method:选择
Use Legacy Authentication Method (Retain MySQL5.x Compatibility)
; - Accounts and Roles:设置初始 root密码;
- Windows Serivce:默认,注意确保勾选 Start the MySQL Server at System Startup,会省很多麻烦;
- 最后安装完成。
2.2 添加环境变量
将MySQLbin目录添加到环境变量
2.3 cmd命令行登陆
电脑重启后,MySQL服务器应该就会随系统启动而运行
Win10 在管理员权限下打开PowerShell,切换到mysql安装bin目录下:
mysqld --install
# Serivce successfully installed
net start mysql
# 请求的服务已经启动
# 请键入NET HELPMSG 2182以获得更多的帮助
# 初始化mysql数据库,记住输出的最后一行的密码
mysqld --initialize --user=root --console
# A temporary password is generated for root@localhost:oOawMFhRr6*g
# 用上述的密码成功登陆,并手动修改root密码
mysql -u root -p
# Enter password:xxxxxxxxxxxx
mysql> set password="sbt123";
2.4 MySQL8.0配置文件
MySQL的软件安装路径与数据存放路径不在一处。由于是默认安装,估计位置都一样。以笔者操作为例,MySQL软件安装目录在 C:\Program Files\MySQL\MySQL Server 8.0\bin
。而数据存放路径是位于C:\ProgramData\MySQL\MySQL Server 8.0,其中 ProgramData目录是隐藏目录,因此需要设置文档管理器中的 隐藏文件可见 。其中Data存放这数据库文件,而my.ini
就是配置文件。
2.5 使用 Navicat premium 数据库图形化管理软件
学习交流版下载地址:链接: https://pan.baidu.com/s/1E2onRsbbD2IoD55UFqII1A 提取码: u8ku
使用方法:确保MySQL正在运行,且可以在cmd中连接。连接→MySQL连接→正确填写端口,账号,密码。
3.SQL语言
SQL是访问和处理数据的标准的计算机语言
分类:
- DML:增删改查
- DCL:用户,权限,事务
- DDL:逻辑库,数据表,视图,索引
3.1 数据类型
3.1.1 数字
FLOAT 和 DOUBLE 可以保存精确度要求不高的数据,但是对于高精度的数据保存要用DECIMAL,因为十进制浮点数转成二进制浮点数会丢数据,而DECIMAL用保存字符串的方式来保存数据
3.1.2 字符串
VARCHAR(10),更长的字符串使用NoSQL来保存。
在 MySQL5.0以后,varchar(50), 指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。参考 mysql varchar(50)到底能存多少个汉字
3.1.3 日期类型
4. MySQL常用命令
WAMP单独调用MySQL 参考 。命令严格上要大写,便于与变量区分。下面的代码都是在MySQL的默认客户端中运行的,也可以在Navicat上运行
4.1 创建-查看-删除
# 查看
SHOW DATABASES;
USE sys;
SHOW TABLES;
DESC host_summary;
SHOW CREATE TABLE SUMMARY # 表名不要加 引号
# 创建逻辑库
CREATE DATABASE test;
# 删除逻辑库
DROP DATABSE test
# 创建表
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 删除表
DROP TABLE table_name;
4.2 更改表结构
# 1.添加字段(列)
ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home_tel CHAR(11) NOT NULL,
# 2.修改已有的字段
MODIFY home_tel CHAR(12) NOT NULL,
# 3.修改字段名称
CHANGE address home_address VARCHAR(200) NOT NULL;
# 4.删除字段
DROP home_address,
DROP home_tel;
4.3 编辑-更新
# 插入
INSERT INTO runoob_tbl
(runoob_title,runoob_author,submission_date)
VALUES
("学习JAVA","张三",NOW())
# 更新/修改
UPDATE runoob_tbl SET runoob_title = '学习Python' WHERE runoob_id=2;
# 删除
DELETE FROM runoob_tbl WHERE runoob_id=2;
5.理论知识
5.1 数据库几大范式
-
NO.1 原子性:每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性
-
NO.2 唯一性:表中每条记录都是唯一的,为了区分,通常要为表加一个列用来存储唯一标识,该列被称作主键列
-
NO.3 关联性:每列都与主键有直接关系,不存在间接传递依赖。复杂的表可以拆分保存到不同的数据表,彼此保持关联(外键)
5.2 字段约束
外键约束:保证关联数据的逻辑关系,定义写在子表上,不推荐,因为存在外键约束的闭环问题,导致无法删除任何一张表的记录。
5.3 索引
索引:数据排序,方便查询
INDEX [index_name] (字段)
CREATE TABLE t_message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200) NOT NULL,
type ENUM("公告","个人通知","通报") NOT NULL,
create_time TIMESTAMP NOT NULL,
INDEX idx_type(type)
);
## 展示表中的索引
SHOW INDEX FROM t_message;
## 已存在的表添加索引
CREATE INDEX idx_content ON t_message(content);
# ALTER TABLE t_message ADD INDEX idx_content(content);
## 删除索引
DROP INDEX idx_content ON t_message;
主键默认具有索引功能
索引使用原则
- 数据量很大,经常被查询的数据表可以设置索引
- 索引只添加在经常被用作检索条件的字段上面
- 不在长字段上创建索引