zoukankan      html  css  js  c++  java
  • 完整约束

    一、unique

    ============设置唯一约束 UNIQUE===============
    方法一:
    create table department1(
    id int,
    name varchar(20) unique,
    comment varchar(100)
    );
    
    
    方法二:
    create table department2(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint uk_name unique(name)
    );
    
    
    mysql> insert into department1 values(1,'IT','技术');
    Query OK, 1 row affected (0.00 sec)
    mysql> insert into department1 values(1,'IT','技术');

    二、 not null与default

    是否可空,null表示空,非字符串
    not null - 不可空
    null - 可空


    默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    create table tb1(
    nid int not null defalut 2,
    num int not null
    )

    ==================not null====================
    mysql> create table t1(id int); #id字段默认可以插入空
    mysql> desc t1;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    mysql> insert into t1 values(); #可以插入空
    
    
    mysql> create table t2(id int not null); #设置字段id不为空
    mysql> desc t2;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | NO   |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    mysql> insert into t2 values(); #不能插入空
    ERROR 1364 (HY000): Field 'id' doesn't have a default value
    
    
    
    ==================default====================
    #设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值
    mysql> create table t3(id int default 1);
    mysql> alter table t3 modify id int not null default 1;
    
    
    
    ==================综合练习====================
    mysql> create table student(
        -> name varchar(20) not null,
        -> age int(3) unsigned not null default 18,
        -> sex enum('male','female') default 'male',
        -> hobby set('play','study','read','music') default 'play,music'
        -> );
    mysql> desc student;
    +-------+------------------------------------+------+-----+------------+-------+
    | Field | Type                               | Null | Key | Default    | Extra |
    +-------+------------------------------------+------+-----+------------+-------+
    | name  | varchar(20)                        | NO   |     | NULL       |       |
    | age   | int(3) unsigned                    | NO   |     | 18         |       |
    | sex   | enum('male','female')              | YES  |     | male       |       |
    | hobby | set('play','study','read','music') | YES  |     | play,music |       |
    +-------+------------------------------------+------+-----+------------+-------+
    mysql> insert into student(name) values('egon');
    mysql> select * from student;
    +------+-----+------+------------+
    | name | age | sex  | hobby      |
    +------+-----+------+------------+
    | egon |  18 | male | play,music |
    +------+-----+------+------------+

    三、 primary key

    primary key字段的值不为空且唯一

    一个表中可以:

    单列做主键
    多列做主键(复合主键)

    但一个表内只能有一个主键primary key

    ============单列做主键===============
    #方法一:not null+unique
    create table department1(
    id int not null unique, #主键
    name varchar(20) not null unique,
    comment varchar(100)
    );
    
    mysql> desc department1;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | NO   | UNI | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.01 sec)
    
    #方法二:在某一个字段后用primary key
    create table department2(
    id int primary key, #主键
    name varchar(20),
    comment varchar(100)
    );
    
    mysql> desc department2;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | YES  |     | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.00 sec)
    
    #方法三:在所有字段后单独定义primary key
    create table department3(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint pk_name primary key(id); #创建主键并为其命名pk_name
    
    mysql> desc department3;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | YES  |     | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.01 sec)
    ==================多列做主键================
    create table service(
    ip varchar(15),
    port char(5),
    service_name varchar(10) not null,
    primary key(ip,port)
    );
    
    
    mysql> desc service;
    +--------------+-------------+------+-----+---------+-------+
    | Field        | Type        | Null | Key | Default | Extra |
    +--------------+-------------+------+-----+---------+-------+
    | ip           | varchar(15) | NO   | PRI | NULL    |       |
    | port         | char(5)     | NO   | PRI | NULL    |       |
    | service_name | varchar(10) | NO   |     | NULL    |       |
    +--------------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    mysql> insert into service values
        -> ('172.16.45.10','3306','mysqld'),
        -> ('172.16.45.11','3306','mariadb')
        -> ;
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> insert into service values ('172.16.45.10','3306','nginx');
    ERROR 1062 (23000): Duplicate entry '172.16.45.10-3306' for key 'PRIMARY'

    作业:

    create table class(
    cid int primary key auto_increment,
    caption varchar(10)
    );
    
    
    insert into class(caption)values('三年二班'),('一年三班'),('三年一班');
    
    
    create table student(
    sid int primary key auto_increment,
    aname varchar(10),
    sex enum('male','female')default 'male',
    class_id int not null,
    foreign key(class_id) references class(cid)
    on delete cascade
    on update cascade
    );
    
    
    
    insert into student(aname,sex,class_id)values
    ('钢蛋','female',1),
    ('铁锤','female',1),
    ('山炮','male',2);
    
    
    create table teacher(
    tid int primary key auto_increment,
    tname varchar(10)
    );
    
    
    insert into teacher(tname)values('李明'),('王二'),('张三');
    insert into teacher (tname)values ('张磊老师'),('李平老师'),('刘海燕老师'),('朱云海老师'),('李杰老师');
    
    create table course(
    cid int primary key auto_increment,
    cname varchar(10),
    teacher_id int,
    foreign key(teacher_id) references teacher(tid)
    on delete cascade
    on update cascade
    );
    
    
    
    insert into course(cname,teacher_id)values
    ('生物',1),
    ('体育',1),
    ('物理',2);
    insert into course(cname,teacher_id)values('美术',3);
    
    create table score(
    sid int primary key auto_increment,
    student_id int,
    corse_id int,
    number int,
    foreign key(student_id) references student(sid)
    on delete cascade
    on update cascade,
    foreign key(corse_id) references course(cid)
    on delete cascade
    on update cascade,
    unique(student_id,corse_id)
    );
    
    
    insert into score(student_id,corse_id,number )values
    (1,1,60),
    (1,2,59),
    (2,2,100);
  • 相关阅读:
    2020春Contest
    HDU Count the string (KMP)
    P1757 通天之分组背包
    L1-050 倒数第N个字符串
    3月份目标
    Division UVa725
    数三角
    luogu P2051 [AHOI2009]中国象棋 dp 状态压缩+容斥
    Codeforces Round #654 (Div. 2) E
    Codeforces Round #654 (Div. 2) D
  • 原文地址:https://www.cnblogs.com/mengqingjian/p/7511665.html
Copyright © 2011-2022 走看看