目录
1. 表的操作;
2. 数据类型;
1. 表的操作:
1.1 创建表:
语法: create table 表名(
属性 类型 [comment ' '],
属性 类型 [comment ' '],
属性 类型
) character set 字符集 collate 校验集 engine 存储引擎;
前面博客提到: MyISAM和InoDB这两个比较重要.
1.2 查看表结构:
语法: desc 表名;
1.4 修改表:
修改包括: 增加, 修改, 删除;
(1)增加语法: alter table 表名 add 增加属性 类型 after 原来属性;
(2)修改语法: alter table 表名 modify 原来属性 新类型;
(3)删除语法: alter table 表名 drop 属性;
(4)修改表名:
语法: alter table 表名 rename [to] 新表名;
修改属性及其类型:
语法: alter table 表名 change 旧属性 新属性 新类型;
1.5 删除表:
语法: drop table 表名;
2. 数据类型:
2.1数据类型分类:
2.2 数值类型:
2.2.1 tinyint:
tinyint: 是1个字节, 它的取值范围是 [-128,127]; 超出这个范围就会越界访问,报错.
⭐ 整形可以指定是有符号还是无符号的,默认是有符号的. 关键字: unsigned ;
tinyint 无符号范围是[0,255] ;
🍔 补充: smallint: 2个字节, 那么它的取值范围就是[-2^(n*8-1) , 2^(n*8-1) - 1];
那么就是[-32768, 32767]; 那么无符号取值范围就是[0, 2^(n*8)-1] ; 那么就是[0, 65535];
还有int: 是4个字节, bigint: 8个字节;
2.2.2 bit:
语法: bit(n); 1<= n <= 64; 默认不写就是1;
bit是按照ASCII码进行显示的;
如果想要存放0/1, 那么就可以使用bit(1), 节省空间, 但是插入数据就只能是一位二进制.
2.2.3 float:
语法: float(n,m) [unsigned] n表示指定长度, m是小数点后保留几位. 占用4个字节.
🌰 float(4, 2): 表示就是xx.xx, 并且是有符号的, 保留两位小数. 那么范围就是[-99.99, 99.99];
那么同理float(6, 2) 范围就是[-9999.99, 9999.99].
⭐ 如果插入的数据小数部分还会进行四舍五入, 如果四舍五入之后超过范围会报错, 反之就会成为最大/最小范围值.
再思考一下无符号类型呢? float(4, 2) 范围就是[0, 99.99];
2.2.4 decimal:
decimal的语法使用和float是一样的, 但是decimal的精度是高于float的;
⭐ float的精度最高是7位, decimal的精度最高是65位.
2.2.5 char:
语法: char(n); 最大长度是255; 占1个字节
⭐ 这里的n并不是2个字节, 是字符的个数.
2.2.6 varchar:
语法: varchar(n); 最大长度是65535;占2字节.
⭐ 这里的n的大小是多少? 其实和编码集相关的;
一般还要使用1-3个字符记录数据的大小, 所以就是65532;
如果编码集是utf8, 那么一个字符占3字节, 65532/3=21844;
如果编码集是gbk, 那么一个字符占2字节, 65532/2=32766;
🍋 char和varchar的对比:
char和varchar的不同点就是占用字节的计算, char是根据n来进行计算, varchar是根据具体字符进行计算的.
🌰 abcd 和 A 分别被char(4) AND varchar(4):
char(4): abcd: 4*3 = 12; A: 4*3 = 12;
varchar(4): abcd: 4*3 + 1=13; A: 1*3 + 1= 4;
🍔如何选择定长和变长字符串呢?
a. 长度确定就使用定长, 不确定就变长;
b. 定长磁盘空间浪费, 但效率高; 变长相反;
c. 定长是直接开辟好的空间, 变长是用多少开辟多少.
2.2.7 日期和时间:
(1) date: 日期 'yyyy-mm-dd' 占3个字符;
(2) datatime: 日期格式 'yyyy-mm-dd HH:ii:ss' 占8个字符;
(3) timestamp: 时间戳 , 从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用 四字节;
🍔 update 表名 set 属性=新属性;
2.2.8 enum 和 set:
enum语法: enum('选项1', '选项2', ...);
⭐ 这些值实际存储的是数字, 每个选项值对应一个数字1,2,3,...
set语法: set('选项1', '选项2', ...);
🍔 where和find_in_set: 区别就是where查找完整的, find_in_set查找相关的.