数据库类型是方言,不同的数据库类型的名字可能不一致
数字类型
1,整数类型
。int(m)
。bigint(m)
。注m表达长度
int(5);整数最大5位,如果插入数据不足5位时,前面会自动补0.列如:18实际保存时00018
2.浮点数类型
。double(m,n)
.m表示数字的位数(包含整数与小数位数)
列
创建一张person表
create table person( age int(3), money double (7,2) )
money double(7,2)
。monery字段总共有7位数字,其中有2位小数,整数5位
。money最大可以保存的数字;99999.99
insert into person(money)values(99999.99)
。如果指定的数字精度大于可以保存的精度时会进行四舍五入
insert into person (money)values(1234.867) ^7会进行四舍五入
实际插入后,这条记录money字段值为1234.87
。如果指定的数字已经到达可保存的最大值并且精度仍然超过且需要四舍五入会报错
insert into person (money)values(9999.996)
四舍五入后的数字超过了money可以保存的最大值则会报错
3.字符类型
定长字符;char(n)
。n表示长度,单位是字符
。n的最大值为255,char类型最多可以保存255个字符
。定长字符串,每条记录该字段的值在磁盘上创建的空间是固定的,无论实际保存的数据是多大,总会占用指定长度的空间,不足的部分会补充空格。
name chear(10);name字段最多可以保存10个字符,如果实际保存数据时;‘张三’,后面会补充8个空格占用空间
。优点;占用的磁盘空间是固定的,因此查询速度快
。缺点;磁盘空间占用是固定的,因此会出现浪费
4.变长字符
。varchar(n)
。n表示长度,单位是字节
。n的最大值为65535
。实际占用空间仅6个字节
。优点;不会造成磁盘的浪费
。缺点;每条记录占用的磁盘空间不定,因此查询稍慢
。text(n)
。n表示长度,单位是字符
。n的最大值为65535
5.日期类型
。date;保存年月日
。time;保存时分秒
,datetime;保存年月日时分秒
。tlmestamp;时间。保存utc(世界调整时)时间,记录自1970年元旦到到表达的时间所经过的毫秒
列
准备一张表
create table userinfo( id int , username varchar(30), 唯一标识 gender char(1), 姓名 birth datetime , 性别 salary double(7,2) 工资 )
。插入日期类型数据时,如果字段为dateime类型,我们可以使用字符串来表达日期,但是格式必须为“yyyy-MM-dd hh:mm:ss”
注;MM为两为数字的月 mm为两为数字的分
birth出生日期
Insert into uerinfo (id,username,gender,birth,salary) values(1,'张三',‘男’,‘1995-12-21 20:08:23’,5000)
。插入日期类型,如果字段为datetime,字符串指定日期内容可以忽略时分秒
insert into userinfo (id,username,gender,birth,salary) values (z,'李四',‘女’,‘199-7-16’,10000.56)
插入日期类型时,如果字段为datetime,字符串指定日期时不能忽略年月日
错误示范
insert into userinfo (id,username,gender,birth,salary) values (3,‘王五’,‘男’,‘19:26:34’,8000.78)
插入double类型数据时,精度超出部分会进行四舍五入,但是整数超出部分则会直接报错
错误示范
insert into userinfo (id,username,gender,birth,salary) values (3,‘王五’,‘男’,‘1993-08-03’,100000)
6.约束条件
我们为我们添加某些特定的约束条件,这样以来可以限制对表的相关操作,只有满足相应约束条件的操作才可以进行,否则会被数据库拒绝。
主键约束(primary key)
。主键约束每张表只能有一个
。主键约束的特定;该字段的值在整张表中记录都是非空且唯一的
。一般情况下一张表的第一个字段会被施加主键约束,一般名字用“id”
列
create table user1(
id int primary key, 为id字段添加主键约束
name varchar(30),
age int(3)
);
insert into user1 (id,name,age)values(1,'张三',22);
insert into user1 (id,name,age)values(2,‘李四’,36);
。主字段不能插入重复的值
错误示范
insert into user1 (id,name,age)values(1,'王五',34);
不能将null值插入到主键字段中
insert into user1 (id,name,age)values(null,‘王五’,34);
忽略主键字段时,如果主键字段没有默认值也会将null值插入,这也是会报错的,
insert into user(name,age)values(‘王五’,34);
。修改表记录时,也不能将null或重复的值修改到主键字段上
update user1 set id=1 where name=‘李四’update user1 set id=null where id=1;
7.自增
具有主键约束的字段会添加自增,让数据库自行维护该字段的值auto_increment(自动,自增)
。创建表时主键字段添加自增
create table user2( id int primary key auto_increment, name varchar(30), age int(3) )
。修改表时为字段添加自增
修改user1表中的id字段,为其添加主键约束与自增
alter table user change id id int primary key auto_increment;
如果表中字段已经具有了主键约束,则可以单独添加自增
alter table user1 change id id int auto_increment;
。当主键字段具有自增后,插入数据时可以忽略主键字段(id开始自增,不会重复)
insert into user2 (name,age)values(‘张三’,22); insert into user2 (name,age) values('李四',33);
。当字段具有自增时,显示的插入null值是无效的,该字段仍然会自增(不推荐)
insert into user2 (id,name,age)values(null,‘王五’,56)
8.非空约束(not null)
被非空约束修饰的字段,表中每条记录字段的值都不允许为null
列
。创建表是指定非空约束
create table user3( id int primary key auto_increment, name varchar(30) nut null, 为name添加非空约束 age int(3) )
修改表格时,为某字段指定非空约束
alter table user2 change name name varchar(30) not null
非空约束可以在查看表结构时体现出来
desc排序 查看
desc user3
不能将null 值插入到具有非空约束的字段上
错误示范
insert into user3 (name,age)values(null,22);不能显示的将null值插入
。插入数据时,不能忽略具有非空约束的字段
insert into user3 (age)values(22); name没有默认值,不能 为null
。修改表中记录时,也不能将null值修改到具有非空约束的字段上
如果user2的name字段具有非空约束 ; update user2 set name=null where id=1
9.唯一性非空约束(nulque)(唯一)
具有唯一性约束的字段在整张表中每条记录中该字段的值都不允许重复
唯一性约束允许null值,并且每条记录都可以为null
列
。创建表时字段指定唯一性约束
create table user4( id int primary key auto_increment, name varchar(30) unique, age int(3) )
。修改表时可以为字段添加唯一性约束
注意;如果name字段有非空性约束,此时修改字段添加唯一性约束时会取消他的非空约束 alte table user3 change name name warchar(30) unique;
如果不想取消非空约束,需要同时指定
alter table user3 change name name varchar(30) not null unioue;
插入数据是不能将重复的值插入到具有唯一性约束的字段中
insert into user4(name,age)values(‘张三’,22); 成功 insert into user4 (name,age) values('张三',52); 失败
。null值可以被插入到具有唯一性约束的字段中,且可以多次
insert into user4(name,age)values(null,33); 成功 insert into user4(name,age)values (null,45);成功
。修改记录时也不能将重复的值修改到该字段中,null除外
update user4 set name='王五' id=2 上述可以修改update user4 set name=‘张三’ id=2 上述sql会报错,因为张三是重复的值
10,外键约束
外键约束是配合主键字段进行多表关系中所有的约束。
。具有外键约束的字段只能是其关联关的主键字段中含有的值或null
。删除主键字段记录时,除非该条记录主键字段的值在外键字段中没有应对,赋值无法删除
实际开发中外键约束会无形中增加多次不必要的dml操作才能保证数据完整性,这对项目来说是不必要的操作,会带来额外的的开销和对应的逻辑代码维护
结论;实际开发中几乎不会添加外键约束。