zoukankan      html  css  js  c++  java
  • 约束 级联

    约束

      除了数据类型以外额外添加的约束和数据类型一样是可选参数,添加约束是为了保证数据的一致性,完整性,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充

    PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
    FOREIGN KEY (FK)    标识该字段为该表的外键
    NOT NULL    标识该字段不能为空
    UNIQUE KEY (UK)    标识该字段的值是唯一的
    AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
    DEFAULT    为该字段设置默认值
    
    UNSIGNED 无符号
    ZEROFILL 使用0填充
    

    not null  不可空 不添加约束条件not null 的话字段默认是null,插入数据时如果未设置则自动添加默认值

    mysql> create table t(id int);               #字段默认可以插入空
    Query OK, 0 rows affected (0.24 sec)
    
    mysql> desc t;    #查看表显示默认为null
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    1 row in set (0.01 sec)
    
    mysql> insert into t values();        #插入一个空的值
    Query OK, 1 row affected (0.06 sec)
    
    mysql> select * from t;    #查询到表内有一个 null 的记录
    +------+
    | id   |
    +------+
    | NULL |
    +------+
    1 row in set (0.00 sec)
    

    创建一个t2表设置为不能为空 插入一个空的数据 就会报错

    default 默认值约束 可以指定字段的默认值

    设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值

       create table user (id ind,name char(10) not null,sex char(1) default "man");

     

    unique 唯一性约束 该字段的值不能重复

    unique其实是一种索引,索引是一种数据结构,用于提高查询效率

    单列唯一约束

      create table t1(id char(10) unique);

    多列联合唯一约束

      create table t2(id char(10),number char(12),unique(id,number));

    多列情况下 两个都相同的就重复 单个不相同就不会

    设置唯一约束 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','技术');
    ERROR 1062 (23000): Duplicate entry 'IT' for key 'name'
    

    primary key主键约束 标识该字段为该表的主键,可以唯一的标识记录,从约束的角度来看主键约束和非空加唯一约束没有区别

      create table student(id int primary key);

    主键也可以多列联合 和上面的unique用法一样

    一张表中必须有且只有一个主键。主键的字段名基本上都叫id,主键的类型需要设置成整型,别的也可以但是最好不好设置其他的

    单列主键
    #方法一:not null+unique
    create table department1(
    id int not null unique, #主键
    name varchar(20) not null unique,
    comment varchar(100)
    );
    
    #方法二:在某一个字段后用primary key
    create table department2(
    id int primary key, #主键
    name varchar(20),
    comment varchar(100)
    );
    
    #方法三:在所有字段后单独定义primary key
    create table department3(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint pk_name primary key(id); #创建主键并为其命名pk_name
    
    多列做主键
    create table service(
    ip varchar(15),
    port char(5),
    service_name varchar(10) not null,
    primary key(ip,port)
    );
    

    auto_increment

    通常搭配主键字段使用 可以自动为你的数据分配逐渐增加

        create table t9(id int primary key auto_increment,name char(3));

    不指定id,则自动增长
    create table student(
    id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female') default 'male'
    );
    
    也可以指定id
    mysql> insert into student values(4,'a','female');
    
    mysql> insert into student values(7,'w','female');
    
    修改自动增长的起始位置  
        alter table t9 auto_increment = 7;
    也可以创建表时指定auto_increment的初始值,注意初始值的设置为表选项,应该放到括号外
    create table student(
      id int primary key auto_increment,
      name varchar(20),
      sex enum('male','female') default 'male'
      )auto_increment=3;
    
    对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长,应该用truncate清空表,
    比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它 自动增长 只能用于整型

     foreign key 专门用于为表和表之间建立物理关联

    两个表之间的关系有:多对一,多对多,一对一

    多对一
    
    create table dept(id int primary key auto_increment,name char(10),manager char(10));
    
    create table emp(id int primary key auto_increment,name char(10),dept_id int,
                               foreign key(dept_id) references dept(id));
    
    多对多 :用户表+用户与主机关系表+主机表
    先创建了一个教师表
    create table teacher (id int primary key auto_increment,name char(10));
    再创建一个学生表
    create table student (id int primary key auto_increment,name char(10));
                   create table t_s (t_id int,
                   s_id int,
                   foreign key(t_id) references teacher(id),
                   foreign key(s_id) references student(id)
                   );
    再创建一个存放教师和学生关系的关系表
    create table t_s (t_id int,
                   s_id int,
                   foreign key(t_id) references teacher(id),
                   foreign key(s_id) references student(id),
                   primary key(t_id,s_id)
                   );
    

    添加外键约束时: 被关联的表需要先被创建
             主表应该先插入 从表后插入
                              在删除数据前(主表)前 要保证该从表数据都删除了
                              在更新数据前 要先保证从表没有数据关联到主表

     
    级联:

    指的是就是同步更新和删除
    语法:在创建外键时 在后面添加 on update cascade 同步更新
                  on delete cascade 同步删除

    实例:
          create table class(id int primary key auto_increment,name char(10));
    
          create table student(
                  id int primary key auto_increment,
                  name char(10),
                  c_id int,
                  foreign key(c_id) references class(id)
                  on update cascade
                  on delete cascade
                  );
    
  • 相关阅读:
    perl 实现ascall 码转换
    perl 利用管道读取压缩文件内容
    perl 字符串比较操作符
    perl chomp 函数的真正作用
    RSQLite 操作sqlite数据库
    R 中的do.call 函数
    JavaMail发送和接收邮件API(详解)
    POP3_使用SSL链接邮箱并获取邮件
    MySql_delete同时删除多表相关联记录
    mybatis_mybatis写mapper文件注意事项
  • 原文地址:https://www.cnblogs.com/layerluo/p/9643204.html
Copyright © 2011-2022 走看看