精华内容
下载资源
问答
  • 唯一性约束的关键字
    千次阅读
    2021-01-20 04:12:04

    SQL UNIQUE 约束

    语法:

    MySQL:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    UNIQUE (Id_P)

    )

    SQL Server / Oracle / MS Access:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL UNIQUE,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    UNIQUE 约束唯一标识数据库表中的每条记录。

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

    PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

    请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

    (1) 简单的说: PRIMARY KEY = UNIQUE + NOT  NULL

    数据库如:ORACLE 自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束

    (2) UNIQUE 允许空值

    unique就是唯一,当你需要限定你的某个表字段每个值都唯一,没有重复值时使用. 比如说,如果你有一个person_Info表,并且表中有个身份证的column,那么你就可以指定该字段unique.

    总结:

    相同点:

    它们都属于实体完整性约束.

    不同点:

    (1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。

    (2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。

    (3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。

    (4)建立主键的目的是让外键来引用.

    (5)一个表最多只有一个主键,但可以有很多唯一键

    更多相关内容
  • mysql怎么添加唯一约束

    千次阅读 2021-02-02 04:53:18
    方法:1、创建表时,使用“CREATE TABLE 表名(字段名 数据类型 UNIQUE);”语句来添加;2、修改表时,使用“ALTER TABLE 表名 ...例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情...

    方法:1、创建表时,使用“CREATE TABLE 表名(字段名 数据类型 UNIQUE);”语句来添加;2、修改表时,使用“ALTER TABLE 表名 ADD CONSTRAINT 唯一约束名 UNIQUE(列名);”语句来添加。

    3b4154b8e055511592101cca77d13fd9.png

    MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。

    唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。

    在创建表时设置唯一约束

    唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上。

    在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法格式如下:CREATE TABLE ( UNIQUE);

    例 1

    创建数据表 tb_dept2,指定部门的名称唯一,SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_dept2

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(22) UNIQUE,

    -> location VARCHAR(50)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_dept2;

    +----------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(40) | YES | UNI | NULL | |

    | location | varchar(50) | YES | | NULL | |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.08 sec)

    在修改表时添加唯一约束

    在修改表时添加唯一约束的语法格式为:ALTER TABLE ADD CONSTRAINT UNIQUE();

    例 2

    修改数据表 tb_dept1,指定部门的名称唯一,SQL 语句和运行结果如下所示。mysql> ALTER TABLE tb_dept1

    -> ADD CONSTRAINT unique_name UNIQUE(name);

    Query OK, 0 rows affected (0.63 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> DESC tb_dept1;

    +----------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(22) | NO | UNI | NULL | |

    | location | varchar(50) | YES | | NULL | |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    展开全文
  • 【填空题】DATETIME类型使用____个字节来表示日期和时间。【填空题】通过____语句可以实现删除全部数据或部分数据。...【填空题】域完整性约束包括____、 ____、____和____。【填空题】如果需要...

    【填空题】DATETIME类型使用____个字节来表示日期和时间。

    【填空题】通过____语句可以实现删除全部数据或部分数据。

    【填空题】MySQL使用____关键字添加唯一约束。

    【填空题】主键的值不能为____。

    【简答题】99页凭证

    【填空题】当更新语句中不使用____条件语句时,会将表中所有数据的指定字段全部更新。

    【填空题】域完整性约束包括____、 ____、____和____。

    【填空题】如果需要修改表中字段的位置,可以使用____语句来修改。

    【填空题】MySQL数值类型中DECIMAL类型的取值范围与____类型相同。

    【判断题】数据批量插入时,不可以指定某几列,其他列使用默认值。()

    【填空题】____用于保证数据表中某个字段的值不为NULL。

    【单选题】域完整性约束包括以下哪个约束()。

    【填空题】____语句可以更新表中的部分数据和全部数据。

    【判断题】MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的。()

    【填空题】查看数据库的SQL语句是____。

    【填空题】____用于为数据表中某个字段的值添加默认值。

    【单选题】下列选项中,MySQL不支持的数据类型是()。

    【单选题】TIME类型表示时间,使用的字节数是()。

    【填空题】删除数据表是从____将数据表删除,同时删除表中存储的____。

    【单选题】下列选项中,用来设置自动增加的关键字是 ()。

    【填空题】字段长度超过255时,MySQL提供了____和____两种类型。

    【单选题】下列选项中,用于添加唯一约束的关键字是()。

    【填空题】在MySQL中还有一种方式可以删除表中的所有数据,需要用到____关键字。

    【单选题】唯一任务是加快对数据的访问速度的索引是()。

    【填空题】____用于唯一地标识表中每一条记录。

    【填空题】如果向YEAR类型的字段插入0,存入该字段的年份是____;如果向YEAR类型的字段插入‘0’,存入的年份是____。

    【填空题】CHAR类型的一个变体是____类型,它是一种可变程度的字符串类型。

    【填空题】DELETE语句是____语句,TRUNCATE语句通常被认为是____语句。

    【填空题】____是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一约束。

    【多选题】下列选项中,用于为表中所有字段添加数据的方式是( )。

    【单选题】下列选项中,用于判断某个字段不在指定集合中的关键字是()。

    【单选题】引用完整性就是()。

    【单选题】下列函数中,用于返回圆周率的是()。

    【填空题】在____时将某个字段的值设置为自动增长。

    【判断题】UNION关键字会过滤掉重复的数据。()

    【单选题】下列关于为YEAR类型的字段复制表示方式的叙述不正确的是()。

    【填空题】MySQL中使用____关键字设置表字段值自动增加。

    【单选题】下列查询方式中,查询结果包含左表或右表或两个表中的所有数据的是()。

    【填空题】通过____语句可以查看字段的默认值。

    【填空题】MySQL中以____的形式来显示YEAR类型的值。

    【判断题】FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。()

    【填空题】查看数据库的SQL语句是____。

    【简答题】坏账发生收回凭证

    【填空题】如果向YEAR类型的字段插入0,存入该字段的年份是____;如果向YEAR类型的字段插入‘0’,存入的年份是____。

    【简答题】摘要为 预收冲应收的凭证

    【填空题】如果只想查看表中列的相关信息,可以使用____语句。

    【单选题】域完整性约束中,MySQL会忽略的约束是()。

    【填空题】____ 的唯一任务是加快对数据的访问速度。

    【填空题】当删除语句中不使用____条件语句时,表中所有数据将会被删除。

    【单选题】下列选项中,是删除数据表的操作的是()。

    展开全文
  • mysql的约束

    千次阅读 2021-01-28 00:24:07
    在mysql设计表中,有个概念叫做约束什么是约束约束英文:constraint约束实际上就是表中数据的限制条件约束种类mysql的约束大概分为以下几种:非空约束(not null)唯一性约束(unique)主键约束(primary key) PK外键约束...

    在mysql设计表中,有个概念叫做约束

    什么是约束

    约束英文:constraint

    约束实际上就是表中数据的限制条件

    约束种类

    mysql的约束大概分为以下几种:非空约束(not null)

    唯一性约束(unique)

    主键约束(primary key) PK

    外键约束(foreign key) FK

    检查约束(目前MySQL不支持、Oracle支持,本文不做介绍)

    为了能继续看下去,打开mysql,创建了一个表:create table `test`

    (

    `id` int auto_increment primary key , ## 主键约束

    `name` varchar(64) not null unique , ## 非空约束+唯一性约束

    `password` varchar(64) not null default '', ## 非空约束

    `age` tinyint(3) default 0,## 没有约束

    `add_time` datetime ## 没有约束

    )engine =InnoDb

    charset = 'utf8';

    在这个创建语句中,我们使用到了3种约束(非空约束,主键约束,唯一性约束);在后面会使用到外键约束

    非空约束

    非空约束是我们最常见的一种约束方式,它规定了我们插入数据不允许为空(在mysql中,''不是空,null才是),例如以下插入语句:insert into `test`(`name`,`password`)value ('test','123456');## 插入成功

    insert into `test`(`name`,`password`)value ('test2',null);## password不能为null

    insert into `test`(`name`)value ('test3');## 插入成功,password虽然有约束,但是有default '',当未指定password值时,默认为''

    insert into `test`(`name`)value ('test');## 唯一性约束,test已经存在

    5e63815dae613a1b20e8a17e88860af3.png

    应用场景方面,例如用户邮箱,用户密码不能为空,都可以增加非空约束

    唯一性约束

    唯一性约束是使用unique关键字进行的约束,它有多种约束方式以及约束形式.

    单字段约束

    列级直接约束:create table `unique_test1`(

    `id` int(11) auto_increment primary key ,

    `name` varchar(64) unique

    )

    表级约束:create table `unique_test1`(

    `id` int(11) auto_increment primary key ,

    `name` varchar(64),

    unique (`name`)

    )

    constraint 关键字约束:create table unique_test1

    (

    id   int auto_increment

    primary key,

    name varchar(64) null,

    constraint name

    unique (name)

    );

    以上三种语句最后实现的都是一样的功能

    当插入相同的name时,则会报错:insert into `unique_test1` (`name`)values ('仙士可'),('仙士可');

    77a12291af87d194469cce665ce4b7a9.png

    表级多字段约束

    我们可以约束多个表字段,来进行联合约束create table `unique_test2`(

    `id` int(11) auto_increment primary key ,

    `name` varchar(64) not null,

    `email` varchar(64),

    `add_time` datetime,

    unique `name_email`(`name`,`email`) ## 前面的是约束别名,后面的是约束字段

    )

    同时也可以使用constraint 关键字约束:create table unique_test2

    (

    id       int auto_increment

    primary key,

    name     varchar(64) not null,

    email    varchar(64) null,

    add_time datetime    null,

    constraint name_email

    unique (name, email)

    );

    作用都是相同的,

    插入数据时,插入同样的name是没有问题的,只有当name+email都相同才会出现问题:insert into `unique_test2` (`name`, `email`, `add_time`)

    values ('仙士可', '1067197739@qq.com', '2018-12-01'),

    ('仙士可', '1067197740@qq.com', '2018-12-01');## 相同name不会出错

    insert into `unique_test2` (`name`, `email`, `add_time`)

    values ('仙士可1号', '1067197739@qq.com', '2018-12-01'),

    ('仙士可2号', '1067197739@qq.com', '2018-12-01');## 相同email也不会出错

    insert into `unique_test2` (`name`, `email`, `add_time`)

    values ('仙士可', '1067197739@qq.com', '2018-12-01'),

    ('仙士可1号', '1067197739@qq.com', '2018-12-01');## 相同name+email将出错

    9b501c7b2a56688c49c75b65f09e45fd.png

    我们也可以在一个表内unique多个字段,让name or email都不允许重复,直接写着3种实现方式:create table `unique_test_3`(

    `id` int(11) auto_increment primary key ,

    `name` varchar(64) unique ,

    `email` varchar(64) unique ,

    `add_time` datetime

    );

    create table `unique_test_3`(

    `id` int(11) auto_increment primary key ,

    `name` varchar(64) ,

    `email` varchar(64) ,

    `add_time` datetime,

    unique `name_alias` (`name`),

    unique `email_alias` (`email`)

    );

    create table unique_test_3

    (

    id       int auto_increment

    primary key,

    name     varchar(64) null,

    email    varchar(64) null,

    add_time datetime    null,

    constraint email

    unique (email),

    constraint name

    unique (name)

    );

    这样的话,只要是插入相同的name或者插入相同的email都将出错:insert into `unique_test_3` (`name`, `email`, `add_time`)

    values ('仙士可', '1067197739@qq.com', '2018-12-01'),

    ('仙士可', '1067197740@qq.com', '2018-12-01');##相同name将出错

    insert into `unique_test_3` (`name`, `email`, `add_time`)

    values ('仙士可2号', '1067197739@qq.com', '2018-12-01'),

    ('仙士可1号', '1067197739@qq.com', '2018-12-01');##相同email将出错

    12ee91adaa1206509b22691e637c4345.png

    主键约束

    关于主键约束

    表中的某个字段添加主键约束后,该字段为主键字段,主键字段中出现的每一个数据都称为主键值.

    表中每一行都应该有可以唯一标识自己的一列(或一组列)。

    一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号。

    主键(primary key) 一列(或一组列),其值能够唯一区分表中的每个行。

    唯一标识表中每行的这个列(或这组列)称为主键。

    没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

    在我们平时开发中,大部分情况会给表增加一个'id'的主键,用于标识一行数据

    主键也是唯一性约束,一个表中不允许出现2条相同的主键信息

    一般情况下,'id'主键会设置成自增(auto_increment)

    无论是单一主键还是复合主键,一张表主键约束只能有一个(约束只能有一个,但可以作用到好几个字段)

    例如:create table `unique_test_4`(

    `id` int primary key ,

    `name` varchar(64),

    `email` varchar(64)

    ) engine =INNODB charset ='utd8';## 单一主键

    create table `unique_test_4`(

    `id` int,

    `name` varchar(64),

    `email` varchar(64),

    primary key `id_name`(`id`,`name`)

    ) engine =INNODB charset ='utd8';## 表级定义复合主键

    create table `unique_test_4`(

    `id` int,

    `name` varchar(64),

    `email` varchar(64),

    constraint `id_name` primary key (`id`,`name`)

    )engine =INNODB charset ='utd8';## constraint 关键字复合主键

    主键的约束和唯一性约束性质差不多,这里就不多做介绍了

    外键约束

    若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。

    当表A想要删除一条记录时,必须先将表B的数据删除(如果表B有数据),否则会报错

    例如:create table member

    (

    id       int auto_increment

    primary key,

    name     varchar(64) default '' null,

    password varchar(64) default '' null,

    add_time datetime               null

    )

    engine = InnoDB;

    create table member_point

    (

    id        int auto_increment

    primary key,

    member_id int default 0 null,

    point     int default 0 null,

    constraint con_member_id

    foreign key (member_id) references member (id)

    )

    engine = InnoDB;

    ## 插入数据

    insert into `member` (`name`, `password`, `add_time`)

    values ('仙士可','123456','20181225'),

    ('仙士可1号','654321','20181212'),

    ('仙士可2号','111111','20181201');

    insert into `member_point` (`member_id`,`point`) values

    (1,'100'),

    (2,'96'),

    (3,'80');

    当删除member表id等于1(member_point存在member_id=1数据)的数据,和插入member表不存在的数据时,会报错:DELETE FROM `test`.`member` WHERE `id` = 1;

    insert into `member_point` (`member_id`,`point`) values

    (100,'100')

    712e19170be975500cdd4c2b44165c55.png

    0296b8bfd2dc7f69f3c58b9a80a4b932.png

    注意:外键值可以为null

    外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束(主键也算是unique约束)

    有了外键引用之后,表分为父表和子表member表:父表

    member_point表:子表

    创建先创建父表

    删除先删除子表数据

    插入先插入父表数据

    外键约束将会让mysql在插入,删除,更新会增加额外的判断,严格来说,不允许使用外键约束,如果需要限制,请在代码层限制

    本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

    展开全文
  • 猿们好,我是honery,今天来给大家唠一唠如何避免数据库报唯一性约束的错误。一、问题的引出首先抛出一个问题,如何保证数据库表中的某列的值都不一样呢?相信大家很容易想到给该列加上唯一性约束,这样就能保证业务...
  • 唯一性约束 [MySQL][数据库]

    千次阅读 2022-03-18 00:28:56
    唯一性约束(UNIQUE) 唯一性约束的作用: 用来限制某个字段的值不能重复(但是可以有多个null) 唯一性约束的特点: 同一个表可以有多个唯一性约束 唯一性约束可以是某一个列的值唯一,也可以是多个列组合的值唯一 也...
  • 主键约束、唯一性约束、检查约束

    万次阅读 2011-12-09 11:51:08
    1.约束定义了必须遵循的的用户维护数据一致性和正确性的规则,是强制实现数 据完整性的主要途径。  主键约束(primary key) ... 唯一性约束(unique)  检查约束(check) 条件的构造  范围 字段 in(集合)
  • (二).约束关键字,约束课堂SQL

    千次阅读 2018-12-27 19:22:25
    constraint 约束 PRIMARY 主要的 UNIQUE 独一无二的 ...约束就是为了完成数据库中数据的完整与一致的一种检查机制 通过定义在数据库中的表来完成约束条件 有哪些约束? 主键约束 PRIMARY KEY ...
  • 唯一性约束的使用 作用 关键字 特点 添加唯一性约束 建表时添加 修改表时添加 删除唯一性约束 查看表的索引 删除唯一性约束 唯一性约束的使用 作用 用来限制某个字段 / 某列的值不能重复 关键字 ...
  • SQL Server唯一约束

    千次阅读 2022-05-08 08:42:06
    SQL Server唯一约束 SQL Server UNIQUE约束简介 SQL Server UNIQUE 约束用于确保存储在列或列组中的数据在表中的行中是唯一的。...SQL Server自动创建 UNIQUE 索引以强制存储在参与 UNIQUE 约束的列中的数据的唯一性
  • 最近,在做一个移植的时候经常会报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?...
  • NULL 博文链接:https://panshaobinsb.iteye.com/blog/1772716
  • MySQL约束(主键,唯一,非空,外键) 概念: 对表中的数据进行限定,保证数据的正确、有效和完整。 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key ...
  • Cypher每个节点或Relation都有一个系统分配的id,从0开始递增,全局唯一! 例如: Create(a:Person{id:123}),此ID不是系统分配的id,且该语句不会出现关键字错误。 2. 索引index ----创建索引 create index on:...
  • MySQL数据库约束整理

    千次阅读 2021-01-30 05:29:22
    约束条件与数据类型的宽度一样,都是可选参数作用:用于保证数据的完整和一致主要分为:PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY (FK) 标识该字段为该表的外键NOT NULL 标识该...
  • MySQL讲义第9讲——完整性约束概述 数据完整性是指数据的正确性和相容性,是为了防止数据库中存在不符合...唯一性约束 AUTO_INCREMENT 自增字段 DEFAULT 默认值 一、主键约束 主键是表中的某一个或多个列,由多
  • Sql--约束

    2021-11-20 10:29:29
    约束一、概念二、分类三、非空约束四、唯一约束五、主键约束六、默认约束七、外键约束7.1外键概念7.2外键语法八、约束练习九、总结 一、概念 约束是作用于表中列上的规则,用于限制加入表的数据 例如:我们可以给id...
  • MYSQL 唯一约束

    千次阅读 2022-05-29 14:27:37
    MYSQL 唯一约束
  • 主键约束唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束唯一约束主键约束唯一约束的区别普通索引和唯一索引Mysql中的索引普通索引(非唯一索引)唯一索引唯一索引主键约束唯一索引唯一约束唯一索引创建唯一索引删除主键约束唯一约束自动创建的唯一索引 ...
  • mysql多字段唯一约束

    千次阅读 2021-01-19 01:34:34
    在创建表时设置唯一约束在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下: UNIQUE创建数据表 tb_dept2,指定部门的名称唯一,输入的 SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_dept2...
  • 10. 数据库约束-主键约束-唯一约束-非空约束-默认值约束概述约束其实就是一种限制,用于修饰表中的列. 通过这种限制来保证表中数据的正确、有效和完整。约束的类型约束名约束关键字主键...
  • 4、唯一性约束 语法: create table tb_dept ( id int(11) primary key, name varchar(22) unique, location varchar(50) ); 字段名 数据类型 unique 也可以在定义完所有列之后指定唯一约束,语法如下: constraint ...
  • 约束 * 概念: 对表中的数据进行限定,保证数据的正确、有效和完整。 * 分类: 1. 主键约束:primary key ... 唯一约束:unique 4. 外键约束:foreign key * 非空约束:not null,值不能为null 1....
  • 本文对MySQL数据库的约束相关知识进行了归纳总结,包括主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,721
精华内容 25,488
关键字:

唯一性约束的关键字