精华内容
下载资源
问答
  • 唯一性约束 可以为null但不能重复 添加unique 这样叫列级约束 如下代码所示,在定义时添加unique,此时添加了的字段均不能接受相同数据的赋值 mysql> create table t_user(id int,username varchar(255) unique,...

    开始时间:2020-03-11

    唯一性约束

    可以为null但不能重复
    添加unique
    这样叫列级约束
    如下代码所示,在定义时添加unique,此时添加了的字段均不能接受相同数据的赋值

    mysql> create table t_user(id int,username varchar(255) unique,usercode varchar(255) unique);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc t_user;
    +----------+--------------+------+-----+---------+-------+
    | Field    | Type         | Null | Key | Default | Extra |
    +----------+--------------+------+-----+---------+-------+
    | id       | int(11)      | YES  |     | NULL    |       |
    | username | varchar(255) | YES  | UNI | NULL    |       |
    | usercode | varchar(255) | YES  | UNI | NULL    |       |
    +----------+--------------+------+-----+---------+-------+
    

    报错

    mysql> insert into t_user(id,username,usercode)values(15,'zhangsan','23');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t_user(id,username,usercode)values(15,'zhangsan','25');
    ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'username'
    
    mysql> insert into t_user(id,username,usercode)values(15,'zhangn','23');
    ERROR 1062 (23000): Duplicate entry '23' for key 'usercode'
    
    

    注意和以下代码的区别:

    多个字段联合约束,这种叫表级约束

    mysql> create table t_user2(id int,username varchar(255),usercode varchar(255),
    unique(username,usercode));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc t_user2;
    +----------+--------------+------+-----+---------+-------+
    | Field    | Type         | Null | Key | Default | Extra |
    +----------+--------------+------+-----+---------+-------+
    | id       | int(11)      | YES  |     | NULL    |       |
    | username | varchar(255) | YES  | MUL | NULL    |       |
    | usercode | varchar(255) | YES  |     | NULL    |       |
    +----------+--------------+------+-----+---------+-------+
    

    两个字段都一样,才报错

    mysql> insert into t_user2(id,username,usercode)values(15,'zhangsan','23');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t_user2(id,username,usercode)values(15,'zhangsan','25');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t_user2(id,username,usercode)values(15,'zhang','23');
    Query OK, 1 row affected (0.00 sec)
    //同时一样,才报错
    mysql> insert into t_user2(id,username,usercode)values(15,'zhangsan','23');
    ERROR 1062 (23000): Duplicate entry 'zhangsan-23' for key 'username'
    

    主键约束

    主键是某一行记录的唯一标识,相当于身份证号
    主键不能为空,也不能重复

    mysql> create table t_user(id int primary key,//也是列级约束
    name varchar(255),email varchar(255));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into t_user(id,name,email)values(12,'lisi','23@qq.com');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from t_user;
    +----+------+-----------+
    | id | name | email     |
    +----+------+-----------+
    | 12 | lisi | 23@qq.com |
    +----+------+-----------+
    1 row in set (0.00 sec)
    
    mysql> insert into t_user(id,name,email)values(12,'wangwui','23@qq.com');
    ERROR 1062 (23000): Duplicate entry '12' for key 'PRIMARY'
    
    mysql> insert into t_user(name,email)values('wangwui','23@qq.com');
    ERROR 1364 (HY000): Field 'id' doesn't have a default value
    
    主键约束 primary key
    主键字段 id
    主键值 12

    主健的分类

    • 根据主键字段的字段数量来划分:
      单一主键
      复合主键(多个字段联合起来添加一个主键约束)(不建议使用)
    • 根据主键性质来划分:
      自然主键:主键值和业务脱钩(用单纯的序号作为主键,防止换了业务后不再适用)
      业务主键:主键值和业务挂钩(身份证号作为主键)

    一张表的主键约束只能有1个。

    mysql提供主键自增,这样可以不用自己赋值了

    create table t_user(
    id int primary key auto_increment,//自增
    email varchar(255)
    )
    
    mysql> insert into t_user(email)values('123@qq.com');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t_user(email)values('13@qq.com');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t_user(email)values('23@qq.com');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t_user;
    +----+------------+
    | id | email      |
    +----+------------+
    |  1 | 123@qq.com |
    |  2 | 13@qq.com  |
    |  3 | 23@qq.com  |
    +----+------------+
    

    外键约束

    外键约束 foreign key
    外键字段 添加有外键约束的字段
    外键值 外键字段中的每一个值

    业务背景:
    请设计数据库表,用来维护学生和班级的信息?
    第一种方案:一张表存储所有数据

    no (pk) name classno classname
    1 zs1 101 北京大兴区经济技术开发区亦庄二中高三1班
    2 zs2 101 北京大兴区经济技术开发区亦庄二中高三1班
    3 zs3 102 北京大兴区经济技术开发区亦庄二中高三2班
    4 zs4 102 北京大兴区经济技术开发区亦庄二中高三2班
    5 zs5 102 北京大兴区经济技术开发区亦庄二中高三2班

    第二种方案:两张表存储数据
    父表:
    t_class 班级表

    cno cname
    101 北京大兴区经济技术开发区亦庄二中高三1班
    102 北京大兴区经济技术开发区亦庄二中高三2班

    子表:
    t_student

    sno sname classno(外键约束)
    1 zs1 101
    2 zs2 101
    3 zs3 102
    4 zs4 102
    5 zs5 102

    t_student中的classno字段引用t_class表中的cno字段
    此时t_student表叫做子表。t_class表叫做父表。
    顺序要求:
    删除数据的时候,先删除子表,再删除父表。
    添加数据的时候,先添加父表,在添加子表。
    创建表的时候,先创建父表,再创建子表。
    删除表的时候,先删除子表,在删除父表。

    //创建父表
    create table t_class( cno int, cname varchar(255),primary key(cno));
    
    //创建子表
    mysql> create table t_student(sno int,sname varchar(255),
    classno int,foreign key(classno) references t_class(cno));//利用foreign key来建立外键
    //通过写references来定位父类
    Query OK, 0 rows affected (0.02 sec)
    

    在此基础上添加数据

    mysql> insert into t_class values(101,'aaa');
    mysql> insert into t_class values(102,'bbba');
    mysql> insert into t_class values(103,'caa');
    mysql> insert into t_student values(1,'ls',101);
    mysql> insert into t_student values(2,'ls2',102)
    mysql> insert into t_student values(3,'wa2',103);
    mysql> insert into t_student values(4,'waza4',103);
    //注意,这里不能给101 102 103以外的值,因为t_class中只有这三个数据
    mysql> insert into t_student values(5,'aa4',105);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails 
    (`mysql`.`t_student`, CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
    
    mysql> select * from t_class;
    +-----+-------+
    | cno | cname |
    +-----+-------+
    | 101 | aaa   |
    | 102 | bbba  |
    | 103 | caa   |
    +-----+-------+
    3 rows in set (0.02 sec)
    
    mysql> select * from t_student;
    +------+-------+---------+
    | sno  | sname | classno |
    +------+-------+---------+
    |    1 | ls    |     101 |
    |    2 | ls2   |     102 |
    |    3 | wa2   |     103 |
    |    4 | waza4 |     103 |
    +------+-------+---------+
    

    写好的这些代码可以一口气放在一个sql文件里面,然后通过source的方式直接用
    Test.sql

    drop table if exists t_student;
    drop table if exists t_class;
    
    create table t_class( cno int, cname varchar(255),primary key(cno));
    create table t_student(sno int,sname varchar(255),
    classno int,foreign key(classno) references t_class(cno));
    
    insert into t_class values(101,'aaa');
    insert into t_class values(102,'bbba');
    insert into t_class values(103,'caa');
    insert into t_student values(1,'ls',101);
    insert into t_student values(2,'ls2',102);
    insert into t_student values(3,'wa2',103);
    insert into t_student values(4,'waza4',103);
    select * from t_class;
    select * from t_student;
    
    mysql> source F:\编程学习\MySQL_Course\bjpowernode\Test.sql
    Query OK, 0 rows affected (0.01 sec)
    
    +-----+-------+
    | cno | cname |
    +-----+-------+
    | 101 | aaa   |
    | 102 | bbba  |
    | 103 | caa   |
    +-----+-------+
    3 rows in set (0.00 sec)
    
    +------+-------+---------+
    | sno  | sname | classno |
    +------+-------+---------+
    |    1 | ls    |     101 |
    |    2 | ls2   |     102 |
    |    3 | wa2   |     103 |
    |    4 | waza4 |     103 |
    +------+-------+---------+
    4 rows in set (0.00 sec)
    

    外键可以为null

    mysql> insert t_student(sno,sname)values(2,'101');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t_student;
    +------+-------+---------+
    | sno  | sname | classno |
    +------+-------+---------+
    |    1 | ls    |     101 |
    |    2 | ls2   |     102 |
    |    3 | wa2   |     103 |
    |    4 | waza4 |     103 |
    |    2 | 101   |    NULL |
    +------+-------+---------+
    

    外键字段引用其他字段时,被引用字段一定是唯一键unique(不一定是主键)
    结束时间:2020-03-13

    展开全文
  • MySQL 表设置唯一性约束方法

    千次阅读 2018-08-10 11:32:38
    今天学项目遇到一个业务增加品牌,一开始直接在业务代码里面加逻辑,在入库前先查一遍有没有,没有就入库,否则报错返回。...UNIQUE约束为列或列集合提供了唯一性的保证。 每个表可以有多个 UNIQUE 约束。 已...

    唯一约束。


    • SQL UNIQUE 约束

      UNIQUE 约束唯一标识数据库表中的每条记录。
      UNIQUE约束为列或列集合提供了唯一性的保证。
      每个表可以有多个 UNIQUE 约束。


    1.已经建好表的情况下

    ALTER TABLE `tb_brand` ADD UNIQUE(`name`);
    

    2.建表的时候加上唯一约束unique

    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)       //给Id_P添加唯一约束
    )
    

    为多个列添加约束

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
    )
    
    展开全文
  • 在表里设置字段唯一约束可以有效防止高并发时由业务代码处理引发的重复入库的问题。 具体建立唯一约束的方法:...1. 建表时加上唯一性约束 CREATE TABLE `t_user` ( `Id` int(11) NOT NULL AUTO_INCREMENT,-- 自增 ...

    在表里设置字段唯一约束可以有效防止高并发时由业务代码处理引发的重复入库的问题。

    具体建立唯一约束的方法:

    1. 建表时加上唯一性约束
    CREATE TABLE `t_user` (
          `Id` int(11) NOT NULL AUTO_INCREMENT,  -- 自增
          `username` varchar(18) NOT NULL unique,  -- 唯一性约束

          `password` varchar(18) NOT NULL,
    PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;

    2.给已经建好的表加上唯一性约束
    ALTER TABLE `表` ADD unique(`字段`);

    转载于:https://my.oschina.net/u/3514849/blog/916115

    展开全文
  • MySQL 表字段唯一性约束设置unique 前言:前段时间接手了同事的一块代码,开发过程中,前端说登录账号时报以上错误,写个记录吧。 分析: mybatis中使用的selectOne()方法,由于只能返回一个对象的结果,当返回到...

    Expected one result (or null) to be returned by selectOne(), but found: 5…

    MySQL 表字段唯一性约束设置unique

    分析
    mybatis中使用的selectOne()方法,由于只能返回一个对象的结果,当返回到多个对象的结果集时报错;如果是单纯的因为selectOne()出错,可以将selectOne 换成 selectList(),使用list接收。

    解决思路

    首先想到的是去代码中查看逻辑,debug一下发现逻辑没有问题;另一方面,有的账号可以登

    录,有的就会出现如上的错误。于是查看数据库,发现phone_num字段出现多个相同手机号,

    应该是当时同事为了方便看测试效果复制粘贴的一部分数据,而我们账号登录使用的就是手机号,必

    须保证唯一,所以这就矛盾了。数据库phone_num字段肯定是没有添加unique限制,于是,

    删除重复手机号数据,给user表添加unique限制:

    	MySQL 表字段唯一性约束设置方法unique:
    
    	ALTER TABLE 表名 ADD UNIQUE(字段名):
    	
           	例:设置user表中的phone_num为唯一索引
    
    	         ALTER TABLE kd_user ADD UNIQUE(phone_number);
    

    顺便说一下建表时添加唯一约束示例:

    CREATE TABLE `kd_user` (
      `Id` int(11)  NOT NULL  AUTO_INCREMENT,     -----非空自增
      `username`  varchar(20)  NOT NULL  unique,  -----非空唯一性约束
      `password`  varchar(20)  NOT NULL,
       PRIMARY KEY (`Id`)                 
    ) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
    

    对已经有索引的字段删除unique索引
    #删除fans表中的 user_id 唯一索引
    ALTER TABLE kd_fans
    DROP INDEX user_id

    展开全文
  • 在Python中实现对MySQL数据库的表设置联合唯一约束,以及在代码中添加 异常捕获 的功能,在违反唯一性约束时,做想要额外执行的操作 什么是联合唯一约束在Python中实现 什么是联合唯一约束 为两列 a,b 设置了联合...
  • 完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等 直观点说:如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作 设置表的主键 主键能够标识表中每条信息...
  • 总结了一些课上的笔记和代码,可以执行看看 ...3.PRIMARY KEY:主键,用于保证该字段的值的唯一性,也就是说被设置为PRIMARY KEY的列中的值不能够重复,主键不能为空。主键还有一个作用就是可以通过主
  • mysql常见约束

    2019-01-05 22:56:03
    mysql常见约束 直接po代码和案例 #常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性... PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空 比如学号、员工编...
  • 概念:对表中的数据进行限定,从而保证数据的正确、...唯一约束 unique 外键约束 foregin key 1. 非空约束(值不能为null) 语法 创建表时添加非空约束 create table 表名( 列名1 数据类型1 not null ...
  • 唯一, unique;非空,not null;自增,auto_increment;默认值,default 实体完整(主键) 主键设置可以划分为两种 第一种 : 创建表语句时,添加主键约束 create table person( id int , name varchar(100), income ...
  • 原来的表数据结构: 我原本的想法是把father_phone这个字段名直接改成phone设置为非空 ,然后在把唯一性给删除。...通过结果发现,字段的重命名和非空是已经设置好了,接下来就是删除唯一性了,我通过下面的代码...
  • mysql使用总结

    2015-04-28 10:50:01
    1,mysql唯一性约束: 用alter命令,代码如下:(表名为user,字段为name)alter table user add unique key(`name`);2,mySQL中删除一个表中的某字段的unique key的语法:ALTER TABLE `table123212` DROP INDEX `...
  • MySQL 学习笔记(三)

    2020-09-13 15:11:26
    约束 唯一性约束(unique) 在这里插入代码
  • MySQL外键

    2017-09-19 19:28:00
    外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整和一致一个就是能够增加ER图的可读性外键的配置1)先创建一个主表,代码如下:#创建表student,并添加各种约束create table stud...
  • MYSQL和oracle 大小写问题 MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 ;... 当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生 Sql代码Duplicate...
  • mysql与oracle大小写区分 <一>MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话...当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生 Sql代码 Duplicate entry for XXX 更加迷惑的是...
  • MySQL的大小写问题

    2016-05-24 20:40:00
    MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户... 当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生 Sql代码Duplicate entry for XXX 更加迷惑的是下面的2条语句 Java代码i...
  • mysql大小写问题

    2012-10-10 12:47:42
    MySQL的大小写问题不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑;如下面 Sql代码 insertintotvalues('A');...当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生 ...
  • 文章目录一、表操作之完整性约束(一)介绍(1)什么是约束条件(2)作用:(3)主要分类及说明:(二)not null与default(三)unique(1)单列唯一(2)联合唯一(四)primary key(1)主键是什么(2)**特点:**...
  • MySQL大小写问题

    千次阅读 2010-10-05 22:22:00
    MySQL的大小写问题 ... MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 ;如下面 Sql代码 ...insert into t values('A');...当第二条执行的时候,如果是主键或者有唯一性约束的话
  • MySql外键设置方式2

    2019-08-01 16:37:22
    1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整和一致 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: ... name varchar(20) , #唯一约束 ...
  • 8.8.3 引用一致(外键约束条件) 153 8.9 索引 156 8.9.1 普通索引、唯一索引和主索引 157 8.9.2 全文索引 158 8.9.3 查询和索引的优化 159 8.10 视图 161 8.11 示例数据库mylibrary(图书管理) 163 ...
  • oracle全程笔记及代码

    2013-12-02 16:31:08
    完整性约束是指数据的正确性与完备性。 1)表:具有行列结构,每一行成为记录,每一列成为字段,字段都是有类型的。 2)数据操作:数据的创建数据的修改数据的删除数据的查询等,这些基本的操作被称为SQL...
  • 好用的代码生成源码

    2019-04-18 16:03:52
    unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,男);F...
  • Java面试 数据库

    2021-03-22 15:18:40
    六、数据库 1、什么是MySQLMySQL是一种关系型数据库,在Java企业级开发中非常常用,因为MySQL是开源免费的,...对记录的唯一性约束,表中的每个记录都是唯一的(设置主键) 3.对字段冗余性的约束,他要求...
  • 在Python中实现对MySQL数据库的表设置联合唯一约束,以及在代码中添加 异常捕获 的功能,在违反唯一性约束时,做想要额外执行的操作 将 列表list 转换为 DataFrame格式 将 列表list 转换为 DataFrame格式 # 假设有...
  • 在写代码之前,小周先唠叨几句。其实关于oracle和mysql的相关sql语句,本质上是没有什么差别的,只是有些sql语句有变化而已。...2、为表的属性列添加唯一性约束 SQL> ALTER TABLE table_name ADD UNIQUE(属性列
  • 因为上游系统不可控,下游系统的唯一约束不可知,数据推送的过程中可能数据乱序的 如果存在并发上传,没有加锁,非常大的可能出现死锁 二、解决思路 手动对数据进行排序 接口对相同来源请求进行加锁、队列 在...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

mysql唯一性约束代码

mysql 订阅