mysql 笔记
1. mysql 基本信息
- 关系型数据库,基于表进行存储
- 关系型数据库与非关系型数据库
2. sql 语句
2.1 sql 语句分类
- DDL (data definition language) 数据定义语言,用来定义数据库对象与,数据库,表,字段
- DML( data manipulation language) 数据操作语言,对表中数据进行增删改
- DQL (data query language) 数据查询语言,查询数据库中表的记录
- DCL (data control language) 数据控制语言,控制数据库的访问权限,创建用户
2.2 DDL-数据库操作
-
查询
# 查询所有数据库 show databases # 查询当前数据库 select database()
-
创建
create database [if not exists] databaseName [defalut charset 字符集] [collate 排序规则] # if not exists 表示如果该名称的数据库不存在,则创建数据库,否则不执行热河操作 # default charset 设置默认字符集 # collate 排序规则 # 示例 CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
collate 介绍
所谓 utf8_unicode_ci,其实是用来排序的规则。对于mysql中那些字符类型的列,如 VARCHAR,CHAR,TEXT 类型的列,都需要有一个 COLLATE 类型来告知 mysql 如何对该列进行排序和比较。简而言之,COLLATE 会影响到 ORDER BY 语句的顺序,会影响到 WHERE 条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。另外,mysql 建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都会和 COLLATE 有关。
各种 COLLATE 的区别
COLLATE 通常是和数据编码(CHARSET)相关的,一般来说每种 CHARSET 都有多种它所支持的 COLLATE,并且每种 CHARSET 都指定一种 COLLATE 为默认值。例如 Latin1 编码的默认 COLLATE 为 latin1_swedish_ci,GBK 编码的默认 COLLATE 为 gbk_chinese_ci,utf8mb4 编码的默认值为 utf8mb4_general_ci。
这里顺便讲个题外话,mysql 中有 utf8 和 utf8mb4 两种编码,在 mysql 中请大家忘记utf8,永远使用utf8mb4。这是 mysql 的一个遗留问题,mysql 中的 utf8 最多只能支持 3bytes 长度的字符编码,对于一些需要占据 4bytes 的文字,mysql 的 utf8 就不支持了,要使用 utf8mb4 才行。
很多 COLLATE 都带有_ci 字样,这是 Case Insensitive 的缩写,即大小写无关,也就是说”A”和”a”在排序和比较的时候是一视同仁的。selection * from table1 where field1=”a”同样可以把 field1 为”A”的值选出来。与此同时,对于那些_cs 后缀的 COLLATE,则是 Case Sensitive,即大小写敏感的。
在 mysql 中使用 show collation 指令可以查看到 mysql 所支持的所有 COLLATE。以 utf8mb4 为例,该编码所支持的所有 COLLATE 如下图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M1TdJ1K4-1649400335244)(upload/image-20220403174107760.png)]
-
删除
drop database [if exists] databaseName; # if exists 如果数据库不存在删除不会报错,如果没有这条语句,删除不存在的数据库会报错 drop database test; drop database if exists test
-
使用
use databaseName # 使用node数据库 use node
2.3 DDL 表操作
-
查询
# 查询当前数据库所有表 show tables; #查询表结构 desc tableName;
-
创建表
create table tableName( #字段1 类型 [comment 注释] .... );
-
修改表
- 添加字段
# 添加字段 alter table tableName add 字段名 类型(长度) comment 备注 # 示例 alter table user add nickname varchar(10) comment 'test'
-
修改数据类型
alter table 表名 modify 字段名 新数据类型长度; # 将test字段数据类型修改为varchar(3) alter table user modify test varchar(3);
-
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]; #将test 字段修改为 email 类型varchar(12) alter table user change test email varchar(12);
-
修改表名
alter table 表名 rename to 新表名 # 修改表名为test alter table user rename to test;
-
删除字段
alter table 表名 drop 字段名 # 删除dotsa 字段 alter table user drop dotsa;
-
删除表
drop table [if exists] 表名; 删除表; drop table test; truncate table 表名; 删除指定表,并重新创建该表,相当于清空表数据 truncate table test;
2.4 mysql 数据类型
-
数值类型
数值类型区分有符号类型(signed)和无符号类型(unsigned)
有符号类型可以存负数,无符号类型只能存正数
int bigint 大整数 tinyint 极大整数 mediumint 大整数 float 浮点数 double 双精度浮点数 decimal 小数值
-
字符串类型
char 定长字符串 0-255 ,性能好,不足长度会填空空格 varchat 变长字符串 性能差,超过长度会报错 tinyblob 不超过255字节的二进制数据 tinytext 短文本字符串 blob 0-65535 text 短文本 0-65535 mediumblob mediumtext 中等长度文本 langblob langtext 长文本 0-4294967295 blob 类型一般很少使用
-
日期类型
date 日期值 time year datetime timestamp