前言:
今天你们对“数据库非空约束语句”都比较着重,姐妹们都需要知道一些“数据库非空约束语句”的相关文章。那么小编在网摘上搜集了一些有关“数据库非空约束语句””的相关内容,希望朋友们能喜欢,你们快快来了解一下吧!学习目标
掌握主键约束,唯一约束,非空约束的使用方法了解主键自增和默认值的使用场景SQL约束进阶1.主键约束1.1主键定义
我们在之前创建表的时候使用了PRUMAEY KEY 这个约束,这个关键字代表的是主键约束,那么,什么是主键约束呢?
PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。1.2遵循原则
当然为了,我们的存储逻辑清晰准确,定义主键时也应遵循如下原则:
主键应当是对用户没有意义的。永远也不要更新主键。主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。主键应当由计算机自动生成。1.3 添加主键约束
创建表时添加
创建表时,在字段描述处,声明指指定字段为主键:
# 添加主键# 在创建数据表时添加CREATE TABLE person( id INT PRIMARY KEY, last_name VARCHAR(100), first_name VARCHAR(100), address VARCHAR(100), city VARCHAR(100));# 查看表结构DESC person;
表创建完成后,使用DESC进行表结构查看,结果如下:
id这一行,在Key字段所对应的值为PRI,证明主键约束已经添加成功。
创建表后添加
当然,我们也可以在表创建完成后添加主键约束,添加方式如下:
# 在创建后添加约束(了解)CREATE TABLE person1( id INT, last_name VARCHAR(100), first_name VARCHAR(100), address VARCHAR(100), city VARCHAR(100));# 创建表后,使用ALTER TABLE关键字添加主键ALTER TABLE person1 ADD PRIMARY KEY (id);# 查看表结构DESC person1;
表创建完成后,使用DESC进行表结构查看,结果如下:
此时,主键约束以经添加完成。
1.4删除主键约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
# 删除主键约束# 格式:alter table 表名 drop primary key;ALTER TABLE person1 DROP PRIMARY KEY ;# 查看表结构DESC person1;
注意:删除主键约束后,虽然该字段不是主键了,但是依旧有非空约束,不能为空。
1.5主键约束字段是非空且唯一的
验证非空:
我们在person表中插入指定数据,sql语句如下:
INSERT INTO person(last_name, first_name, address, city) VALUES('fang','xiao','石景山', '北京');
此时会提示错误信息:Field 'id' doesn't have a default value。
由此我们可以得知:==没有默认值的情况下,主键约束字段不能不传值==。
不传值肯定是不行的,那我们可不可以传递一个NULL值呢?我们来试一下:
INSERT INTO person VALUES(1, 'fang', 'xiao', '石景山', '北京');
此时会提示错误信息:Column 'id' cannot be null。
由此我们可以得知:==主键约束字段,不能传空值(null)==。
唯一验证
我们在person表中插入指定数据,sql语句如下:
INSERT INTO person VALUES(1, 'fang', 'xiao', '石景山', '北京');
此时没有任何问题,可以正常插入成功。
接下来我们执行下方的sql语句:
INSERT INTO person VALUES(1, 'hong', 'zhang', '浦东', '上海');1.6自动增长
我们通常希望在每次插入新记录时,数据库自动生成字段的值。
我们可以在表中使用AUTO_INCREMENT(自动增长列)关键字,==自动增长列类型必须是整型,自动增长列必须为键(一般是主键)==。
下列 SQL 语句把 "person" 表中的 "Id" 列定义为 AUTO_INCREMENT主键
# 在创建表时添加自动增长CREATE TABLE person2( id INT PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(255), first_name VARCHAR(255), address VARCHAR(255), city VARCHAR(255));# 查看表结构DESC person2;
表创建完成后,我们可以使用DESC进行表结构查看,此时我们发现自动增长已经添加成功。
扩展:当然,我们也可以在创建表之后添加自动增长。
# 在创建表之后添加自动增长(了解)ALTER TABLE person2 CHANGE id id INT AUTO_INCREMENT;
我们已经给主键添加了自动增长,那怎样才能使用他呢?
向persons添加数据时,可以==不为Id字段设置值==,==也可以设置成null或0==,数据库将自动维护主键值:
# 不给id 传值INSERT INTO person2(last_name, first_name, address, city) VALUES('ming', 'xiao', '昌平', '北京');# 给id 传null值,或0值INSERT INTO person2 VALUES(null, 'fang', 'xiao', '石景山', '北京');INSERT INTO person2 VALUES(0, 'fang', 'xiao', '石景山', '北京');
执行结术后,我们查看表中数据,id值已经自增。
当然,==如果给id传值,则使用被传入的值写入。==
例如:
# 插入一条id值为9的记录,查看主键自增情况INSERT INTO person2 VALUES(9, 'fang', 'xiao', '石景山', '北京');
如果id为9的记录已经插入,那么,下一次主键自增后的值是多少呢??
其实,自动增长,是在我们当前自增列的最大值的基础上进行+1操作。
例如:
# 自动增长,是在我们当前自增列的最大值的基础上进行+1操作INSERT INTO person2 VALUES(null, 'fang', 'xiao', '石景山', '北京');
2.非空约束2.1非空约束介绍
==NOT NULL约束强制列不接受 NULL 值==。
==NOT NULL 约束强制字段始终包含值==。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
2.2添加非空约束
下面的 SQL 语句强制 "id" 列和 "last_name" 列不接受 NULL 值:
# 非空约束 not null# 创建表时添加非空约束CREATE TABLE person3( id INT PRIMARY KEY, last_name VARCHAR(100) NOT NULL, first_name VARCHAR(100) NOT NULL, address VARCHAR(100), city VARCHAR(100));# 查看表结构DESC person3;
表创建完成后,查看表结构如下:
2.3非空约束验证
非空约束修饰的字段可不可以不传值呢?? 我们来试一下:
INSERT INTO person4(id, first_name, address, city) VALUES(1, 'xiao','昌平', '北京');
此时,将会出现报错信息:Column 'last_name' cannot be null。
所以我们得出结论:==非空约束字段,在插入或更新记录时不可以不传值。==
非空约束修饰的字段可不可以传空值呢?我们也来试一下:
INSERT INTO person3 VALUES(1, NULL, 'xiao','昌平', '北京');
此时,将会出现报错信息:Field 'last_name' doesn't have a default value。
所以我们得出结论:==非空约束字段,在插入或更新记录时不可以传NULL值。==
3.唯一约束3.1唯一约束介绍
==UNIQUE 约束唯一标识数据库表中的每条记录。==
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
3.2添加唯一约束
下面的 SQL 语句强制 "last_ame" 列不接受 重复值:
# 唯一约束# 在创建表时添加唯一约束CREATE TABLE person4( id INT PRIMARY KEY, last_name VARCHAR(100) UNIQUE , first_name VARCHAR(100), address VARCHAR(100), city VARCHAR(100));# 查看表结构DESC person4;
表创建完成后,查看表结构如下:
请注意:
==每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。==
3.3唯一约束验证
我们先在person4表中插入一条记录,其中lastname字段的值为“ming”:
INSERT INTO person5 VALUES(1, 'ming', 'xiao', '昌平', '北京');
此时可以插入成功,如果我们再插入一条数据,其中last_name字段的值还是"ming":
# 如果出现插入重复值的情况,将会报错,插入失败INSERT INTO person5 VALUES(2, 'ming', 'da', '丰台', '北京');
此时,将会出现报错信息:Duplicate entry 'ming' for key 'last_name'。
结论:==使用唯一约束修饰的字段中所插入的数据值不能重复。==
4.默认值4.1默认值介绍
默认 DEFAULT: 当不填写字段对应的值会使用默认值,如果填写时以填写为准。
4.2默认值添加
可以在创建表时添加默认值,当不填写表中字段时将会自动填写默认值。
# 默认值# 在创建表时添加默认值CREATE TABLE person5( id INT PRIMARY KEY, last_name VARCHAR(100), first_name VARCHAR(100), address VARCHAR(100), city VARCHAR(100) DEFAULT '北京');# 查看表结构DESC person5;
表创建完成后,查看表结构如下:
4.3默认值验证
我们在person5表中插入一条记录,此纪录不执行city字段的值,SQL语句如下:
INSERT INTO person5(ID, LAST_NAME, FIRST_NAME, ADDRESS) VALUES (1, 'ming', 'xiao', '昌平');
此时来到表中查看数据,虽然我们没有给city字段传值,但是city字段存在默认值,所以将默认值填写到表中:
结论:==如果插入数据时不指定当前字段的值,则查询该字段是否有默认值,如果有则插入默认值。==
5.小结主键约束(PRUMAEY KEY ):唯一标示,不能重复,不能为空。主键应当是对用户没有意义的永远也不要更新主键。主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。主键应当由计算机自动生成。
自动增长( auto_increment): 我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整型,自动增长列必须为键(一般是主键)。非空约束(NOT NULL):NOT NULL 约束强制列不接受 NULL 值。
唯一约束(UNIQUE):UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
默认值(DEFAULT):如果插入数据时不指定当前字段的值,则查询该字段是否有默认值,如果有则插入默认值。