1.数据库约束
定义:约束故名思意就是对列进行限制约束。约束是在创建表的时候添加上去的,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。
1.1约束类型
非空约束(NOT NULL )- 指示某列不能存储 NULL 值。
唯一约束(UNIQUE) - 保证某列的每行必须有唯一的值。
默认值约束(DEFAULT )- 规定没有给列赋值时的默认值
主键约束(PRIMARY KEY) - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
外键约束(FOREIGN KEY )- 保证一个表中的数据匹配另一个表中的值的参照完整性。
检查约束(CHECK) - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。
约束的使用方式 :在建表时,我们只需在建立每列时,在每列的后面加上约束类型即可。
1.2 非空约束(NOT NULL )
create table student( id int not null, sn int, name varchar(20), qq_mail varchar(20) ); desc student; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | sn | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | qq_mail | varchar(20) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
上方代码就是将学生id加上了非空约束,这样学生id在填写时就不能为空了,为空会怎样,我们演示一下。
可以看出,当我们将学生id置空时,客户端报了错。若需要让以列成为必填项,这时非空约束就到了发挥作用的时候。
1.3 唯一约束(UNIQUE)
mysql> create table student( -> id int not null, -> sn int unique, -> name varchar(20), -> sex varchar(5) -> ); mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | sn | int(11) | YES | UNI | NULL | | | name | varchar(20) | YES | | NULL | | | sex | varchar(5) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
我们在学号sn列加上了唯一约束,唯一约束的含义是:这一列不能出现重复的数据,例如(当有一个1时,我们又去添加一个1,这时就会报错。)
1.4默认值约束(DEFAULT )
create table student ( id int not null, sn int unique, name varchar(20) default '无名氏', sex varchar(5) ); desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | sn | int(11) | YES | UNI | NULL | | | name | varchar(20) | YES | | 无名氏 | | | sex | varchar(5) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
添加默认值约束的列在填写时为空时(这时需要添加到列名),会默认填入设置好的默认值。
还可以使用MySQL给的关键字(default),填这个也是会得到设置的默认值。
1.5主键约束(PRIMARY KEY)
主键约束是非空约束和唯一约束的合集,它满足这两个约束的所有条件。
create table student( id int primary key auto_increment, sn int unique, name varchar(20) default '无名氏', sex varchar(5) ); desc student; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | sn | int(11) | YES | UNI | NULL | | | name | varchar(20) | YES | | 无名氏 | | | sex | varchar(5) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+
注意:对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。一个表中只能有一个主键。
例如:
insert into student values (1,10,'张三','男'), (null,11,'李四','男'), (100,12,'小红','女'), (null,13,'王五','男');
代码先设置id是1,之后插入一条id设为空,因为有自增主键,客户端将这个自动设置为2,
当设置id为100时,再将id设为空,这次id没有根据顺序排列,而是用最大值+1编号。
1.6外键约束(FOREIGN KEY )
外键用于关联其他表的主键或唯一键,对于两个具有关联关系的表来说,关联字段所在的表就是主表(父表),外键所在的表就是从表(子表)。
语法格式:
foreign key (字段名) references 主表(列)
示例:
- 创建班级表classes,id为主键 :
CREATE TABLE classes ( id INT PRIMARY KEY auto_increment, name VARCHAR(20), `desc` VARCHAR(100) );
- 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id
CREATE TABLE student ( id INT PRIMARY KEY auto_increment, sn INT UNIQUE, name VARCHAR(20) DEFAULT 'unkown', qq_mail VARCHAR(20), classes_id int, FOREIGN KEY (classes_id) REFERENCES classes(id) );
注意:
- 在两个表中相同字段,并且外键在主表中是主键或者是唯一字段
- 主表的内容不能随意删除、修改,因为删除、修改操作会对从表造成影响。