zoukankan      html  css  js  c++  java
  • MySql约束

    常见的约束类型(5种)

    1. not null: 非空约束,指定某列不为空
    2. unique:唯一约束,指定某列和几列组合的数据不能重复
    3. primary key:主键约束,指定某列的数据不能重复,唯一
    4. foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据
    5. check:检查,指定一个表达式,用于检验指定数据

    unique唯一约束

           1.唯一约束是指定table的列或列组合不能重复,保证数据的唯一性,约束的列不允许有重复值;

      2.唯一约束不允许出现重复的值,但是可以为多个null;

      3.同一个表可以有多个唯一约束,多个列组合的约束

    mysql> create table temp_uk(
        ->   id int not null unique,
        ->   name varchar(20) unique);
    
    mysql> insert into temp_uk values(1,'a');
    mysql> insert into temp_uk values(2,'a');
    ERROR 1062 (23000): Duplicate entry 'a' for key 'name'
    mysql> insert into temp_uk values(2,null);
    mysql> insert into temp_uk values(3,null);
    
    mysql> select * from temp_uk;
    +----+------+
    | id | name |
    +----+------+
    |  2 | NULL |
    |  3 | NULL |
    |  1 | a    |
    +----+------+

    可见,唯一性约束的列可以有多个null值,因为null <> null

      4.在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同;

      5.唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

     

    primary key主键约束

    primary key = not null + unique

    主键:用来唯一的标示表中的每一行(类型一般为整型或者字符串)

      具有主键约束的列不允许有null值,并且不允许有重复值;

      每个表最多只允许一个主键(可定义联合主键),主键名总是PRIMARY。

    mysql> create table temp_pk(
        -> id int primary key);
    
    mysql> insert into temp_pk values(1),(2);
    
    mysql> insert into temp_pk values(1);
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    mysql> update temp_pk set id=1 where id=2;
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    mysql> insert into temp_pk values(null);
    ERROR 1048 (23000): Column 'id' cannot be null

    !!给主键一个新的名字,但在数据字典中,主键名还是显示primary

    联合主键(用几个列进行唯一标识一行)

    mysql> create table temp_pk(
        -> id int,
        -> name varchar(20),
        -> constraint pk_id_name primary key(id,name)
        -> );
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> desc temp_pk;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(20) | NO   | PRI | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    mysql> insert into temp_pk values(1,'张三');
    Query OK, 1 row affected (0.00 sec)
    mysql> insert into temp_pk values(2,'李四');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into temp_pk values(1,'王五');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into temp_pk values(1,'张三');
    ERROR 1062 (23000): Duplicate entry '1-张三' for key 'PRIMARY'
    
    mysql> select * from temp_pk;
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | 张三   |
    |  1 | 王五   |
    |  2 | 李四   |
    +----+--------+
    3 rows in set (0.00 sec)

     

  • 相关阅读:
    AutoLISP修改圆直径
    AutoLISP文字加上下划线
    EminemNot Afraid
    AutoLISP将图形中文字写入外部文件
    AutoLISP文字大小写转换
    AutoLISP修改文字高度
    AutoLISP文字外加矩形框
    AutoLISP文字外加圆形框
    AutoLISP纹理地板图案
    AutoLISP修改文字倾斜角度
  • 原文地址:https://www.cnblogs.com/xiebinbbb/p/13839039.html
Copyright © 2011-2022 走看看