精华内容
下载资源
问答
  • 主键用于唯一标识表中的每一条数据。 主键的特征: 不能重复, 不能为空。 示例 create table stu1( id int auto_increment primary key, <------#主键 name varchar(20) ); 注意点: auto_increment的...

    主键(Primary key)

    • 概念

    主键用于唯一标识表中的每一条数据。

    • 主键的特征:

    不能重复, 不能为空。

    • 示例
    create table stu1(
        id int auto_increment primary key, <------#主键
        name varchar(20)
    );
    

    注意点:

    auto_increment的字段必须是主键, 但是主键不一定是auto_increment的。
    一个表只能有一个主键, 但是主键可以是1个或多个字段组成。

    • auto_increment 自增长
    1. 自增长字段的值从1开始, 每次递增1。
    2. 自增长字段数据不可以重复, 合适生成唯一的id。
    3. 自增长字段可以使用null或者default来设置值。
    4. 自增长字段必须是主键 (primary key)。
    • 错误示例
    错误示例1
    create table stu2(
        id int auto_increment, <------#会报错, 自增长的字段必须是主键
        name varchar(20)
    );
    
    
    错误示例2
    create table stu3(
        id1 int primary key,
        id2 int primary key, <------#会报错,一张表只能有一个主键
        name varchar(20)
    );
    
    • 正确示例
    添加主键的第一种方式
    create table stu4(
        id1 int primary key,   <------#直接指定主键字段
        id2 int,
        name varchar(20)
    );
    
    
    添加主键的第二种方式
    create table stu5(
        id1 int,
        id2 int,
        name varchar(20),
        primary key(id1)  <------#语句最后指定主键字段
    );
    
    
    添加主键的第三种方式
    create table stu6(
        id1 int,
        id2 int,
        name varchar(20)
    );
    没有主键的情况下添加主建
    alter table stu6 add primary key(id1); <------#表创建完成后添加主键
    
    • 联合主建
    create table stu7(
        id1 int,
        id2 int,
        name varchar(20),
        primary key(id1,id2) <------#主键由两个字段组成
    );
    
    #不是指定两个主键, 一个primary key就是指定一个主键
    #这里只出现了一个primary key, 所以只指定了一个主键
    #只不过这个主键比较特殊, 是由两个字段共同组成的
    
    • 联合主键的应用场景:

    如果表中无论哪一个字段都无法保证数据的唯一性,可以使用多个字段组合在一起用来保证数据的唯一性。

    • 企业开发中如何选择主键?

    最少性: 尽量选择一个字段作为主键。
    稳定性: 尽量选择更新少的字段作为主键。
    尽量选择整数类型的字段作为主键。
    结论: 搞一个id字段类型为int, 设置自动增长, 作为主键。

    唯一键(unique)

    • 作用

    避免添加重复数据, 也就是说如果想保证某一个字段的值永远不重复, 那么就可以将这个字段设置为唯一键。

    注意点:

    唯一键不是主键, 主键有一个特点是不能重复, 但是唯一键不等于主键。
    一张表中只能有一个主键, 但是一张表中可以有多个唯一键。

    • 没有添加唯一键
    create table if not exists stu1(
        id int auto_increment primary key,
        name varchar(20) <------ #可以添加重复数据
    );
    
    • 添加唯一键
    1.添加唯一键的第一种方式
    create table if not exists stu2(
        id int auto_increment primary key,
        name varchar(20) unique <------#建表时字段后面添加unique,name不可以添加重复数据
    );
    
    
    2.添加唯一键的第二种方式
    create table if not exists stu(
        id int auto_increment primary key,
        name varchar(20),
        unique key(name) <------#语句最后添加,name不可以添加重复数据
    );
    
    
    3.添加唯一键的第三种方式
    create table if not exists stu(
        id int auto_increment primary key,
        name varchar(20)
    );
    alter table stu add unique(name); <------#建表完成指定唯一键
    
    
    4.添加多个唯一键方式
    create table if not exists stu11(
        id int auto_increment primary key,
        name varchar(20) unique,
        score int unique
    );
      -------此时name和score都是唯一键。
    
    • 删除唯一键
    语法
    alter table 表名 drop index  唯一键字段名;
    示例
    alter table stu11 drop index name;  
    
    展开全文
  • MySQL列属性 之 唯一键

    2021-01-19 17:48:31
    MySQL列属性 之 唯一键唯一键唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此 唯一键就是用来解决表中多个字段需要具有唯一性的问题。例如身份证号码应该每一行的...

    MySQL列属性 之 唯一键

    唯一键

    唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此 唯一键就是用来解决表中多个字段需要具有唯一性的问题。

    例如身份证号码应该每一行的记录不一样,需要具有唯一性。

    唯一键的本质与主键差不多,唯一键允许字段为空,而且可以多个字段为空,因此空字段不参与唯一性的比较。也就是说可以插入多个空字段。

    增加唯一键

    增加唯一键的方法和主键类似,有 3 种方法,分别为:

    第一种:在创建表的时候,字段后面直接添加unique或者unique key关键字

    -- 增加唯一键

    create table my_unique(

    number char(10) unique comment '学号',

    name varchar(20) not null

    )charset utf8;

    43fcdffeaae884b9b20c922c32e9e23e.png

    第 2 种:在所有字段之后,增加unique key(字段列表),可以设置复合唯一键

    -- 测试唯一键

    create table my_unique2(

    number char(10) not null,

    name varchar(20) not null,

    unique key(number)

    )charset utf8;

    4031f30eaa4e1e993ef3400210b990f7.png

    观察上图,咱们可能会发现一个问题,那就是: 咱们设置的唯一键UNI,怎么变成了主键PRI啊?这是由于当唯一键满足非空条件的时候,其性质就和主键一样啦,因此在表中显示为PRI. 当然,在咱们执行如下 SQL 语句的时候,其就会表现出真正的性质:

    -- 查看表创建语句

    show create table my_unique2;

    df6eda02fd5907cdc868feb33bcf6aab.png

    第 3 种:在创建表之后,增加唯一键

    -- 创建未设置唯一键的表

    create table my_unique3(

    id int primary key auto_increment,

    number char(10) not null,

    name varchar(20) not null

    )charset utf8;

    65dd16d9fa1fe362b6de1bd2fafcaf08.png

    如上图所示,表my_unique3未设置唯一键。接下来,执行如下 SQL 语句,进行测试:

    -- 增加唯一键

    alter table my_unique3 add unique key(number);

    d3b82345c8edd23adbf59241a6b21616.png

    如上图所示,咱们已经成功向表中增加唯一键啦!

    唯一键约束:允许多个值为空

    唯一键与主键本质相同,区别在于: 唯一键允许字段值为空,并且允许多个空值存在。

    -- 测试唯一键约束

    insert into my_unique values(null,'Charies');

    insert into my_unique values(null,'Guo');

    3269596959b092dc554766096a6a7055.png

    更新唯一键 & 删除唯一键

    在表中,更新唯一键的时候,可以不用先删除唯一键,因为表的唯一键允许有多个。

    删除唯一键的语法为:

    基本语法:alter table + 表名 + drop index + 索引名字;

    在这里,唯一键默认使用字段名作为索引名。

    -- 删除唯一键

    alter table my_unique3 drop index number;

    dc78a6df0768e263b4701d53a938510e.png

    如上图所示,显然咱们已经成功删除表中的唯一键啦!

    温馨提示:符号+表示连接的意思。

    展开全文
  • I've got an error on MySQL while trying to add a UNIQUE KEY. Here's what I'm trying to do. I've got a column called 'unique_id' which is VARCHAR(100). There are no indexes defined on the table. I'm ge...

    I've got an error on MySQL while trying to add a UNIQUE KEY. Here's what I'm trying to do. I've got a column called 'unique_id' which is VARCHAR(100). There are no indexes defined on the table. I'm getting this error:

    #1062 - Duplicate entry '' for key 'unique_id'

    When I try to add a UNIQUE key. Here is a screenshot of how I'm setting it up in phpMyAdmin:

    639924cc852da7f2d9c6abec0f6a0434.png

    Here is the MySQL query that's generate by phpMyAdmin:

    ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,

    ADD UNIQUE (

    `unique_id`

    )

    I've had this problem in the past and never resolved it so I just rebuilt the table from scratch. Unfortunately in this case I cannot do that as there are many entries in the table already. Thanks for your help!

    解决方案

    The error says it all:

    Duplicate entry ''

    So run the following query:

    SELECT unique_id,COUNT(unique_id)

    FROM yourtblname

    GROUP BY unique_id

    HAVING COUNT(unique_id) >1

    This query will also show you the problem

    SELECT *

    FROM yourtblname

    WHERE unique_id=''

    This will show you where there are values that have duplicates. You are trying to create a unique index on a field with duplicates. You will need to resolve the duplicate data first then add the index.

    展开全文
  • 关于唯一键(Unique)

    2021-05-17 12:26:39
    SQL> create table test_ranbo(id number);... alter table test_ranbo add constraint test_ranbo$uk unique (id);Table alteredSQL> insert into test_ranbo(id) values(null);1 row inser...

    SQL> create table test_ranbo(id number);

    Table created

    SQL> alter table test_ranbo add constraint test_ranbo$uk unique (id);

    Table altered

    SQL> insert into test_ranbo(id) values(null);

    1 row inserted

    SQL> insert into test_ranbo(id) values(null);

    1 row inserted

    可以插入两个null.

    下面建个包含两列外键的例子。

    SQL> truncate table test_Ranbo;

    Table truncated

    SQL> alter table test_ranbo drop constraint test_ranbo$uk;

    Table altered

    SQL> alter table test_ranbo add Name varchar2(30);

    Table altered

    SQL> desc test_ranbo;

    Name Type         Nullable Default Comments

    ---- ------------ -------- ------- --------

    ID   NUMBER       Y

    NAME VARCHAR2(30) Y

    SQL> alter table test_ranbo add constraint test_ranbo$uk unique (id ,name);

    Table altered

    SQL> insert into test_ranbo values(1,null);

    1 row inserted

    SQL> insert into test_ranbo  values(1,null);

    insert into test_ranbo  values(1,null)

    ORA-00001: unique constraint (DBOWN.TEST_RANBO$UK) violated

    再由测试外键是三列的情况。

    SQL> truncate table test_ranbo;

    Table truncated

    SQL> alter table test_ranbo drop constraint test_ranbo$uk;

    Table altered

    SQL> alter table test_ranbo add type varchar2(30);

    Table altered

    SQL> desc test_ranbo;

    Name Type         Nullable Default Comments

    ---- ------------ -------- ------- --------

    ID   NUMBER       Y

    NAME VARCHAR2(30) Y

    TYPE VARCHAR2(30) Y

    SQL> alter table test_ranbo add constraint test_ranbo$uk unique (id,name,type);

    Table altered

    SQL> insert into test_ranbo(id,name,type) values(1,null,null);

    1 row inserted

    SQL> /

    insert into test_ranbo(id,name,type) values(1,null,null)

    ORA-00001: unique constraint (DBOWN.TEST_RANBO$UK) violated

    SQL> insert into test_ranbo(id,name,type) values(null,null,null);

    1 row inserted

    SQL> /

    1 row inserted

    SQL> insert into test_ranbo(id,name,type) values(null,'a',null);

    1 row inserted

    SQL> /

    insert into test_ranbo(id,name,type) values(null,'a',null)

    ORA-00001: unique constraint (DBOWN.TEST_RANBO$UK) violated

    由此可见,在唯一键包含两列以上的情况下,只要有了一列是非null,那么其他列的null可以理解为一个确定的值,唯一键会起作用,只有唯一键的所有列都是null值的时候不管插入多少行相同的记录唯一键都不起作用。

    展开全文
  • 外键指定一个列(或一组列)的值必须符合另一个表的一些行的值,维持关联表的参照完整性。...● 名编辑框:输入新的名。使用参考模式、 参考表和参考限制下拉列表可分别选择一个外部索引数据库、表及限制...
  • 参考资料:链接
  • 更新主键不是问题; SQL中(以及关系模型中)的所有值都应该是可更新的.问题似乎是交换主键,其中>如果你使用代理(因为它们没有意义,所以没有必要... “unique_key”列仍然必须声明为唯一.添加“ID”列不会更改该业...
  • Android SQLite 数据库添加数据时数据已经存在则去重处理,UNIQUE唯一键
  • UNIQUE KEY `udx_name` (`name`), KEY `idx_name` (`name`) ) ENGINE=InnoDB 死锁产生的原因是: S1对(2,2)记录加X锁, S2/S3需要唯一键冲突检测,需要加S锁,由于X锁的存在,S锁的获取被阻塞。 S1提交或者回滚,...
  • 保证唯一性 是否允许为空 一个表中可以有多少个 能否组合primary key √ × 至多一个 ...
  • 本文主要介绍Mysql几种键和索引:MySQL中有三种Key和一个Index: Primary Key(主键), Unique Key(唯一键),Foreign Key(外键)和 Index(索引)四者的区别如下:定义:主键(Primary Key):唯一标识一条记录,不能有重复,...
  • 如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE把它定义为一个唯一索引。创建唯一索的方法操作表代码如下复制代码CREATE TABLE `wb_blog` (`id` smallint(8) ...
  • Primary key主键 特点: 1.唯一性,一张数据库表中只能存在一...unique 唯一键 特点: 1.不可重复性,这个特点跟主键的作用一样。 2.可以多个数据项设为唯一键 #define UserTable "create table if not exists usertable
  • mysql添加删除唯一约束(unique

    千次阅读 2021-01-18 19:15:18
    name` ADD FULLTEXT ( `column`) 4、添加多列索引 mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) 5、添加unique(唯一索引) ALTER TABLE `表名` ADD unique 约束名 ( `...
  • MySQL设置唯一键

    千次阅读 2021-02-02 09:38:02
    MySQL设置唯一键环境:NavicatforMysql8.2+ MySQL Sever 5.1问题:MySQL图形化设置唯一键解决:图形化工具没有这个功能。可以使用SQL命令。一:修改表,例如[sql]ALTER TABLE tablename ADD UNIQUE [索引的名字] (列...
  • 主键:primary key,主要的,一张表只能有一个字段可以使用对应的,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键增加主键:方案一:在创建表的时候,直接在字段之后,跟primary key关键字(主键...
  • 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...推荐阅读:接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。SQL> select * from v$version;BANNER----------------...
  • MySQL唯一键

    2021-04-20 04:25:57
    MySQL唯一键MySQL中的唯一键是单个字段或字段组合,以确保要存储到列中的所有值都是唯一的。这意味着列不能存储重复值。例如,“ student_info”表中学生的电子邮件地址和卷号或“ Employee”表中员工的联系号应唯一...
  • 写在前面MongoDB支持的索引种类很多,诸如单键索引,复合索引,多索引,TTL索引,文本索引,空间地理索引等。同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字段...
  • 2、唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)创建唯一键创建唯一键和创建主键非常类似1、直接在表字段之后增加唯一键标识符:unique[key]2、在所有的字段之后使用unique key(字段列表);...
  • 数据库:唯一性约束所谓唯一性约束(unique constraint)不过是数据表内替代的另一个名称而已。替代(alternate key)可以是数据表内不作为主键的其他任何列,只要该对该数据表唯一即可。换句话说,在唯一列内不...
  • 实现唯一约束还可以不是主键的unique。oracle中的unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段。我们在可以在创建表时或者创建好后通过修改表的方式来创建oracle中的unique约束。...
  • 四、UNIQUE ---- 唯一约束唯一键可以是单个字段,也可以是多个字段的组合,设置唯一约束后,INSERT或UPDATE时如果表中唯一键字段中已存在该数据,则拒绝该行数据的INSERT或UPDATE。但是数据库中NULL并不等于NULL,...
  • 设置主键唯一UNIQUE

    2021-01-15 10:39:30
    设置主键唯一UNIQUE
  • MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能...
  • 我们用的是MongoDB数据存储用户信息,用户表中曾经用户注册是通过手机号注册的,所以很理所当然的给手机号加上了唯一索引(Unique),这是没有什么毛病。后期,我们需求改了。你也可以想到变成了既可以手机号注册又...
  • 主键是表中唯一标识该表中每个元组(行)的列。主键对表实施完整性约束。表中只允许使用一个主键。主键不接受任何重复值和空值。表中的主键值很少更改,因此在选择主键是需要小心,要选择很少发生更改的地方。一个表的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,562
精华内容 27,024
关键字:

唯一键unique