MySQL 入门教学,真的已经很简洁了

MySQL


阅读本文前必看:本文是 MySQL 入门教学,从简介 -> 建立数据库 -> 理解数据类型和字段约束 -> 建立数据表 -> DML(增删改,查单独在我的另一篇博客),主要针对从未接触过 MySQL 的小白,相信读完后一定能快速上手 MySQL,至于其他的内容,我会单独拉出来写,毕竟知识点涉及较多!


1、简介


1.1、基本概念

数据库(DB,DataBase):用来放数据的仓库,具有很大的存储空间,起到管理数据的作用


数据库分类

  • 关系型数据库(SQL):存储的格式可以直观地反映实体间的关系,和常见的表格比较相似

    举例:MySQL、Oracle、sql Server、DB2

  • 非关系型数据库(NoSQL):指的是分布式的、非关系型的、不保证遵循 ACID 原则的数据存储系统

    举例:Redis、MongDB、Memcache


数据库管理系统(DBMS,Database Management System):一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性,我们所学的 MySQL 就是关系型数据库管理系统


1.2、MySQL 介绍

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。(简单看看就好了)

官网:https://www.mysql.com


1.3、语言组成

  • DQL:数据库查询语言。关键字:SELECT … FROM … WHERE
  • DDL:数据库模式定义语言。关键字:CREATE,DROP,ALTER
  • DML:数据操纵语言。关键字:INSERT、UPDATE、DELETE
  • DCL:数据控制语言 。关键字:GRANT、REVOKE
  • TCL:事务控制语言。关键字:COMMIT、ROLLBACK、SAVEPOINT
  • CCL:指针控制语言。关键字:FETCH、DECLARE CURSOR

这六种语言共同组成了数据库的完整语言

需要注意:在 MySQL 中不区分大小写,但是,我们推荐使用 DQL 的时候采用大写,这是一种不成文的规范。同时书写过程的语句可以分行书写,增加代码的可读性


1.4、如何使用

步骤非常简单:

1、下载 MySQL(推荐 5.7,比较稳定,当然下载最新的 8.0 也是没问题的)

2、配置 MySQL(CSDN 或者知乎上教程一大堆)

3、下载 Navicat(可视化界面)

4、Naviact 连接 MySQL

5、开始愉快的使用 MySQL


Navicat 连接完毕界面如下:

1



2、基本操作

三个层次:

  • 数据库(创建、删除)
  • 数据表(掌握数据类型和数据字段属性)
  • 数据项(增删改查)

2.1、操作数据库

2.1.1、创建数据库

使用 sql 语句创建

CREATE DATABASE [IF NOT EXISTS] Name;

/* [IF NOT EXISTS] 代表即使存在数据库,也不会报错,只会进行警告
成功:Query OK, 1 row affected (0.09 sec)
失败:1007 - Can't create database 'Name'; database exists*/

通过命令提示符创建

> mysqladmin -u root -p create Name
> Enter password:******

2.1.2、删除数据库

使用 sql 语句删除

DROP DATABASE [IF EXISTS] Name;

/* [ID EXISTS] 代表存在则删除,不存在不报错,只会警告
成功:Query OK, 1 row affected (0.18 sec)
失败:1008 - Can't drop database 'Name'; database doesn't exist */

通过命令提示符删除

> mysqladmin -u root -p drop Name
> Enter password:******

2.1.3、使用数据库

使用 sql 语句

USE databaseName;
-- 当你的数据库名称是关键字的时候,可以使用 ``,例如 use `create`,此时create是数据库名

2.1.4、查看数据库

使用 sql 语句

SHOW DATABASES; -- 可以查看所有的数据库

例如(使用 Navicat):

2

2.2、数据类型

在数据表中,每一个字段都是有类型的,就和 Java 一样,我们需要合理使用数据类型,下面介绍了几种常见的字段类型


2.2.1、数值类型
类型名称大小(Bytes)范围(有符号)范围(无符号)
TINYINT小整数值1(-27 ,27-1)(0,28-1)
SMALLINT大整数值2(-215 ,215-1)(0,216-1)
MEDIUMINT大整数值3(-223 ,223-1)(0,224-1)
INT / INTEGER大整数值4(-231 ,231-1)(0,232-1)
BIGINT极大整数值8(-263 ,263-1)(0,232-1)
FLOAT单精度值4不用了解不用了解
DOUBLE双精度值8不用了解不用了解
DECIMAL小数值(字符串形式)依赖 M 和 D 的值依赖 M 和 D 的值

