MySQL数据库

第一章 初识MySQL

数据库介绍

数据库(Database,简称DB)

概念:

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

作用:

保存、管理数据

数据库分类

关系型数据库(SQL)

MySQL、Oracle、SQL Server、SQLite、DB2

非关系型数据库(NOSQL)

Redis、MongoDB

DBMS

数据库管理系统(Database Management System)

数据管理软件,科学组织和存储数据、高效地获取和维护数据

核心定义与功能

DBMS(Database Management System)是操纵和管理数据库的核心软件工具,其核心功能包括:

  1. 数据定义‌:通过数据定义语言(DDL)创建数据库结构(如表、索引等)
  2. 数据操作‌:支持增删改查(CRUD)操作,通过数据操作语言(DML)实现
  3. 数据安全与完整性‌:设置用户权限、主键/外键约束等,确保数据准确性和安全性
  4. 并发控制与恢复‌:管理多用户并发访问的事务隔离,支持故障恢复(如日志备份)
  5. 存储优化‌:管理物理存储方式及索引,提升查询效率
主要类型
  1. ‌**关系型(RDBMS)**‌:如MySQL、Oracle,基于表格结构,支持SQL语言,强调数据一致性和事务ACID特性
  2. ‌**非关系型(NoSQL)**‌:如MongoDB、Redis,适用于非结构化数据,支持高扩展性和灵活的数据模型

MySQL简介

概念:是现流行的开源免费的关系型数据库

特点:

  • 免费、开源数据库
  • 小巧、功能齐全
  • 使用便捷
  • 可运行于Windows或Linux操作系统
  • 可适用于中小型甚至大型网站应用
运行机制

在这里插入图片描述

MySQL使用

连接数据库

打开MySQL命令窗口

  • 在DOS命令行窗口(cmd.exe)
  • 在窗口中进入 安装目录\mysql\bin
    • 可设置环境变量

连接数据库语句

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

结构化查询语句SQL

分类:

名称 解释 命令
DDL(数据定义语言) 定义和管理数据对象,如数据库,数据表等 CREATE、DROP、ALTER
DML(数据操作语言) 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE
DQL(数据查询语言) 用于查询数据库数据 SELECT
DCL(数据控制语言) 用来管理数据库的语言,包括管理权限及数据更改 GRANT、COMMIT、ROLLBACK
命令行操作

创建数据库

CREATE  DATABASE    [IF NOT  EXISTS]   数据库名;

删除数据库

DROP DATABASE  [IF EXISTS] 数据库名; 

查看数据库

SHOW   DATABASES;

使用数据库

USE  数据库名;
工具建表
  • 显示表结构
    • desc表名
  • 显示表创建语句
    • show create table表名

