列的完整性约束
主键约束(PRIMARY)
主键创建的目的是为了帮助数据库以更快的速度查询信息,逐渐必须是唯一的,一个表中主键标记的列字段不能相同,并且是非空值(不能为空)
主键可以是单一的字段,也可以是多字段的组合.
单字段主键
单字段主键的语法规则如下:
CREATE TABLE tablename(
propName propType PRIMARY KEY, …
);
或
CREATE TABLE tablename(
propName propType , …
PRIMARY KEY(propName )
);
多字段主键
主键是由多个属性组合而成时,设置和单字段主键类似,在属性定义完之后统一设置主键。语法规则如下:
CREATE TABLE tablename(
propName1 propType ,
propName2 propType ,
…
[CONSTRAINT pk_name]PRIMARY KEY(propName1, propName2)
);
[CONSTRAINT pk_name] 这段是可选的可不选的
也就是设置的这俩个字段必须都一样才算重复
给主键设置名字:(CONSTRAINT)
CREATE TABLE tablename(
propName propType , …
CONSTRAINT pk_name PRIMARY KEY(propType)
);
给id字段的PK约束设置一个名字,可以执行SQL语句CONSTRAINT。创建表class:
ps:据说后期有用,前面学的可有可无
外键约束(FOREIGN)
外键时表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整,即构建两个表字段之间的参照关系
设置外键约束的两个表之间具有父子关系,即子表中的某个字段是由附表决定的.
列如:有俩个表–学生表—班级表—
这俩个表都有班级这一列,如果以班级表为父表,那么学生表中的班级一列则是依赖于班级表(学生表中的班级字段一定是来源于班级表),反之亦然
在具体设置外键约束时,设置外键约束的字段必须依赖与数据库中已经存在的父表的主键,同时外键可以为空(NULL)
要删除外键约束的表时,需要先散出外键参考的表才能删除外键约束的表
其语法形式如下:
CREATE TABLE tablename_1(
propName1 propType ,
propName2 propType ,
…
[CONSTRAINT fk_name] FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)
);
[CONSTRAINT pk_name] 这段是可选的可不选的
mysql> use school; #选择数据库school
mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64)); #创建表class
mysql> desc class ; #查询表class 的定义, describe class 效果等同
mysql> create table student (id int PRIMARY KEY AUTO_INCREMENT, name varchar(64) NOT NULL, class_id int, sex enum('M','F'), FOREIGN KEY(class_id) REFERENCES class(id) ); #创建表student, class_id 为表class id 字段的外键
mysql> insert into student(name, class_id, sex) values('小红', 2, 'M'); #插入记录,主键自增长
mysql> insert into student(name, sex) values('小军', 'M'); #插入记录,允许外键为空
外键约束的参考字段(REFERENCES table_name)是主键约束
非空约束(NOT NULL)
当数据库表中的某个字段比希望设置为NULL,可以用NOT NULL经行约束,确保该字段有值
其语法形式如下:
CREATE TABLE tablename(
propName propType NOT NULL , …
);
唯一约束(UNIQUE)
当数据库的某个字段不允许重复时,可以使用UNIQUE约束设置,保证该段不会重复
法形式如下:
CREATE TABLE tablename(
propName propType UNIQUE, …
);
注意: unique 约束允许受约束的字段出现多个空值 NULL, 不算重复
自增约束(AUTO_INCREMENT)
AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID。
在具体设置AUTO_INCREMENT约束时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型。
由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成主键。
AUTO_INCREMENT来实现,其语法形式如下:
CREATE TABLE tablename(
propName propType AUTO_INCREMENT, …
);
默认情况下,字段propName的值从1开始增加,每增加一条记录,记录中该字段的值就会在前一条记录(或已存在的最大值(包括曾经存在的))的基础上加1,j即使上一个记录以及删除,也会根据上一条记录增加1
注意: mysql8 中,AUTO_INCREMENT 必须设为键(主键、外键和唯一键均可)! 否则会报错!
默认值约束
当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。
为了达到这种效果,可通过SQL语句关键字DEFAULT来设置。
其语法形式如下:
CREATE TABLE tablename(
propName propType DEFAULT defaultvalue, …
);
注意: 如果没有设置,则默认为空