【MySQL】唯一性约束、默认约束和自增约束

200 阅读3分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

0A0194C5.jpg

目录

今天阿文介绍的内容:

  • 什么是唯一性约束
  • 唯一约束的语法格式
  • 什么是默认约束
  • 默认约束的语法格式
  • 什么是自增约束
  • 自增约束的语法格式

1.唯一性约束

唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

1.1唯一性约束的语法规则如下:

在定义完列之后直接指定唯一约束,语法规则如下:

字段名 数据类型 UNIQUE

1.2代码演示

CREATE TABLE employee
{
    id INT(11) PRIMARY KEY,

    name VARCHAR(22) UNIQUE,

    location VARCHAR(50)

};

在SQL语句执行后,生成一张名为employee的表,id为该表的主键,name具有唯一约束,即name列任何两条数据的值都不相等。

1.3在定义完所有列之后指定唯一约束,语法规则如下:

[CONSTRAINT<约束名>] UNIQUE(<字段名>)

1.4代码演示

CREATE TABLE employee
{
    id INT(11) PRIMARY KEY,

    name VARCHAR(22),

    location VARCHAR(50),

    CONSTRAINT STH UNIQUE(name)
};

在SQL语句执行后,生成一张名为employee的表,id为该表的主键,name具有唯一约束且约束名为STH,即name列任何两条数据的值都不相等。

提示:

UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。

2.默认约束

默认约束(Default Constraint)指定某列的默认值。如男性同学较多,性别就可以默认为‘男’。如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为‘男’。

2.1默认约束的语法规则如下:

字段名 数据类型 DEFAULT 默认值

2.2代码演示

CREATE TABLE employee
{
    id INT(11) PRIMARY KEY,
    
    name VARCHAR(22) NOT NULL,
    
    deptId INT(11) DEFAULT 1111,
    
    salary FLOAT 
};

在SQL语句执行后,生成一张名为employee的表,id为该表的主键,name具有非空约束,deptId具有默认约束且默认值为1111,即在插入数据时未给出deptId的值时,系统默认给deptId赋值1111。

3.设置表的属性值自动增加

在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。默认的,在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLIN、INT、BIGINT等)。

3.1设置表的属性值自动增加的语法规则如下:

字段名 数据类型 AUTO_INCREMENT

3.2代码演示

CREATE TABLE employee
{
    id INT(11) PRIMARY KEY AUTO_INCREMENT,

    name VARCHAR(22) NOT NULL,

    deptId INT(11) DEFAULT 1111,
    
    salary FLOAT 
};

在SQL语句执行后,生成一张名为employee的表,id为该表的主键且具有自增约束,即id的值每插入一行数据时会自动加1并赋值给插入的那一行的id列,name具有非空约束,deptId具有默认约束且默认值为1111。自增约束常常与主键一起进行修饰列


总结

  • 具有唯一约束的列,其列的任何两行数据都不相等
  • 具有默认约束的列,其列在插入数据且未给出该列数据时,使用默认值进行赋值
  • 具有自增约束的列,其列每插入一条数据,会自动进行加1

好了,阿文今天就介绍到这里吧!

0A002BDE.jpg