创建数据表

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

)  [  表类型 ] [ 表字符集 ] [注释] ;
-- 反引号用于区别MySQL保留字与普通字符而引入的
列类型
 CREATE   TABLE [ IF NOT EXISTS ]    `表名`   (
    
        `字段名1`    列类型 [ 属性 ]  [ 索引 ] [注释] ,
        `字段名2`   列类型 [ 属性 ]  [ 索引 ] [注释] , 
         … …    
         `字段名n`   列类型 [ 属性 ]  [ 索引 ] [注释] 

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

-- 表列类型设置
-- 列类型

  • 规定数据库中该列存放的数据类型
    • 数值类型
    • 字符串类型
    • 日期和时间型数值类型
    • NULL值
数值类型
类型 说明 取值范围 存储需求
tinyint 非常小的数据 有符值:-27~27-1 无符号值:0~2^8-1 1字节
smallint 较小的数据 有符值:-215~215-1 无符号值:0~2^16-1 2字节
mediumint 中等大小的数据 有符值:-223~223-1 无符号值:0~2^24-1 3字节
int 标准整数 有符值:-231~231-1 无符号值:0~2^32-1 4字节
bigint 较大的整数 有符值:-263~263-1 无符号值:0~2^64-1 8字节
float 单精度浮点数 ±1.1754351e -38 4字节
double 双精度浮点数 ±2.2250738585072014e -308 8字节
decimal 字符串形式的浮点数 decimal(m, d) m个字节
字符串类型
类型 说明 最大长度
char[(M)] 固定长字符串,检索快但费空间, 0 <= M <= 255 M字符
varchar[(M)] 可变字符串0 <= M <= 65535 变长度
tinytext 微型文本串 2^8–1字节
text 文本串 2^16–1字节
日期和时间型数值类型
类型 说明 取值范围
DATE YYYY-MM-DD,日期格式 1000-01-01~ 9999-12-31
TIME Hh:mm:ss ,时间格式 -838:59:59~838:59:59
DATETIME YY-MM-DD hh:mm:ss 1000-01-01 00:00:00至9999-12-31 23:59:59
TIMESTAMP YYYYMMDDhhmmss格式表示的时间戳 197010101000000 ~2037年的某个时刻
YEAR YYYY格式的年份值 1901~2155
NULL值
  • 理解为“没有值”或“未知值”
  • 不要用NULL进行算术运算,结果仍为NULL
数据字段属性
表列类型设置
CREATE   TABLE [ IF NOT EXISTS ]    `表名`   (
    
	`字段名1`    列类型 [ 属性 ]  [ 索引 ] [注释] ,
	 `字段名2`   列类型 [ 属性 ]  [ 索引 ] [注释] , 
	… …    
         `字段名n`   列类型 [ 属性 ]  [ 索引 ] [注释] 

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

-- 表列类型设置
-- [ 属性 ]  [ 索引 ] [注释] 

数据字段属性

  • UNSIGNED
    • 无符号的
    • 声明该数据列不允许负数
  • ZEROFILL
    • 0填充的
    • 不足位数的用0填充,如int(3),5则为005
  • AUTO_INCREMENT
    • 自动增长的,每添加一条数据,自动在上一个记录数上加1
    • 通常用于设置主键,且为整数类型
    • 可定义起始值和步长
  • NULL 和 NOT NULL
    • 默认为NULL,即没有插入该列的数值
    • 如果设置为NOT NULL,则该列必须有值
  • DEFAULT
    • 默认的
    • 用于设置默认值
      • 例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值

数据字段注释

CREATE   TABLE [ IF NOT EXISTS ]    `test`   (
      `id`   int (11)  UNSIGNED  COMMENT   ‘编码号’
)COMMENT=‘测试表’;

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

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

-- 表列类型设置
-- [  表类型 ]

/*
CREATE TABLE  表名(
	#省略一些代码
) ENGINE =  MyISAM
-- 或者
CREATE TABLE  表名(
	#省略一些代码
) ENGINE =  InnoDB
*/
  • MySQL的数据表的类型

    • MyISAM、InnoDB 、HEAP、BOB、CSV等
  • 常见的MyISAM与InnoDB类型

    • 名称 MyISAM InnoDB
      事务处理 不支持 支持
      数据行锁定 不支持 支持
      外键约束 不支持 支持
      全文索引 支持 不支持
      表空间大小 较小 较大,约2倍
MySQL注释

**#…… 单行注释 **

/……/ 多行注释

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

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

-- 表列类型设置
--  [ 表字符集 ] 

/*
-- 创建时通过命令来设置
CREATE TABLE  表名(
	#省略一些代码
)CHARSET  =  utf8;

-- 如无设定,则根据MySQL数据库配置文件my.ini
-- (Windows系统)中的参数设定   如:character-set-sever = utf8   


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

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

-- 表列类型设置
-- [ 索引 ]

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

InnoDB类型数据表只有一个*.frm文件,数据文件为上一级目录的 ibdata1 文件

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

修改数据表

修改表名

ALTER TABLE 旧表名  RENAME AS  新表名

添加字段

ALTER TABLE 表名   ADD 字段名   列类型 [ 属性 ]   

修改字段

ALTER TABLE 表名   MODIFY 字段名   列类型 [ 属性 ]  

ALTER TABLE 表名   CHANGE 旧字段名  新字段名   列类型 [ 属性 ]

删除字段

ALTER TABLE 表名   DROP  字段名

删除数据表

 DROP  TABLE  [ IF  EXISTS ]   表名
  • IF EXISTS 为可选,判断是否存在该数据表
    索引文件



### 修改数据表

**修改表名**

```sql
ALTER TABLE 旧表名  RENAME AS  新表名

添加字段

ALTER TABLE 表名   ADD 字段名   列类型 [ 属性 ]   

修改字段

ALTER TABLE 表名   MODIFY 字段名   列类型 [ 属性 ]  

ALTER TABLE 表名   CHANGE 旧字段名  新字段名   列类型 [ 属性 ]

删除字段

ALTER TABLE 表名   DROP  字段名

删除数据表

 DROP  TABLE  [ IF  EXISTS ]   表名
  • IF EXISTS 为可选,判断是否存在该数据表
  • 如删除不存在的数据表会抛出错误
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