约束:约束(constraint)就是表中数据的限制条件,为了保证表中数据的完整性和有效性。
表级约束和列级约束:列级约束是定义在列属性中的,而表级约束是定义在所以列之后的,两者本质上没什么区别,而如果你的约束需要同时对多列进行约束那么就只能采用表级约束,因为表级约束面向的是表(当然就包括所有列),而列级约束只能针对该列进行约束。
primary key (主键约束):指在表中定义的一个主码,通过它可强制表的实体完整性;具有唯一性和最小性(非空)。简单来讲就是通过最少的字段就可确定所有的信息,举个栗子,在一个学生表中,有学号,姓名,年龄,班级,总成绩。其中仅用学号就可确定其他信息,因为学号是唯一的,那如果去掉学号,就需要姓名,年龄,班级才能确定信息,因为名字可能有重复,也可能有同名同年龄同班的人(这里例子不考虑),那么此时班级,年龄和姓名三者共同组成主键。
字段名 数据类型 primary key #列级约束,直接在字段后面加,第一种方法
#第二种方法 表级约束 primary key (字段1,字段2)设置字段1和字段2共同组成主键。
foreign key(外键约束):通常用来连接父表和子表,两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。举个栗子,课程表中有学号,课程号,课程名。那么其中学号就是连接上面的学生表和课程表的,在课程表中得到学号就可以知道那个学生选了什么课,所以在课程表中学号为外键,而需要学号和课程号才能确定课程,所以在课程表中学号和课程号组成主键。
外码规则:
一个表可以没有外码,也可以有多个外码,含有外码的表为子表。
父表和子表不是绝对的而是相对的。
父表的主码和子表的外码必须定义在同一个域上。
外码和相应的主码可以不同。
一个子表可以对应多个父表,一个父表也可以对应多个子表。
constrain 约束名 foreign key (外键字段名) references 主表 (连接的主键)
unique(唯一性约束):用于指明基本表在某一列或多个列的组合上的取值唯一,每个表可以定义多个唯一键,唯一性的约束确保某一列或多个列的组合上的取值唯一,唯一键可以为空。
#列级 字段 数据类型 unique
#表级 constrain 约束名 unique (字段1,字段二)
空约束(null)和非空约束(not null):空约束指默认情况下字段的取值可以为空,所以空约束也可以省略。非空约束则反之,代表该字段的取值不能为空。
#非空约束
#字段名 数据类型 not null
自增约束(auto_increment):自增字段会在前一个的序号上自动增加1,如前一个序号是5,但我把5删除了,那么下一个序号还是从6开始
#字段名 数据类型 auto_increnment
#设置增长的初始值
#这里设置了从100开始自增
create table t(
age int auto_increnment unique
)auto_increnment = 100;
自增约束的要求:
每张表自能定义一个自增型字段
自增字段必须为数值类型
自增字段必须定义为键(主键,唯一键或者外键都可以)
默认值约束 (default) :定义表中字段的默认值,要注意如果字段类型为整形则直接写数字,若为字符型则要用单引号引起来
#字段名 字段类型 字段默认值