约束
主键约束
特点:唯一、非空
列级语法:<字段名> <数据类型> PRIMARY KEY [默认值]
create table student(
id int(20) primary key,
name varchar(50) primary key,
password varchar(30));
表级语法:[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
create table student(
id int(20),
name varchar(50),
password varchar(50),
primary key(id,name));
非空约束
特点:非空
语法:<字段名> <数据类型> NOT NULL
create table student(
id int(20) primary key,
name varchar(50) not null,
password varchar(30));
唯一约束
特点:唯一
语法:<字段名> <数据类型> UNIQUE
create table student(
id int(20) primary key,
name varchar(50) unique,
password varchar(30));
默认约束
特点:默认值
语法:<字段名> <数据类型> DEFAULT
create table student(
id int(20) primary key,
name varchar(50),
password varchar(30) default 123);
自动增加
特点:一个表只能一个字段使用AUTO_INCREMENT,并且使用这个约束的字段只能是整数类型(任意的整数类型TINYINT,SMALLIN,INT,BIGINT),默认值是1,也就是说从1开始增加的。一般就是给主键使用的,自动增加,使每个主键的值度不一样,并且不用我们自己管理,让主键自己自动生成。
语法:<字段名> <数据类型> ATUO_INCREMENT
create table student(
id int(20) primary key auto_increment,
name varchar(50),
password varchar(30) default 123);
外键约束
特点:
- 外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。
- 这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。
- 子表被外键约束修饰的字段必须和父表的主键字段的类型一样。
语法:[CONSTRAINT 外键名称] FOREIGN KEY(被外键约束的字段名称) REFERENCES 主表名(主键字段)
create table student(
id int(20) primary key auto_increment,
name varchar(50),
password varchar(30)
constraint foreignname foreign key(name) references member(id));
数据类型
Mysql主要有4种数据类型,分别是数值数据类型、日期和时间类型、字符串类型、二进制类型。
数值数据类型
整数类型
浮点数类型和定点数类型
取值范围
float存储方式 | 1bit(符号位) | 8bits(指数位) | 23bits(尾数位) |
---|---|---|---|
double存储方式 | 1bit(符号位) | 11bits(指数位) | 52bits(尾数位) |
因此,float的指数范围为-127 ~ +128,而double的指数范围为-1023 ~ +1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能,表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
注意点:
float(m, d),m指定有效位数(包括整数位和小数位),d指定精确位数,d最多可为6位
float和double和decimal需要怎么选
1 如果你要表示的浮点型数据转成二进制之后能被32位float存储,或者可以容忍截断,则使用float,这个范围大概为要精确保存6位数字左右的浮点型数据
比如10分制的店铺积分可以用float存储,小商品零售价格(1000块之内)
2 如果你要表示的浮点型数据转成二进制之后能被64位double存储,或者可以容忍截断,这个范围大致要精确到保存13位数字左右的浮点型数据
比如汽车价格,几千万的工程造价
3 相比double,已经满足我们大部分浮点型数据的存储精度要求,如果还要精益求精,则使用decimal定点型存储
比如一些科学数据,精度要求很高的金钱