龙空技术网

从零开始学MySQL(十):SQL约束进阶

秋语棠 98

前言:

今天你们对“数据库非空约束语句”都比较着重,姐妹们都需要知道一些“数据库非空约束语句”的相关文章。那么小编在网摘上搜集了一些有关“数据库非空约束语句””的相关内容,希望朋友们能喜欢,你们快快来了解一下吧!

学习目标

掌握主键约束,唯一约束,非空约束的使用方法了解主键自增和默认值的使用场景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):如果插入数据时不指定当前字段的值,则查询该字段是否有默认值,如果有则插入默认值。

标签: #数据库非空约束语句 #sql非空约束