2.2.2、日期和时间类型
类型名称大小(Bytes)格式
DATE日期值3YYYY-MM-DD
TIME时间值/持续时间3HH:MM:SS
YEAR年份值1YYYY
DATETIME混合日期/时间值8YYYY-MM-DD HH:MM:SS
TIMESTAMP混合日期/时间值/时间戳4YYYYMMDDHHMMSS

2.2.3、字符串类型
类型名称大小(Bytes)
CHAR定长字符串(0,255)
VARCHAR变长字符串(0,65 535)
TINYBLOB不超过 255 个字符的二进制字符串(0,255)
TINYTEXT短文本字符串(0,255)
BLOB二进制形式的长文本数据(0,65 535)
TEXT长文本数据(0,65 535)
MEDIUMBOLO二进制形式的中等长度文本数据(0,16 777 215)
MEDIUMTEXT中等长度文本数(0,16 777 215)
LONGBOLB二进制形式的极大文本数据(0,4 294 967 295)
LONGTEXT极大文本数据(0,4 294 967 295)

几点注意事项

  • 一个汉字占多少长度与编码有关
    • UTF-8:一个汉字=3个字节
    • GBK:一个汉字=2个字节
  • utf8mb4 每个字符占 4 个 Byte,所以 VARCHAR 最长为 65535/4 = 16383.75
  • 一张表中多个字段都为 VARCHAR,那么所有 VARCHAR 字段总和不能超过16383
  • 存储 CHAR 类型数据的时候,若长度不足则用空格填充到相应长度。查询时,返回的数据尾部是没有空格的

2.3、字段属性

属性字段用于规范数据样式或对数据进行说明,我们也可以理解为一种初步的约束,常用的属性字段有:

  • 自动递增(AUTO_INCREMENT):可以设置每次递增的数值
  • 无符号(UNSIGNED):针对数值型,是否可以为负数
  • 填充零:一般数值型使用,位数不足自动补零,例如 4 位的 INT 型数据,1 会变成 0001
  • 是否为空(NOT NULL):数据是否可以为 null
  • 主键(PRIMARY KEY):不能重复,区分每一条记录
  • 注释:对数据进行说明

Navicat 可视化操作字段属性:

3


4

2.4、操作数据表

上边我们创建完了数据库,了解了字段类型和约束,下面就该操作数据表了!


2.4.1、创建数据表

使用 sql 语句创建

CREATE TABLE [IF NOT EXISTS] `tableName`(
	`field_1` VARCHAR(10) [NOT NULL] COMMENT 'comment_1',
    `field_2` INT(2) [AUTO_INCREMENT] COMMENT 'comment_2',
    `field_3` BIGINT(20) [UNSIGNED] COMMENT 'comment_3',
    `field_4` CHAR(20) [DEFAULT 'Hello'] COMMENT 'comment_4',
    `field_5` DATE,
    PRIMARY KEY(`field_2`)
)[ENGINE=InnoDB] [DEFAULT CHARSET=utf8]

-- 注:使用 [] 都是可选项
-- NOT NULL			非空
-- AUTO_INCREMENT	自增
-- UNSIGNED			无符号数
-- DEFAULT			默认值
-- COMMENT			注释
-- PRIMARY KEY		主键
-- ENGINE			存储引擎
-- DEFAULT CHARSET	字符集

注意事项

  • 字段用 () 括起来,结尾不用使用 ;
  • 字段名称推荐使用 ``
  • 尽量每个字段都写上注释
  • 推荐将 PRIMARY KEY 放到最后,便于代码的可读
  • 全表只能有一个 AUTO_INCREMENT 修饰的字段,且使用 AUTO_INCREMENT 修饰的字段必须是主键

通过命令提示符创建(登录省略)

mysql> use databaseName
Database changed
mysql> CREATE TABLE 
	-> `field_1` VARCHAR(10) [NOT NULL] COMMENT 'comment_1',
	-> `field_2` INT(2) [AUTO_INCREMENT] COMMENT 'comment_2',
	-> `field_3` BIGINT(20) [UNSIGNED] COMMENT 'comment_3',
	-> `field_4` CHAR(20) [DEFAULT 'Hello'] COMMENT 'comment_4',
	-> `field_5` DATE,
	-> PRIMARY KEY(`field_2`)
	-> )[ENGINE=InnoDB] [DEFAULT CHARSET=utf8];
Query OK, 0 rows affected (0.16 sec)
mysql> 

注意:使用命令提示符的时候,结尾必须使用 ;


2.4.2、删除数据表

使用 sql 语句删除

DROP TABLE [IF EXISTS] tableName;	-- 相当好记,不要乱用

使用命令提示符删除(登录省略)

