MySQL:表操作&数据类型
创建表
create table 表名(
列名 列属性 comment `对列的描述`,
第二列 不能带逗号
)character set 字符集 collate 检验集 engine 存储引擎
- 右括号的这些可以省略,采用数据库的默认字符集和检验集
- 表括号内的结构,像结构体的定义,只不过名字在左类型在右
不同的存储引擎在存储表的时候,生成的数据库文件个数不同
表修改
增加表的列
alter table 表名 add 列名 列属性 comment `解释` after 列名2
向列名2后插入新列
修改表中的列属性字段
alter table 表名 modify 列
删表的某列
alter table 表名 drop
修改表的列名
alter table 表名 change 旧列名 新列名 列属性 comment `解释`
修改表名
alter table 旧表名 rename 新表名
删除表
drop table 表名
数据类型
1整形
tinyint | 1字节 |
---|---|
smallint | 2 |
int | 4 |
bigint | 8 |
默认是有符号整数
create table t1(
num tinyint unsigned
);
- 插入越界数据就会被mysql拦截,数据类型本身也是一种约束
- 加了unsigned就变成无符号类型了
2位类型
bit(M): 位类型,M代表指定的位数
默认是1位,最多64位
3浮点类型
float(m,d):m代表浮点数数字总个数,d代表小数个数
小数位大于d会四舍五入
double和float一样
decinmal(m,d)
float在存一些大数据时,精度会不准确
他精度更高
4字符串类型
char(L):存固定长度的字符串,L是可以存储的长度,单位是字符,最大长度是255个字符
- utf8中,一个汉字占三个字节,gdk一个汉字占两个字节
- mysql中的一个字符和C中的不一样
varchar(L):变长字符
串,L表示字符长度,最大是65535个字节,21845个字符(utf8下是这么多,因为一个字符是3个字节大小)
verchar和char的区别:
- char是固定长度字符串,类似C中定义一个固定大小的数组
varchar类似string,string的上限是capacity,size是当前有效元素的个数- char(6),代表能存6个字符,存6个以内的字符,都是占18个字节
- varchar(6),上限是6个字符,存一个字符就占3字节
varchar有1-3个字节记录数据大小
所以varchar定义成21845时,是会报错的
abcd | a | |
---|---|---|
char(4)占用字节 | 4*3=12 | 4*3=12 |
varchar(4)占用字节 | 4*3+1=13 | 1*3+1=4 |
varchar用于存储起伏比较大的字符串
5日期和时间类型
日期:年月日
时间:时分秒
date:日期,占3字节
datetime:日期时间,占8字节
timestamp:时间戳,占4字节
对时间戳列进行更改,不用做任何操作,会自动更新成当前时间
插入格式 insert into 表名(date datetime) values (‘2000-01-01’, ‘2000-01-02 08:00:00’);
枚举和集合
enum:有多个类型,多选一
set:有多个选项,多选多
(
gender enum(‘男’, ‘女’)
)
在插入的时候只能是男,女或者1,2
对于set,插入数字,数字代表的是位图
查找表
- select * from表名
查找表中插入的所有数据- select * from 表名 where gender=‘男’
查找enum值是男的信息- select * from 表名 where find_in_set(‘羽毛球’, hobby)
查找set中有羽毛球的信息
- select find_in_set(‘a’, ‘a,b,c,’)
在第二个参数中查a是否存在
- desc 表名
查看表有多少列属性