文章目录
创建
sql
create table table_name (
field1 datatype,
field2 datatype,
field3 datatype
) charset 字符集 collate 校验规则 engine 存储引擎;
其中field 表示列名,datatype表示列的类型,字符集、校验规则、存储引擎不指明则默认为配置文件里写好的。
sql
create table if not exists user1(
name varchar(20) comment '用户名',
password char(32) comment '密码',
birthday date comment '生日'
)charset=utf8 collate utf8_general_ci engine MyIsam;
comment 后面代表着这一列数据的说明
删除表
sql
drop table table_name;
查看
sql
show tables;
可以查看当前数据库里的所有表
sql
desc table_name;
查看指定一张表的详细属性
Field:字段名
Type:字段类型
Null:是否可以为空
Key:索引类型
Default:默认值
Extra:扩充
修改
重命名表
sql
alter table table_name rename to new_name;
新增列
sql
alter table table_name add 字段名 字段类型 after 字段名
after 字段名 代表着在指定的列后面新增
修改列的属性
sql
alter table table_name modify 字段名 字段属性
修改的本质是将新的属性直接覆盖旧的属性
删除列
sql
alter table table_name drop 字段名;
修改列名
sql
alter table table_name change 旧列名 新列名 列的属性;
注意:修改列名不仅要把新的列名输入,列的属性也一定要带上
插入数据
sql
insert into table_name values(Field1, Field2...);
values后面带的是需要插入的数据,并且以逗号为分割按列插入
数据类型
分类 | 数据类型 | 说明 |
---|---|---|
bit | 位类型,显示时按照ASCLL码对应的值显示 | |
tinyint --- [unsingd] | 带符号范围:-128~127,不带符号:0~255,默认有符号 | |
bool | 0和1表示真假 | |
smallint --- [unsingd] | 带符号范围:-2^15~2^15-1,不带符号:0~2^16-1,默认有符号 | |
int --- [unsingd] | 带符号范围:-2^31~2^31-1,不带符号:0~2^32-1,默认有符号 | |
bigint --- [unsingd] | 带符号范围:-2^63~2^63-1,不带符号:0~2^64-1,默认有符号 | |
float(M, D) --- [unsingd] | M指定显示长度,D指定小数位数,占用4字节 | |
double(M, D) --- [unsingd] | 比float精度更大的小数,占用8字节 | |
decimal(M, D) --- [unsingd] | M指定显示长度,D指定小数位数 | |
char(size) | 固定长度字符串,最大255 | |
varchar(size) | 可变长度字符串,最大65535 | |
blob | 二进制数据 | |
text | 大文本,不支持全文索引,不支持默认值 | |
date/datetime/timestamp | 日期类(yyyy-mm-dd)/(yyyy-mm-dd hh:mm:ss)/timestamp表示时间戳 | |
enum | 枚举类型 | |
set | 可以有0或者多个值,其值来自表创建是规定的列值 |
enum和set
enum属性定义值必须要在创建表时定义enum里的字段中,例如上面的 男和女 ,因此如果想插入数据enum的值必须在男和女中。其中不仅可以直接定义为男和女,也可以根据下标。如上定义的表中,顺序是 男,女。所以对应男的下标为1,女的下标为2,注意下标是从1开始的。
插入数据的set同样也必须在定义的set集合中,但是set并没有下标,而是对应比特位。例如上面定义的 篮球,羽毛球,游泳。则当设置为1时,也就是001,所以对应的就是篮球,为2时,010对应的就是羽毛球。如果为3,011,则代表着篮球和羽毛球两个,set是一个集合可以设置多个
enum和set的查找
enum直接根据属性即可查询,也可以根据下标
set的循环是一个严谨匹配的,可能会有包含了两个set属性的数据,但是如果只是指明的去查询并不会查到。
因此想要查询set中包含了某个属性就要使用 find_in_set 这个函数