这学期也是刚开MySQL,感觉有点意思。希望我的学习笔记可以将我们带入MySQL的大门。是的,这其实是一篇笔记。
1. 什么是SQL
结构化查询语言(Structured Query Language,简称SQL)是一种特殊目的的编程语言,主要用于数据库查询和程序设计,用于存取数据以及查询、更新和管理关系数据库系统。SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式。
SQL主要分为四大类:
- 数据定义语言,数据操作语言,数据查询语言,数据控制语言
名称 | 描述 | 命令 |
---|---|---|
数据定义语言(DDL) | 数据库、数据表的创建、修改和删除 | CREATE、ALTER、DROP |
数据操作语言(DML) | 数据的增删改 | INSERT、UPDATE、DELETE |
数据查询语言(DQL) | 数据的查询 | SELECT |
数据控制语言(DCL) | 用户授权、事务的提交和回滚 | GRANT、COMMIT、ROLLBACK |
MySQL是一个开源的关系型数据库管理系统(RDBMS)。它使用结构化查询语言(SQL)进行数据操作,包括数据的查询、插入、更新和删除等。MySQL是最流行的开源数据库之一,被广泛应用于网页应用开发。
MySQL的特点有:
- 开源:MySQL是开源软件,这意味着任何人都可以查看和贡献其源代码。这使得MySQL能够得到全球开发者社区的支持。
- 性能:MySQL是高性能的系统,它使用各种优化技术来提供快速、高效的查询处理。
- 可扩展性:MySQL可以处理从小型项目到大型企业应用的各种数据需求。
- 安全:MySQL提供了多种安全特性,包括密码加密和网络访问控制,以保护数据的安全。
- 多平台支持:MySQL可以在多种操作系统上运行,包括Windows、Linux和Mac OS。
- 丰富的功能:MySQL支持大多数SQL标准的功能,包括事务、存储过程、触发器和视图等。
2. 数据库操作
2.1 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名称 DEFAULT CHARACTER SET 字符集 COLLATE 排序规则;
[]
内为可选项,选择时需去掉。
2.2 修改数据库
ALTTER DATABASE 数据库名称 CHARACTER SET 字符集 COLLATE 排序规则;
2.3 删除数据库
DROP DATABASE [IF EXISTS] 数据库名称;
2.4 查看数据库
SHOW DATABASES;
2.5 使用数据库
USE 数据库名称;
3. 列类型
数据库创建数据表类型时要指定列类型,常用列类型主要分为:数值类型、日期时间类型、字符串类型。
3.1 数值类型
类型 | 说明 | 取值 | 存储 |
---|---|---|---|
tinyint | 非常小 | 有符号 − 2 7 -2^7 −27$2^7-1$<br>无符号$0$ 2 8 − 1 2^8-1 28−1 | 1字节 |
smallint | 较小 | 2字节 | |
mediumint | 中等大小 | 3字节 | |
int | 标准整数 | 4字节 | |
bigint | 较大整数 | 8字节 | |
float | 单精度浮点数 | 4字节 | |
double | 双精度浮点数 | 8字节 | |
decimal | 字符串形式的浮点数 | decimal(m, d) | m个字节 |
decimal中,m表示总共占多少位,d表示小数位数
具体取值与字节相关,计算方式与其他语言基本相同
3.2 日期时间类型
类型 | 格式 |
---|---|
DATE | YYYY-MM-dd |
TIME | HH:mm:ss |
DATETIME | YY-MM-dd HH:mm:ss |
TIMESTAMP | YYYY-MM-dd HH:mm:ss格式表示的时间戳 |
YEAR | YYYY格式的年份值 |
日期时间类型也有范围,有兴趣自行搜索
3.3 字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char[(M)] | 定长字符串,检索快但非空间, 0 ≤ M ≤ 255 0\leq M\leq255 0≤M≤255 | M字符 |
varchar[(M)] | 可变字符串 0 ≤ M ≤ 65535 0\leq M \leq 65535 0≤M≤65535 | 变长 |
text | 文本串 | 2 16 − 1 2^{16}-1 216−1字节 |
3.4 列类型修饰属性
属性名 | 说明 | 示例 |
---|---|---|
UNSIGNED | 无符号,只能修饰数值类型,表明该列数据不能出现负数 | UNSIGNED INT(4) ,表示只能为4位大于等于0的整数 |
ZEROFILL | 不足位数用0补充 | INT(4) ZEROFILL ,如果给定的数为10,此时只有2位,则最终值为0010 |
NOT NULL | 该列类型值不能为空 | VARCHAR(20) NOT NULL ,表示该列数据不能为空值 |
DEFAULT | 设置默认值 | INT(4) DEFAULT 0 ,表示该列不赋值时默认为空值 |
AUTO_INCREMENT | 表示自增长,只能应用于数值列类型,列类型必须为键,且不能为空 | INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY 第一次该列中插入值时为1,第二次为2 |
4. 数据表操作
4.1 数据表类型
MySQL中数据表类型很多,如MyISAM
、InnoDB
、HEAP
、BOB
、CSV
等,最常用是MyISAM
和InnoDB
4.2 MyISAM与InnoDB的区别
名称 | MyISAM | InnoDB |
---|---|---|
事务处理 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大 |
事务(ACID):一个事务涉及的所有操作是一个整体,不可分割。
锁定级别:分为行级锁定、页级锁定、表级锁定。用于控制多个事务并发访问数据库中的同一资源,保证数据的一致性和完整性。锁定粒度越小,并发效率越高,资源占用也越高。(MyISAM仅支持表锁定)
外键约束:一个表的主键在另一个表中使用。
全文索引:将存储与数据库中整本书或整篇文章中的任意信息查找出来。
查询效率:MyISAM略快于InnoDB
MySQL5.6版开始,InnoDB也支持全文索引
如何选择?
- 当涉及的业务操作以查询居多,修改和删除较少时,MyISAM。
- 当涉及的业务操作经常会有修改和删除操作时,InnoDB。
4.3 创建数据表
CREATE TABLE [IF NOT EXISTS] 数据表名称(
字段名1 列类型(长度) [修饰属性] [键/索引] [注释],
字段名2 列类型(长度) [修饰属性] [键/索引] [注释],
字段名3 列类型(长度) [修饰属性] [键/索引] [注释],
......
字段名n 列类型(长度) [修饰属性] [键/索引] [注释],
) [ENGINE=数据表类型] [CHARSET=字符集编码] [COMMENT=注释];
例:
CREATE TABLE IF NOT EXISTS student(
'number' VARCHAR(30) NOT NULL PRIMARY KEY COMMENT '学号, 主键',
name VARCHAR(30) NOT NULL COMMENT '姓名',
sex TINYINT(1) UNSIGNED DEFAULT 0 COMMENT '性别: 0-男 1-女 2-其他',
age TINYINT(3) UNSIGNED DEFAULT 0 COMMENT '年龄',
score DOUBLE(5, 2) UNSIGNED COMMENT '成绩'
) ENGINE=InnoDB CHARSET=UTF8 COMMENT='学生表';
4.4 修改数据表
- 修改表名
ALTER TABLE 表名 RENAME AS 新表名;
- 增加字段
ALTER TABLE 表名 ADD 字段名 列类型(长度) [修饰属性] [键/索引] [注释];
- 修改字段
-- MODIFY 只能修改字段的修饰属性
ALTER TABLE 表名 MODIFY 字段名 列类型(长度) [修饰属性] [键/索引] [注释];
-- CHANGE 可以修改字段的名字以及修饰属性
ALTER TABLE 表名 CHANGE 字段名 新字段名 列类型(长度) [修饰属性] [键/索引] [注释];
- 查看表结构
DESC 表名;
- 删除字段
ALTER TABLE 表名 DROP 字段名;
4.5 删除数据表
DROP TABLE [IF EXISTS] 表名;