初识MySQL

了解数据库

MySQL是数据库(Database,简称DB)的一种。

数据库:长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。

现在市面上主要流行的数据库可以分为两种类型
关系型数据库(SQL)
MySQL、Oracle、SQL Server、SQLite、DB2

非关系型数据库(NOSQL)
Redis、MongoDB

MySQL

MySQL是一款开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,后被Oracle收购。MySQL的主要特点包括:

  1. 开源免费:MySQL使用GPL协议,可以免费使用和修改源代码。

  2. 性能高效:MySQL的查询速度和操作效率非常快,读写性能优异。

  3. 易于扩展:支持大型数据库,可以处理拥有高并发访问和庞大数据量的应用。

  4. 简单易用:MySQL语法简单,容易学习使用,并有完善的文档。

  5. 跨平台性:支持多种操作系统,如Windows、Linux、Unix等。

  6. 支持多种编程语言:提供了ODBC、JDBC等接口,支持多种编程语言访问。

  7. 安全稳定:提供良好的安全性,支持SSL加密传输,数据备份恢复也比较方便。

MySQL是最流行的开源数据库,被广泛应用于各种Web应用和嵌入式数据库的开发中。它一般与PHP、Python等语言配合使用,是Web应用栈的关键组件之一。

安装

可以直接从官网下载https://www.mysql.com/cn/
在这里插入图片描述
也可以下载神器phpStudy一键启动
在这里插入图片描述
MySQL登录
进入安装目录\mysql\bin,搜索栏搜索cmd
在这里插入图片描述

mysql  -h 服务器主机地址  –u  用户名  -p用户密码

建了一个微信公众号音耀,后续会在上面更新一些有用资源和笔记,大家有兴趣的话可以加一下谢谢了。(上面会更新完整代码)
在这里插入图片描述

使用Navicat Premium 16进行数据库管理

Navicat Premium 是一款功能强大的数据库管理工具,具有以下功能:

  1. 支持多种数据库:MySQL、MariaDB、SQLite、Oracle、PostgreSQL等数据库都可以通过Navicat Premium进行连接管理。

  2. 可视化数据库设计:提供可视化的数据库模型设计器,可以通过拖拽的方式设计数据库模型。

  3. 简单的数据操作:提供图形化的表数据浏览、编辑和搜索功能。可以快速进行数据查询、新增、修改和删除等操作。

  4. 多表数据对比:通过数据对比工具,可以直观地比较两个表或者数据库的差异。

  5. 数据传输与同步:实现不同数据库之间表结构和数据的传输,也可以进行数据库之间的实时同步。

  6. 数据库迁移:可以将其他数据库(如Access、SQL Server等)的数据迁移到Navicat Premium 支持的数据库。

  7. 批量执行SQL:可以进行SQL语句的批量编辑和执行。

  8. 连接云数据库:支持将本地或网络中的数据库连接到云端。

  9. 安全连接:支持SSH、HTTP、HTTPS等安全连接方式,保证数据传输安全。

综上所述,Navicat Premium是一个功能强大、操作简便的跨平台数据库管理工具,适用于各种不同场景的数据库管理工作。

首先连接本地数据库
在这里插入图片描述
在这里插入图片描述

