一、操作数据库
1.创建数据库 create
# create database 数据库名称;
create database school;
2.选择数据库 use
# use 数据库名称;
use school;
3.查看数据库 show
# show databases;查看所有的数据库
show DATABASES;
注:不要省略“s”
4.删除数据库 drop
# drop database 数据库名称;
drop database school;
二、数据库表的字段类型
1.字符串类型
类型 | 说明 | 取值范围 |
---|---|---|
char(M) | 固定字符串 | M字符 |
varchar(M) | 可变字符串 | 变长度 |
tinytext | 微型文本串 | |
text | 文本串(4个G左右大小) |
char和varchar比较:
类型 | 特点 | 空间上 | 时间上 | 适用场景 |
---|---|---|---|---|
char(M) | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
varchar(M) | 可变长度 | 节省存储空间 | 效率低 | 非char的情况 |
2.数值类型
类型 | 说明 |
---|---|
tinyint | 非常小的数据 |
smallint | 较小的数据 |
mediumint | 中等大小的数据 |
int | 标准整数 |
bigint | 较大的整数 |
float | 单精度浮点数 |
double | 双精度浮点数 |
decimal | 字符串形式的浮点数,decimal(m,d):m:总长度,d:小数位数 |
3.日期和时间类型
类型 | 说明 |
---|---|
datetime | YY-MM-DD hh:mm:ss |
NULL类型:
- 本身没有值
- MySQL中,0或NULL都意味着假,1意味着真
三、数据库表的相关操作
1.创建数据表 create table
语法结构:
create table 表名(
字段名 类型 属性,
字段名 类型 属性,
……
字段名 类型 属性
);
create table student(
stu_name varchar(10),
stu_age tinyint,
stu_birthday datetime,
stu_id char(18),
stu_score decimal(4,1)
);
2.查看表结构
- 查看表中字段
方式一:desc 表名
desc student;
方式二:show create table 表名,出现表后,全选、复制、粘贴,可显示执行语句的具体实现方式
show create table student;
其中:
- 反引号``:取消特殊性,即`table`也能做表名;
- DEFAULT NULL:默认为空,可以不写值;
- DEFAULT CHARSET=utf8mb4:默认字符集utf8mb4;
- COLLATE=utf8mb4_0800_ai_ci:字符排序;
- ENGINE=InnoDB:存储引擎,即根据制定好的规则存储数据。
- 查找所有引擎
show engines;
数据库存储引擎——InnoDB
- InnoDB是MySQL的默认事务型引擎,被设计用来处理大量的短期事物,可以确保事物的完整提交和回滚。
- 需要进行增加、查询、更新和删除操作,应优先选择InnoDB存储引擎。
- 除特殊原因需选择其他引擎,否则应该考虑InnoDB引擎。
- 数据文件结构:
表名.frm存储表结构;
表名.ibd存储数据和索引以及表结构。
- InnoDB是为处理巨大数据量的最大性能设计;
- 相比较MyISAM而言,InnoDB写的效率会差一些,并且占用更多的磁盘空间来保存数据和索引;
- InnoDB不仅缓存索引还缓存真实数据。
数据库存储引擎——MyISAM
- MyISAM提供了大量的特性,如:全文索引、压缩等,但MyISAM不支持事务、行级锁、外键,缺点是崩溃后无法完全恢复;
- 优势是访问的速度快,但增、删、改速度慢;
- 数据文件结构:
表名.frm存储表结构;
表名.MYD存储数据;
表名.MYI存储索引。
- 适用于只读应用或者以读为主的业务;
- MyISAM只缓存索引。
对比项 | MyISAM | InnoDB |
---|---|---|
外键 | 不支持 | 支持 |
事物 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也是锁住整个表,不适合高并发操作 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还缓存真实数据,对内存要求高,而且内存大小对性能有决定性的影响 |
默认安装 | Y | Y |
默认使用 | N | Y |
关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写。事务、更大资源 |
3.表结构的修改
alter table 表名 关键词 数据;
- 修改表名
alter table 旧表名 rename as 新表名
alter table student rename as xuesheng;
将student表的名字改为xuesheng
- 添加字段
alter table 表名 add 新字段名 类型 属性;
alter table xuesheng add stu_qq varchar(20) comment '这是学生的QQ号';
为xuesheng表添加新字段stu_qq,并注释“这是学生的QQ号”
- 删除字段
alter table 表名 drop 字段名;
alter table xuesheng drop stu_qq;
删除字段名stu_qq
- 修改字段(覆盖式修改)
1.有一定的默认值,default NULL;
2.如果已经存在具体的数据无法覆盖,要修改要确保数据式可以做隐式转换,不能转换的都不能改,否则就会报错。
如:qq号都是数字时,就可以把varchar(字符串)类型变为int类型;
varchar(10)可以改为int(10),但int(10)再改为varchar(10)时,就会报错。
方式一:modify 只能修改数据类型和属性
alter table 表名 modify 字段名 要修改的类型 要修改的属性;
方式二:change 可以修改数据类型、字段名、属性
alter table 表名 change 旧字段名 新字段名 要修改的类型 要修改的属性;
#要添加一个外国人的名字
alter table xuesheng modify stu_name varchar(100);
#查看表中的具体内容
CREATE TABLE `xuesheng` (
`stu_name` varchar(100) DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_score` decimal(4,1) DEFAULT NULL,
`stu_qq` varchar(20) DEFAULT NULL COMMENT '这是学生的QQ号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
#将stu_qq字段的字段名改为qq
alter table xuesheng change stu_qq qq varchar(20) comment '这是qq号';
#查看表中的具体内容
CREATE TABLE `xuesheng` (
`stu_name` varchar(100) DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_score` decimal(4,1) DEFAULT NULL,
`qq` varchar(20) DEFAULT NULL COMMENT '这是qq号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
- 删除表
drop table 表名;
drop table xuesheng;
删除表,不仅会删除表的数据,还有索引,以及表结构。