• 约束条件


    一、介绍

    约束条件与数据类型的宽度一样,都是可选参数
    
    作用:用于保证数据的完整性和一致性
    主要分为:
    
    PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
    FOREIGN KEY (FK)    标识该字段为该表的外键
    NOT NULL    标识该字段不能为空
    UNIQUE KEY (UK)    标识该字段的值是唯一的
    AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
    DEFAULT    为该字段设置默认值
    
    UNSIGNED 无符号
    ZEROFILL 使用0填充
    说明:
    
    1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
    2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
    sex enum('male','female') not null default 'male'
    age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
    3. 是否是key
    主键 primary key
    外键 foreign key
    索引 (index,unique...)
    

    约束条件&not null&default

    not null 与 default
    是否可空,null表示空,非字符串
    not null - 不可空
    null - 可空 not null 示例: create table student( id int primary key auto_increment, 主键递增 name char(5), sex enum('male','female') not null ); insert into student(name,sex) values('alex',NULL) 插入成功,性别为空 需要限制,不能为空 sex enum('male','female') not null not null就是约束条件 insert into student(name,sex) values('alex',null) 报错,因为不能空了 default 示例: create table student( id int primary key auto_increment, 主键递增 name char(5), sex enum('male','female') , 默认值就是左边第一个 age int ); insert into student(name) values('alex'); 查看的效果就是除了名字后面都是NULL sex enum('male','female') not null; 有默认参数,默认时第一个参数,还是从左边开始 sex enum('male','female') not null default 'female'; 修改默认值 insert into t1(name) values('alex'); 就会看到,sex这块默认是female age int not null 加上这个,不为空,默认值是0 age int not null default 30 不为空,默认值30

     unique 唯一

    示例
        #单列唯一
        create table teacher(
        id int not null unique,  有值且唯一,这样写相当于主键
        name char(10)
        );
        insert into teacher values(1,'egon');
        insert into teacher values(1,'alex');
        插入报错,因为ID是唯一
    
    #多列唯一
        #255.255.255.255  IP地址最大的状态
        create table services(
        id int primary key auto_increment,
        name char(10),
        host char(15),
        port int,
        constraint host_port unique(host,port)
        );
        constraint 约束的意思,host_port 别名  unique(host,port) 表示这2个字段加起来都是唯一的,联合唯一
        insert into services values('ftp','192.168.20.17',8080);
        insert into services values('httpd','192.168.20.17',8081);
    
    primary key  唯一
        create table t8(x int,y int,primary key(x,y));
        查看显示2个主键,其实是一个,是x,y和起来的主键
        insert into t1 values(1,2);
        insert into t1 valyes(1,3)  都不会报错,除非是插入后,在插入相同的就会报错了,x,y主键是合起来的
    

     foreign key

    示例  部门信息
        #先建被关联的表,并且被关联的字段必须唯一
        create table dep(
        id int primary key auto_increment,      不为空,唯一,主键
        department varchar(50),
        comment varchar(100)
        );
    
        #在创建关联的表  员工信息
        create table emp_info(
        id int primary key auto_increment,
        name varchar(20),
        dep_id int,
        constraint(约束) fk_depid_id foreign key(dep_id) references dep(id)   让员工关联部门
        on delete cascade  不需要先删除/修改被关联的表内容,后面没有逗号 和上面是一行
        on update cascade
        );
        foreign key(dep_id) references dep(id)  创建关联,dep_id自己的字段,references引用关联,dep表的字段
        constraint fk_depid_id 起个别名,跟unique一样
    
    #插入数据 #先给被关联的表插入数据 insert into dep values (1,'欧德博爱技术有限事业部','说的好'), (2,'艾利克斯人力资源部','招不到人'), (3,'销售部','卖不出东西'); #再给关联的表插入数据 insert into emp_info values (1,'egon',1), (2,'alex1',2), (3,'alex2',2), (4,'alex3',2), (5,'李坦克',3), (6,'刘飞机',3), (7,'张火箭',3), (8,'林子弹',3), (9,'加特林',3);
    #删除操作 delete update delete from dep where id=2; 先删除被关联表 delete from emp_info where dap_id=2; 才能删除关联表 update user set uid=10 where uid=2; 修改关联表,关联表有修改,但是被关联表没有被修改 on delete cascade on update cascade 被关联的表删除或是修改,关联的表也会随之删除或是修改,这才合理 drop batle t1;删除表的时候,应该先删除被关联表,在删除关联表

      

     

  • 相关阅读:
    反射 Reflect Modifier 修饰符工具类
    【泛型】Generic 参数化类型 类型转换
    泛型 Generic 类型擦除引起的问题及解决方法
    注解 Annotation 简介 总结 MD
    反射 Reflect Class 基础 API MD
    【Type】类型 ParameterizedType
    Java中浮点类型的精度问题 double float
    jQuery之$.ajax()方法详解及实例
    pace.js – 加载进度条插件
    在线代码编辑、保存与运行网址推荐
  • 原文地址:https://www.cnblogs.com/z18271397173/p/9270473.html
Copyright © 2020-2023  润新知