09_02、基本SQL语句、数据类型与存储引擎
一、基本SQL语句
1、创建表的完整结构
create table 表名 ( 字段名1 数据类型 约束条件 约束条件 约束条件, 字段名2 数据类型 约束条件 约束条件 约束条件, 字段名3 数据类型 约束条件 约束条件 约束条件, 字段名4 数据类型 约束条件 约束条件 约束条件 );
注意事项:
1. 字段名和数据类型是必填项
2. 约束条件是可选的
3. 在最后一个字段的后面不能加逗号
2、库的增删改查(文件夹)
# MySQL是一款远程操作文件的软件 # 增 create database db1; # 增加db1文件夹(库) create database db2 charset='utf8'; # 增加文件夹db2并指定utf8编码 # 查 show databases; # 查看所有文件夹(库) show create database db1; # 查看指定单个文件夹db1的详细设定信息 # 改 alter database db2 charset='gbk'; # 修改指定文件夹db2为指定编码utf8 # 删 drop database db2; # 删除指定文件夹db2
3、表的增删改查(文件)
操作表(文件)的时候,需要指定所在的库(文件夹)
# 查看当前所在库的名字 select database(); # 切换库 use db1; # 增 create table t1(id int,name char(4)); # 增加表1 # 查 show tables; # 查看当前库下面所有的表名 show create table t1; # 查看单个指定表表1的详细信息 describe t1; # 支持简写 desc t1; # 改 alter table t1 modify name char(16) # 删 drop table t1; # 删除指定表1 # 通过用绝对路径形式操作不同的库 create table db2.t1(id int);
4、表字段的操作
# 1.添加表字段 alter table 表名 add 字段名 字段类型 约束条件; # 默认尾部追加 alter table 表名 add 字段名 字段类型 约束条件 after 已经存在的字段名; alter table 表名 add 字段名 字段类型 约束条件 first; # 了解 # 2.修改字段 """modify只能改字段数据类型完整约束,不能改字段名,但是change可以!""" ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [完整性约束条件…]; # 3.删除字段 ALTER TABLE 表名 DROP 字段名;
5、数据的增删改查(一行行数据)
必须先有库,再有表,最后才有数据
# 1. 查看 select * from t1; # 2. 插入数据 insert into t1 (id, name) values (1, 'ly'); # 插入单条数据 insert into t1 (id, name) values (2, 'tom'), (3, 'kevin'); # 批量插入数据 insert into t1 values (4,'tank'); # 如果与表头一一对应,可以不写表头 insert into t1 (name) value ('ly'); # 缺少则默认为空 # 3. 修改数据 update t1 set name = 'LY' where id=1; # 修改指定id=1的为'LY' # 4. 删除数据 delete from t1 where id=1; # 删除id=1的哪一行 delete from t1; # 删除表格t1,保留表头 truncate t1; # 清空表t1,保留表头
二、SQL语句的数据类型
1、整型
整型包括:tinyint, smallint, int, bigint
区别是存储数据的范围不一样
# 验证:默认情况带不带符号
create table t5 (id tinyint);
create table t5 (id int);
insert into t5 (id) values (-129), (128);
'''结论:默认带符号'''
注意:整型的存储大小取决于类型,而不取决于括号里面的数字,而字符串的话是取决于括号里面的数字。(eg: varchar(32))
2、浮点型
float(255, 30) # 代表总共255位,小数占30位
double(255, 30) # 代表总共255位,小数占30位
decimal(65, 30) # 代表总共65位,小数占30位
# 区别:
# 精度不一样
# decimal > double > float
# 验证
create table t6 (id float(255, 30));
create table t7 (id double(255, 30));
create table t8 (id decimal(65, 30));
# 插入数据
insert into t6 values (1.11111111111111111111111);
insert into t7 values (1.11111111111111111111111);
insert into t8 values (1.11111111111111111111111);
3、字符串
char(4) #
# 字符串类型,存储的范围是4个字符,超过了直接报错,不超过按照4个字符存(存储较快,但不常用)
varchar(4)
# 字符串类型,存储的范围是4个字符,超过了直接报错,不超过有几个存几个(存储较慢,但兼容性好,比较常用)
# 验证
create table t9 (id int, name char(4));
create table t10 (id int, name varchar(4));
# 插入数据
insert into t9 (id, name) values(1, 'kevin');
insert into t10 (id, name) values(1, 'kevin');
4、日期
datetime 年月日,时分秒(一般用这种)
date 年月日
time 时分秒
year 年份
# 验证
create table t11 (id int,
reg_time datetime,
reg1_time date,
reg2_time time,
reg3_time year
);
# 插入数据
insert into t11 values(1, '2022-1-1 11:11:11', '2022-01-02', '11:11:11', '2022');
5、枚举和集合
枚举:多个里面选一个
# 验证
create table t12 (
id int,
gender enum('男', '女', 'other')
);
insert into t12 values (1, '男');
集合:多个里面选多个
# 验证
create table t13 (
id int,
hobby set('music', 'read', 'xj')
);
insert into t13 values (1, 'music');
三、存储引擎
1、定义及用途
存储引擎是存储数据的方式
存储引擎决定存储数据的方式不同
2、查看所有存储引擎
MySQL提供了多种数据引擎,命令:show engines;
3、MySQL常见的存储引擎
1. MyISAM # 是mysql5.5及之前的版本默认的存储引擎 存储的速度快,相对于InnoDB '''不支持事务,支持表锁''' 2. InnoDB # 是mysql5.6之后的版本默认的存储引擎 存储速度慢,相对于MyISAM ''' 支持事务,行锁,外键''' 3. MEMORY # 数据存储在内存中,一旦断电,数据立马丢失,或者数据重启也丢失
验证三种存储引擎
# 用三种存储引擎分别创建三张表 create table t2 (id int) engine=MyISAM; create table t3 (id int) engine=InnoDB; create table t4 (id int) engine=MEMORY;
# 插入数据验证 insert into t2(id) values(1); insert into t3(id) values(2); insert into t4(id) values(3);
# 重启客户端t4表不再存在
# 可以证明t4存在于内存中,重启后消失
4、各个存储引擎的存储文件
MyISAM的存储文件个数3个: 1. .frm # 存储数据的表结构 2. .MYI # 存索引 >>> 类似于书的目录 3. .MYD # 存储表数据 InnoDB的存储文件个数2个: 1. .frm # 存储表结构 2. .ibd # 存储数据和索引的 Memory的存储文件个数1个: 1. .frm # 存储表结构的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通