mysql> use databaseName;
Database changed
mysql> DROP TABLE [IF EXISTS] tableName;
Query OK, 0 rows affected (0.8 sec)
mysql>

有心的读者可以发现,我们在创建删除数据表(数据库)的时候,都会选择加上判断,这样可以减少报错


2.4.3、修改数据表

修改数据表有许多种情况,例如修改表名、修改字段属性、删除字段等

使用 sql 语句修改

ALTER TABLE `tableName` RENAME `newTableName`; 		-- 修改表名

ALTER TABLE `tableName` ADD `field` int(10);		-- 添加字段
ALTER TABLE `tableName` DROP `field_1`;				-- 删除字段
ALTER TABLE `tableName` MODIFY `field_2` char(20); 	-- 修改字段的约束
ALTER TABLE `tableName` CHANGE `field_3` `field_4`;	-- 修改字段名

注:ALTER 语句一般用于修改表结构


使用命令提示符修改(和上边基本一样)

mysql> use databaseName;
Database changed
mysql> ALTER TABLE `tableName` RENAME `newTableName`;
Query OK, 0 rows affected (0.8 sec)

mysql> ALTER TABLE `tableName` ADD `field` int(10);
Query OK, 0 rows affected (0.6 sec)

mysql> ALTER TABLE `tableName` DROP `field_1`;
Query OK, 0 rows affected (0.8 sec)

mysql> ALTER TABLE `tableName` MODIFY `field_2` char(20);
Query OK, 0 rows affected (0.6 sec)

mysql> ALTER TABLE `tableName` CHANGE `field_3` `field_4`;
Query OK, 0 rows affected (0.6 sec)
mysql> 



3、数据管理


3.1、外键

先来举个例子:

假如有一张学生表和选课表;

选课表存放所有选课的信息,字段有选课号(course_id)、选课名(course_name),主键为课程 id(course_id);

学生表存放每一个学生的信息,字段有 学号(student_id)、姓名(name)、年龄(age)、选课号(student_course_id),主键为学号(student_id);

现在学生进行选课,一个学生至多只能选择一门课程,要求课程必须在选课表中存在。

那么我们可以将选课表的 course_id 字段作为学生表中 student_course_id 字段的外键,这样学生只能选择选课表中存在的选课。


sql 语句实现上述要求

-- 创建学生表 student
CREATE TABLE student(
	`student_id` int(20) NOT NULL COMMENT '学生id',
	`name` VARCHAR(10) NOT NULL COMMENT '学生姓名',
	`age` INT(5) NOT NULL COMMENT '学生年龄',
	`student_course_id` int(20) NOT NULL COMMENT '学生选课id',
	PRIMARY KEY(`student_id`)
)ENGINE=INNODB CHARSET=utf8
-- 创建选课表 course
CREATE TABLE course(
	`course_id` int(20) NOT NULL COMMENT '选课id',
	`course_name` VARCHAR(20) NOT NULL COMMENT '课程名称',
	PRIMARY KEY(`course_id`)
)ENGINE=INNODB CHARSET=utf8
-- 设置外键(推荐在建表完毕后,使用 ALTER 进行修改)
ALTER TABLE `student` ADD CONSTRAINT `FK_course_id` FOREIGN KEY(`student_course_id`) REFERENCES `course`(`course_id`);

最终效果 student 表:

5
6


course 表:

7

从上述例子中,我们可以很好的理解什么是外键,以及外键该如何去定义。在实际使用中,我们不推荐在数据库内使用外键约束,因为数据库本职工作是用来存储数据,我们不希望它有过多的约束,这样容易造成错误,在之后,我们会使用程序进行外键约束,所以外键的介绍先到此

注意:我们会给每一个外键取一个名字,一般取名规则就是 FK_ + 外键名,这是一种规范


3.2、DML

DML(Data Manipulation Language)就是数据操纵语言,是用于数据库的操作,其中三种核心指令:

  • INSERT:插入(增)
  • UPDATE:更新(改)
  • DELETE:删除(删)

3.2.1、INSERT

基本格式

INSERT INTO `tableName`(`field_1`, `field_2`,······,`field_n`) 
VALUE(value_1, value_2,······,value_n)

我们还是以上边两个表为基础,插入学生和选课的基本信息

