zoukankan      html  css  js  c++  java
  • 表的约束创建和增删改查

    表的约束创建和增删改查

    一、表的创建

    格式:create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    )engine=innodb charset=utf8;

    注:[]可选参数

    eg>>: create table db1.t1(name char(3) not null);

    注:1)数据插入时,name不能为空(null), 且最长只能存放三个字符

    ​ 2)宽度和约束条件为可选参数, 用来限制存放数据的规则

    二、约束条件

    2.1 约束条件

    1. primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段(一条记录)
    2. foreign key:外键
    3. unique:唯一性数据, 该条字段的值需要保证唯一,不能重复(一个字段)
    4. auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段
    5. foreign key 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)
    6. not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值
    7. default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值
    8. unsigned:无符号 - 存储的数字从0开始
    9. zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充

    2.2 约束实例

    1. not null 字段不可以为空

    mysql>: create table td1 (x int not null, y int default 0, z int default 100);

    1. auto_increment 自增

      • 报错,auto_increment必须设置给 键字段
      • 报错,auto_increment必须设置给 int字段
      • 报错,auto_increment字段最多出现 1次

    报错,auto_increment必须设置给 键字段>
    mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);

    报错,auto_increment必须设置给 int字段>
    mysql>: create table td2 (x char(4) auto_increment);

    报错,auto_increment字段最多出现 1次>
    mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);

    1. primary key 主键(记录)和unique 唯一键(字段)

    x为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键>
    mysql>: create table td21 (x int unique auto_increment, y int unique);

    y为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键=>
    mysql>: create table td22 (x int unique, y int unique auto_increment);

    x为主键:设置了主键就是设置的,主键没设置自增,那自增是可以设置在唯一键上的
    mysql>: create table td23 (x int primary key, y int unique auto_increment);

    x为主键:设置了主键就是设置的,主键设置了自增,自增字段只能有一个,所以唯一键不能再设置自增了
    mysql>: create table td24 (x int primary key auto_increment, y int unique);

    默认主键:没有设置主键,也没有 唯一自增键,那系统会默认添加一个 隐式主键(不可见)
    mysql>: create table td25 (x int unique, y int unique);

    唯一键:确保一个字段,数据不能重复

    主键:是一条记录的唯一标识(可以理解为数据的编号)

    1. 联合唯一

    ip在port不同时,可以相同,ip不同时port也可以相同,均合法>
    ip和port都相同时,就是重复数据,不合法>
    mysql>: create table tu1 (ip char(16), port int, unique(ip, port));

    也可以设置成 联合主键,道理同 联合唯一>
    mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));

    1. 、foreign key 外键

    foreign key(所在表的外键字段) references 关联表(关联字段)

    • 1、外键的 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)

    • 2、外键要通过 foreign key 语法建立表与表之间的关联

    • 3、foreign key(所在表的外键字段) references 关联表(关联字段)

      eg: foreign key(detail_id) references author_detail(id)

    • 4、级联关系

      级联更新 on update cascade

      级联删除 on delete cascade

    • 5、外键格式

    格式:foreign key(所在表外键) references 关联表名称(id) on update cascade on delete cascade;

    eg>>: foreign key(detail_id) references author_detail(id) on update cascade on delete cascade

    外键字段本身可以唯一或不唯一,但是外键关联的字段一定唯一

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    Can't locate ... in @INC
    c++写一个类后编译发现class重定义
    python with
    遍历Java Map
    mod_jk notes
    NPM使用总结
    Yeoman
    Java中的Marker Interfaces有什么用
    有关Ehcache的内容的引用和Java的deep copy
    JDBC的PreparedStatement语句使用记录
  • 原文地址:https://www.cnblogs.com/randysun/p/11629803.html
Copyright © 2011-2022 走看看