版权声明:本文为博主原创文章,转载请标注出处:http://blog.csdn.net/EnigmCode。 https://blog.csdn.net/EnigmCode/article/details/78973559
数据类型
数字
tinyint 1字节
smallint 2字节
int 4字节
bigint 8字节
float 4字节
double 8字节
decimal/numeric 定点浮点数,可以做精确计算
decimal(6,2)代表整数4位,小数2位,总共6位
整数超出范围,可能报错,小数超出范围,回四舍五入
unsigned标识,表示无符号数
字符串
char
char(20)定长20字符串,超出长度,可能出错或截断,长度不足,自动填补空格,最大长度255,效率较高
varchar
varchar(20)变长字符串,最大不超过指定长度20字节,若指定的最大长度在255以内,前面需要一个字节来表示长度;若指定的最大长度大于255字节,前面需要两个字节来表示长度;
指定长度最大不能超过65535字节,
一般用vachar保存255以内的字符串
text
65535字节,只占用表总字节量的10个字节
blob
超大对象数据,要使用流来读写blob数据
通常不用blob来保存文本
日期时间
datetime 年月日时分秒
date 年月日
time 时分秒
timestamp 时间戳,年月日时分秒,最大只到2038年,修改一行数据时,第一个timestamp字段会自动更新为当前系统时间
一般不会使用
约束
对一个字段的取值进行相关限制
主键约束
作用:用来唯一标识一行数据
唯一、不重复、非空,
会自动生成索引
一般不使用与业务相关的数据作为主键,而是采用无意义的数据作为主键
语法格式:
添加主键
创建表时:
create table 表名(
字段 类型 primary key,
...
);
create table 表名(
字段 类型 ,
...
primary key(字段)
);
create table 表名(
字段 类型,
...
primary key(字段1,字段2...)--组合主键、联合主键
);
修改表时:
alter table 表名 add primary key(字段);
查看主键
desc 表名;
show create table 表名\G;
删除主键
alter table 表名 drop primary key;
自增主键
在自增主键填入null时,自动填入自增值;可以手动设置自增主键的值,同时若手动设置的值是表中的最大值则下一个自增值将会从此值开始,自增主键值不能回退。
添加自增 auto_increment
建表时:
create table 表名(
字段 类型 primary key auto_increment,
...
);
修改表时(前提字段必须是主键):
alter table 表名 modify 主键字段 类型 auto_incremen;
取消自增(前提字段必须是主键,不会删除主键):
alter table 表名 modify 主键字段 类型;
查询刚插入的数据生成的主键值
使用函数:last_insert_id()
select last_insert_id();
注意:只获取当前数据库连接所插入的id值
外键约束
创建外键
建表时:
create table 表名(
...
外键字段名 类型
...
foreign key(外键字段名) references 引用表名(引用主键)
);
修改表:
alter table 表名 add foreign key(外键字段名) references 引用表名(引用主键);
查看外键
show create table 表名;
删除外键
1.查看外键的约束名,
2.alter table 表名 drop foreign key 约束名;
外键也会自动创建索引,删除外键不会自动删除外键的索引,需要单独删除。
1.查看外键索引的约束名,
2.alter table 表名 drop index 约束名;
非空约束
添加非空约束
建表时:
create table 表名(
...
字段 类型 not null,
...
);
修改表:
alter table 表名 modify 字段 类型 not null;
取消非空约束(前提是该字段,已经被非空约束)
alter table 表名 modify 字段 类型 null;
唯一约束
字段值的取值不能有重复,但是允许有重复的null值;
会生成索引
添加唯一约束
建表时:
create table 表名(
...
字段 类型 unique,
...
);
create table 表名(
...
字段 类型,
...
unique(字段1,字段2...)--字段组合不重复
);
修改表:
alter table 表名 modify 字段 类型 unique;
alter table 表名 add unique(字段1,字段2...);
查看唯一约束
desc 表名;
show create table 表名\G;
通过库信息表来查看
use information_schemal;
select * from table_constraints[where table_name='表名'];
取消唯一约束
alter table 表名 drop index 索引名;
检查约束
通过设置字段取值条件,来限制字段的取值
mysql支持检查约束的语法,但是没有实现这个约束,mysql不会检查约束条件
创建表时:
create table 表名(
...
字段...
字段...
...
chek(字段所要满足的检查条件)
);
默认值
直接在字段的后面添加default 默认值,
eg:age int default 1,
在表的结构中保留字段的注释信息
create table 表名(
...
字段 类型 comment('注释内容')
...
);
可以通过: show create table表名\G;查看到注释信息。
表与表之间的关系:
一对一
具有唯一约束的外键来实现,既是主键也是外键的字段
一对多
通过从多个表中添加多个外键
多对多
需要一种中间表,添加两个外键字段,分别引用两张表的主键