数据库基础知识
创建和查看数据库
sql
create database 数据库名称; # 创建数据库
show databases; #查看数据库
show create database 数据库名称;# 查看数据的的详细信息
修改数据库
sql
alter database 数据库名称 default character set utf-8 collate utf-8_bin;
# 更改数据库的编码是utf-8
删除数据库
plsql
drop database 数据库名称;
数据类型
整型
- TINYINT 1byte
- SMALLINT 2byte
- MEDIUMINT 3byte
- INT 4byte
- BIGINT 8byte
通用使用int,再就是bigint,一个byte的取值范围是 28,无符号位为0255,有符号位-128127;
smallint的范围是216=65535,
浮点型和定点数类型
- float 4byte
- double 8byte
- decimal(m,d) 定点数据类型
decimal(6,2):总位数6位,小数位2位;
日期与时间类型
- year 年
- date 年-月-日
- time 时:分:秒
- datetime YYYY-MM-DD HH:MM:SS
- timestamp YYYY-MM-DD HH:MM:SS
date
- yyyy-mm-dd
- current_date/now(),表示输入当前系统时间;
time
- 表示时间值,hh:mm:ss;
- D HH:MM:SS,D*24 +HH 是当前的小时数;
- current_date/now(),表示输入当前系统时间;
datetime
- 使用now输入当前系统的日期和时间
timestamp
- 使用current_timestamp 输入系统当前日期和时间
- 输入null时,系统输入当前日期时间
- 无任何输入时,输入当前日期和时间
字符串
字符串
- char 定长
- varchar 可变长
二进制数据
- binary 定长二进制数据
- varbinary 可变长二进制数据
Text
0~65535Byte
大文本类型,文章内容,评论信息等
BLOB
特殊的二进制类型,表示数据量很大的二进制数据;
ENUM
枚举类型
sql
truncate table_test ;
ALTER TABLE db_02.table_test ADD `rank` ENUM ("1","2","3","4");
insert into table_test (id,name,create_data,`rank`) values (12,'dept',now(),1);
select * from table_test tt ;

set类型
同enum类型同理
ENUM和SET类型的区别:
ENUM类型:
- ENUM类型字段只能从定义时的预定义值列表中选择单个值。
- 这个值列表最多可以包含65535个不同的成员。
- 例如,定义为
ENUM("N","Y")的字段,其值只能是"N"或"Y"。- 在内部,MySQL按照定义时的顺序为每个枚举值分配一个数字,从1开始。
- ENUM值在内部以数值形式存储。
SET类型:- SET类型字段可以从定义时的预定义值列表中选择多个值。
- 值列表最多可以包含64个不同的成员。
- 空字符串(
"")也是一个有效的SET值。- 在内部,MySQL为SET中的每个值分配一个位,而不是顺序编号。
- 每个位的值对应一个位位置:第一个值对应位0,第二个值对应位1,依此类推。
- 如果某个位的值为1,则表示该SET值包含对应的预定义值;如果为0,则不包含。
- 如果所有位都清零(即数值形式的SET值为0),则表示该SET字段值为空字符串。
在设计和使用数据库时,了解这些类型的特点和存储方式可以帮助更有效地利用它们。
bit类型
二进制数据存储
数据表的基本操作
创建数据表
sql
CREATE TABLE `table_test` (
`id` int DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`create_data` date DEFAULT NULL,
`rank` enum('1a','2b','3c','4d') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=Inno
查看数据表
- show create table 表名

- desc 表名

修改数据表
使用alter关键字
- 修改表名
alter table 旧表名 rename 新表名 - 修改字段名
alter table 表名 change 旧字段名 新字段名 新数据类型 - 修改字段的数据类型
alter table 表名 modify 字段名 数据类型 - 添加字段
alter table 表名 add 新字段名 新的字段类型 [约束条件] [first|after 已存在的字段名] - 删除字段
alter table 表名 drop - 修改字段的排列位置
alter table 表名 modify 字段名 数据类型 first|after 字段名
删除数据表
drop table 表名,清除所有跟表有关的数据;
表的约束
主键约束 primary key
使用主键约束可以快速定位表中的信息,提高效率,设置主键通过primary key关键字设置,标识唯一标记性记录;
- 单字段主键
字段名 数据类型 primary key
sql
create table example (
id int primary key,
name varchar(255)
);
- 多字段主键
primary key (字段名1,字段名2,···,字段名n)
sql
create table example02 (
id int,
name varchar(255),
primary key(id,name)
);
外键约束 foreign key
外键约束涉及到多表操作
非空约束 not null
非空约束设置字段不能为空,非空约束的关键字为not null;
字段名 数据类型 not null;
sql
create table example (
id int,
name varchar(255) not null
);
唯一约束 unique
唯一约束保证数据表中字段的唯一性,表示表中的字段值不能重复出现,通过关键字unique确定;
sql
create table example (
id int unique,
name varchar(255)
);
场景:
- PK主键适用于 自增场合,数据查询时索引使用,提高sql执行效率;
- unique 唯一键适用于统计登录信息,唯一性信息,可能会被删掉之后再添加 的场景;
默认约束 default
设置默认值,char型设置空,enum类型设置默认值等
字段名 数据类型 default 默认值;
sql
create table example (
id int unique,
name varchar(255) default ' '
);
设置name的默认值为一个空格;
字段自动增加 auto_increment
字段名 数据类型 auto_increment;
sql
create table example (
id int unique auto_increment,
name varchar(255) default ' '
);
正常都是结合pk使用
索引
索引是提高查询效率的一大重要组成;
概念
- 普通索引
由key和index定义的,是MySQL的基本索引类型,可以创建在任何数据类型中,其值的唯一性是由字段本身的约束条件决定的
- 唯一性索引
由unique决定的
- 全文索引
使用fulltext设置全文索引,只支持在char、varchar和text类型,且只允许myISAM存储引擎
- 单列索引
单列索引指在多个字段上创建索引,只有在查询条件中使用第一个字段,这个索引才会被使用;
- 多列索引
空间索引由spatial定义的索引,只能创建在空间数据类型的字段。有4种空间数据类型;
索引虽然可以提高查询速度,但是同时也会占用一些磁盘空间
创建索引的方式
创建表的时候创建
sql
create table 表名(
字段名 数据类型 [约束条件],
字段名 数据类型 [约束条件],
字段名 数据类型 [约束条件]
[unique|fulltext|spatial] index|key [别名] (字段名 [(长度)] [ASC|DESC])
);
create index 在已经创建的表上创建索引
sql
create [unique|fulltext|spatial] index 索引名
on 表名 (字段名 [(长度)] [ASC|DESC])
sql
create index index_id01 on example_tbl01(id);
index是普通索引,需要别的 在前面加上其他关键字;
使用alter table更改建表文的结构,在表上创建索引
sql
alter table 表名 add [unique|fulltext|spatial] index 索引名
on 表名 (字段名 [(长度)] [ASC|DESC])
sql
alter table book add index index_uid(id);
删除索引
使用alter table 删除索引
sql
alter table 表名 drop index 索引名;
alter table table_01 drop index table_idx01;
使用drop index 删除索引
sql
drop index 索引名 on 表名;
drop index table_idx01 on table_01;