新建一个数据库testdb
在这里插入图片描述
下面就可以进行操作了
新建数据库
在这里插入图片描述
新建数据表
在这里插入图片描述
图形化管理数据表
在这里插入图片描述
新建查询(命令操作
在这里插入图片描述

MySQL查询语句分类

汇总后的MySQL语句分类表格如下:

注意:MySQL并不区分大小写,为了方便记忆,我将关键字统一小写

分类说明主要关键字
DDL数据定义语言,用于定义数据库对象create, drop, alter
DQL数据查询语言,用于查询数据库数据select
DML数据操作语言,用于增删改查数据库记录insert, delete, update, select
DAL数据访问语言,用于访问数据库信息set transaction, commit, rollback,show,use
DCL数据控制语言,用于定义数据库访问权限grant, revoke
TCL事务控制语言,用于管理数据库事务commit, rollback, savepoint
CCT游标控制语言,用于管理游标declare cursor, fetch

基本学习

命令行操作数据库

创建数据库
CREATE  DATABASE    [IF NOT  EXISTS]   数据库名;
删除数据库
DORP DATABASE  [IF EXISTS] 数据库名; 
查看数据库
show DataBases;

显示当前MySQL服务器中存在的所有数据库名称。

使用数据库
USE database_name;

use语句不进行实际的数据操作,只是将后面所有的SQL语句针对指定的数据库来执行。

所以use语句是用于访问和选择数据库,属于数据访问语言DAL的一种。

创建数据表
CREATE TABLE [ IF NOT EXISTS ]    `表名`   (
    
	`字段名1`    列类型 [ 属性 ]  [ 索引 ] [注释] ,
	 `字段名2`   列类型 [ 属性 ]  [ 索引 ] [注释] , 
	… …    
    `字段名n`   列类型 [ 属性 ]  [ 索引 ] [注释] 

)  [  表类型 ] [ 表字符集 ] [注释] ;

假设我们要创建一个名为 employees 的表,其中包含三个字段:idname、和 emailid 是一个整数类型的字段,我们将其设置为主键;name 是一个可变字符串类型的字段;email 也是一个可变字符串类型的字段。

CREATE TABLE IF NOT EXISTS `employees` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',
  `name` VARCHAR(100) NOT NULL COMMENT '员工姓名',
  `email` VARCHAR(255) NOT NULL COMMENT '员工邮箱'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工信息表';

在这个例子中:

  • IF NOT EXISTS 是一个可选语句,用于只在同名表不存在时创建新表。
  • employees 是要创建的表名。
  • 每个 字段名 后面跟的是该字段的 列类型,可能还有一些额外的 属性,例如 NOT NULL 表示该字段不能有NULL值,AUTO_INCREMENT 表示自动递增。
  • PRIMARY KEY 是一个 索引,表示该字段是表的主键。
  • COMMENT 是字段或表的注释。
  • ENGINE=InnoDB 是指定的 表类型,InnoDB是MySQL的默认存储引擎之一。
  • DEFAULT CHARSET=utf8mb4表字符集,utf8mb4是推荐的字符集,支持存储Unicode字符。
  • 表的 注释 放在创建表的语句末尾。

最后,整个语句以分号 ; 结尾,表示SQL语句的结束。

列数据类型

MySQL中常见的列数据类型包括:

  • 数值类型:INTEGER、SMALLINT、DECIMAL等
  • 字符串类型:CHAR、VARCHAR、TEXT等
  • 日期时间类型:DATE、TIME、DATETIME、TIMESTAMP等
  • 布尔类型:BOOL、BOOLEAN

数值类型用于存储整数或浮点数值。

字符串类型用于存储字符串和文本内容。CHAR是定长的,VARCHAR是变长的。

日期时间类型用于存储日期、时间或两者合并的值。TIMESTAMP可以自动存储时间戳。

布尔类型用于存储真或假值。

此外,MySQL还支持二进制数据、空间数据等特定类型。

选择合适的数据类型对表的设计很重要,它会影响存储空间、查询性能等。

常见的原则是不要定义比实际需要更大或更精确的类型,那样会浪费存储和降低效率。

小知识:
在MySQL中,NULL值表示一个未知的或不适用的值。NULL并不是一种数据类型,而是可以应用于任何数据类型的字段的特殊标记。

一些关于NULL的特点:

  • NULL与任何值进行比较,结果都为NULL
  • NULL与NULL进行比较,结果也是NULL
  • 对NULL进行计算,结果通常也是NULL
  • NULL值不等于0或空字符串’’
  • 判断NULL需要使用IS NULL或IS NOT NULL,不能用=或!=

例如:

CREATE TABLE test (
   id INT,
   name VARCHAR(50) NULL
);

INSERT INTO test VALUES (1, NULL);

SELECT * FROM test WHERE name = NULL; -- 不会返回记录
SELECT * FROM test WHERE name IS NULL; -- 可以返回id为1的记录 

在MySQL中,NULL被用于表示一个未知或不存在的值,它的行为与一般值不同。使用和判断NULL值需要特殊的语法。

NULL自身没有数据类型,可以赋值给任意类型的字段。

数值类型
类型说明取值范围存储需求
TINYINT很小的整数有符号:-128 到 127
无符号:0 到 255
1 字节
SMALLINT小的整数有符号:-32768 到 32767
无符号:0 到 65535
2 字节
MEDIUMINT中等大小的整数有符号:-8388608 到 8388607
无符号:0 到 16777215
3 字节
INT或INTEGER标准整数有符号:-2147483648 到 2147483647
无符号:0 到 4294967295
4 字节
BIGINT大整数有符号:-2^63 到 2^63 - 1
无符号:0 到 2^64 - 1
8 字节
FLOAT单精度浮点数-3.402823466E+38 到 -1.175494351E-38,0 和 1.175494351E-38 到 3.402823466E+384 字节
DOUBLE双精度浮点数-1.7976931348623157E+308 到 -2.2250738585072014E-308,0 和 2.2250738585072014E-308 到 1.7976931348623157E+3088 字节
DECIMAL或NUMERIC定点数decimal(M, D)取决于M和D的值(M是数字的总数,D是小数点后的位数)
最大数为65(M)和30(D)
m个字节
字符串类型
类型说明最大长度
CHAR 定长字符串0 到 255 字符
VARCHAR变长字符串0 到 65535 字符
TINYTEXT很小的文本255 字符 (2^8 - 1)
TEXT 长文本数据65535 字符 (2^16 - 1)
MEDIUMTEXT中等长度文本16777215 字符 (2^24 - 1)
LONGTEXT极大文本数据4294967295 字符 (2^32 - 1)
BINARY定长二进制字符串0 到 255 字节
VARBINARY变长二进制字符串0 到 65535 字节
TINYBLOB很小的二进制数据255 字节 (2^8 - 1)
BLOB二进制数据65535 字节 (2^16 - 1)
MEDIUMBLOB中等长度的二进制数据16777215 字节 (2^24 - 1)
LONGBLOB极大二进制数据4294967295 字节 (2^32 - 1)
ENUM枚举,一个列的值限定在给定的列表内最多65535个不同的值
SET集合,一个列可以包含零个或多个给定列表中的值最多64个不同的值

注意,对于VARCHARTEXT类型,最大长度也取决于数据库的最大行大小以及字符集的使用。VARCHAR的最大有效长度可能会因为使用的字符集(如utf8utf8mb4)和其他列的存在而减少。此外,ENUMSET类型的长度取决于定义时列举的值的数量和长度。

日期时间类型
类型说明取值范围
DATE日期值‘1000-01-01’ 到 ‘9999-12-31’
TIME时间值或持续时间‘-838:59:59’ 到 ‘838:59:59’
DATETIME日期和时间的组合‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP时间戳,日期和时间的组合,UTC‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC
YEAR年份值1901 到 2155 及 0000

注意,TIMESTAMP 类型显示为 UTC 时间。在存储和检索过程中,它会自动转换为当前时区的时间。此外,DATETIME 类型不包含时区信息,而 TIMESTAMP 类型与时区相关。YEAR 类型可以有不同的显示宽度,比如 YEAR(2) YEAR(4)TIME类型除了表示一天中的时间,还可以表示时间间隔,最长可表示超过一个月的时间。

布尔类型

MySQL 并没有一个专门的布尔数据类型。然而,它使用 TINYINT(1) 来表示布尔值。

类型说明取值范围备注
TINYINT(1)布尔类型0 到 10 表示 false,1 表示 true

在MySQL中,通常使用 0 表示假(false)和 1 表示真(true)。虽然 TINYINT(1) 可以存储从 -128127 的值(如果是有符号的),或者从 0255 的值(如果是无符号的),但在用作布尔类型时,通常只使用 01。有时,在SQL语句中将会看到 BOOLEANBOOL 作为列类型的定义,但这些只是 TINYINT(1) 的同义词,并不是独立的数据类型。

属性

在MySQL中,列的“属性”定义了列的特定特性和行为。以下是一些常见的列属性以及它们的含义

属性描述
NOT NULL列不能存储 NULL 值。
DEFAULT为列指定一个默认值。如果插入操作未指定值,则使用默认值。
AUTO_INCREMENT对于每一条新记录,自动递增列的值。通常用于主键。
UNSIGNED对于数值类型,指定列不能为负。
ZEROFILL对于数值类型,空位以0填充。
COMMENT为列提供注释。
CHARACTER SET为字符列指定字符集。
COLLATE为字符列指定排序规则。
索引

索引”指的是对数据库表中一列或多列的值进行排序的数据库表结构。索引用于快速检索数据库表中的特定信息。在MySQL中,可以在创建表时为一个或多个列指定索引,以提高查询性能。

有几种类型的索引,包括但不限于:

  • PRIMARY KEY: 一个表中只能有一个主键,它唯一标识表中的每一行,并且不能为 NULL。
  • UNIQUE: 这个索引保证列中的所有值都是唯一的。与主键不同,你可以有多个唯一索引,并且列可以接受 NULL 值(除非另外指定了 NOT NULL)。
  • INDEX: 一般索引,用于提高查询性能,可以有多个。
  • FULLTEXT: 专门用于全文搜索。
  • FOREIGN KEY: 用于InnoDB表,强制执行参照完整性。

例如,在创建表时为字段创建索引的SQL语句如下:

CREATE TABLE IF NOT EXISTS `my_table` (
  `field1` INT NOT NULL AUTO_INCREMENT,
  `field2` VARCHAR(100) NOT NULL,
  `field3` DATETIME DEFAULT NULL,
  PRIMARY KEY (`field1`),
  UNIQUE KEY `unique_index` (`field2`),
  INDEX `field3_index` (`field3`)
);

在这个例子中,field1 被指定为主键,field2 有一个唯一索引,而 field3 有一个一般索引。

索引可以在创建表时定义,也可以在表创建后使用 ALTER TABLECREATE INDEX 语句添加。虽然索引可以加快检索速度,但它们也需要额外的存储空间,并且在插入、更新或删除数据时可能会降低性能,因为索引本身也需要更新。因此,应该根据实际情况合理地使用索引。

注释

数据库注释

数据库注释通常用来说明表、列或索引的用途和其他相关信息。这对于维护大型数据库和确保开发者之间的良好沟通非常有价值。

表注释

表注释提供了有关表整体目的和用途的信息。例如,在创建表时,可以这样添加注释:

CREATE TABLE employees (
  
) COMMENT='员工信息表,包含个人和职务细节';

列注释
列注释提供了有关表中特定列用途的信息。例如,在定义列时,可以这样添加注释:

CREATE TABLE employees (
  id INT AUTO_INCREMENT PRIMARY KEY COMMENT '唯一标识符',
  name VARCHAR(100) NOT NULL COMMENT '员工姓名',
);

索引注释
虽然在SQL中直接对索引添加注释不常见,但有时在创建索引时也可以提供说明性的SQL注释:

CREATE INDEX idx_lastname ON employees (lastname); -- 用于快速按姓氏查找员工的索引

在这些例子中,COMMENT用于直接在SQL语句中提供关于表结构的元数据。这些注释可以使用数据库管理工具查看,也可以在数据库的元数据中查询到。

数据表的存储位置

MySQL数据表以文件方式存放在磁盘中
包括表文件、数据文件以及数据库的选项文件
位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表

在这里插入图片描述
注意
InnoDB类型数据表只有一个*.frm文件,数据文件为上一级目录的 ibdata1 文件

MyISAM类型数据表对应三个文件:
*.frm – 表结构定义文件
*.MYD – 数据文件
*.MYI – 索引文件

当然,以下是关于MySQL中外键的Markdown笔记。

外键作用

外键是用来建立两个表之间的联系,保证参照完整性的一种数据库约束。其主要作用包括:

  • 参照完整性:确保关联表的字段值必须出现在主表的关联列中。
  • 数据一致性:维护数据库表之间的数据一致性。
  • 级联操作:可以设置级联更新或删除,当主表中的数据变化时,外键表中的数据也会相应变化。
创建外键

当创建新表时,可以直接在表的定义中包括外键约束。

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderNumber INT NOT NULL,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

在这个例子中,Orders 表的 CustomerID 列是一个外键,它引用了 Customers 表的 CustomerID 列。

建表时指定外键约束

在创建表时,可以在列定义后添加外键约束:

CREATE TABLE TableName (
    Column1 DataType,
    Column2 DataType,
    ...
    CONSTRAINT FK_ConstraintName FOREIGN KEY (Column1, Column2, ...) REFERENCES OtherTableName (Column1, Column2, ...)
);
建表后修改

如果需要在表创建后添加外键约束,可以使用 ALTER TABLE 语句:

ALTER TABLE TableName
ADD CONSTRAINT FK_ConstraintName
FOREIGN KEY (ColumnName) REFERENCES OtherTableName(ColumnName);
删除外键

要删除已存在的外键约束,可以使用 ALTER TABLE 语句:

ALTER TABLE TableName
DROP FOREIGN KEY FK_ConstraintName;
删除外键、删除表

在删除表之前,你可能需要先删除外键约束,以避免引用完整性问题:

ALTER TABLE TableName
DROP FOREIGN KEY FK_ConstraintName;

DROP TABLE TableName;

在上面的命令中,首先删除了 TableName 表的外键约束 FK_ConstraintName,随后删除了表。如果其他表没有引用该表的外键,则可以直接删除表:

DROP TABLE TableName;

请根据实际情况替换 TableNameColumnNameFK_ConstraintNameOtherTableName 以适应你的数据库结构。

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

分才

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

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

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

打赏作者

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

抵扣说明:

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

余额充值