-- 插入选课信息
INSERT INTO `course`(`course_id`, `course_name`)
VALUE(1, 'Java');
INSERT INTO `course`(`course_id`, `course_name`)
VALUE(2, 'Python');
INSERT INTO `course`(`course_id`, `course_name`)
VALUE(3, 'JavaScript');
INSERT INTO `course`(`course_id`, `course_name`)
VALUE(4, 'CSS');
-- 插入学生信息,注意顺序,因为定义了外键,而且学生选课的字段不能为空,所以没有选课信息,学生将无法选课(实际情况应该设置学生选课字段可以为空,这里是为了方便演示)
-- 通常我们习惯分两行写,便于阅读
INSERT INTO `student`(`student_id`, `name`, `age`, `student_course_id`)
VALUE(1, 'Mike', 20, '1');
INSERT INTO `student`(`student_id`, `name`, `age`, `student_course_id`)
VALUE(2, 'John', 21, '3');
-- 可以一次性插入多条记录,中间用 , 隔开
INSERT INTO `student`(`student_id`, `name`, `age`, `student_course_id`)
VALUE(3, 'Lucy', 21, '2'), (4, 'Lily', 22, '4');

效果 course & student 表:

8

9

上述案例在插入记录的时候,所有的值和表中的字段都匹配,但有时候我们允许某些字段为 null,这时如果在插入过程中,我们没有给该记录的字段赋值,这条记录的这个字段的值就为 null,听上去有点绕口,让我们举个例子:


现在我们新建一个 teacher 表,字段有工号(teacher_id)、姓名(name)、年龄(age)、手机号(phoneNumber)、电子邮箱(E-mail),其中主键为 teacher_id,而且允许手机号和段子邮箱为空

-- 创建 teacher 表
CREATE TABLE teacher(
	`teacher_id` int(20) NOT NULL COMMENT '工号',
	`name` VARCHAR(10) NOT NULL COMMENT '姓名',
	`age` int(20) NOT NULL COMMENT '年龄',
	`phoneNumber` BIGINT(12) COMMENT '手机号',
	`E-mail` VARCHAR(20) COMMENT '电子邮箱',
	PRIMARY KEY(`teacher_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 添加老师信息
INSERT INTO `teacher` -- 注意这里并没有写出字段名称,会直接按照顺序进行匹配
VALUE(1, '张三', 40, 12345678910, 'zhangsan@163.com'), (5, '丁七', 40, 13546975941, 'dingqi@163.com');
INSERT INTO `teacher`(`teacher_id`, `name`, `age`,`phoneNumber`)
VALUE(2, '李四', 40, 1386468517);
INSERT INTO `teacher`(`teacher_id`, `name`, `age`,`E-mail`)
VALUE(3, '王五', 40, 'wangwu@163.com');
INSERT INTO `teacher`(`teacher_id`, `name`, `age`)
VALUE(4, '赵六', 40);

teacher 表:

10


3.2.2、UPDATE

基本格式

UPDATE `tableName` SET `field_1` = new_value_1, `field_2` = new_value_2
[WHERE Clause];		-- WHERE 子句在之后会将,现在只要看得懂就行

现在我们要修改 teacher 表中的老师信息:将 name = ‘李四’ 的 age 修改成 45,将 name = ‘王五’ 的 age 修改成 48:

-- 更新信息
UPDATE `teacher` SET `age`=45
WHERE `name`='李四';
UPDATE `teacher` SET `age`=48
WHERE `name`='王五';

修改结果:


3.2.3、DELETE

DELETE基本格式

DELETE FROM `tableName`		-- 不写 WHRER 子句,就代表删除全表内容,危
[WHERE Clause];

现在我们要把学生 Mike 从 student 表中删除,因为他毕业了:

DELETE FROM `student`
WHERE `name` = 'Mike';

删除后结果:

12


那么假如我们要从 course 表中删除 course_id = 2 的课程呢?

DELETE FROM `course`
WHERE `coouse_id`='2';

-- 报错:1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'x 1DELETE FROM `course`2WHERE `coouse_id`='2'' at line 1

-- 因为 course_id = 2 的课程还在被学生使用(作为外键),而创建外键的时候选择的删除方式是 RESTRICT,即不进行级联删除,所以只有当所有选择 课程2 的学生全部毕业了,课程2 才能被删除

TRUNCATE 基本格式

TRUNCATE FROM `tableName`
[WHERE Clause];

-- 可以发现和 DELETE 语句的格式相同

TRUNCATE 和 DELETE 语句区别:

  • 在全表删除的时候, TRUNCATE 会将自增重置为 0,而 DELETE 保持不变
  • 删除速度 TRUNCATE > DELETE
  • TRUNCATE 是 DDL(Data Definition Language ) 数据定义语言,而 DELETE 是 DML(Data Manipulation Language) 数据操纵语言

辛苦看到这里的你,相信一定对 MySQL 有了初步的了解,那么,请开始你的 MySQL 之旅吧,别忘了喜欢的话给个赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

畅谈、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值