zoukankan      html  css  js  c++  java
  • mysql-列属性

    列属性

    • 列属性是真正约束字段的数据类型,但是数据类型的约束很单一,需要有一些额外的约束来确保数据的合法性
    • NULL/NOT NULL、default、primary key、unique key、auto_increment、comment等

    空属性

    • NULL、NOT NULL两个值
    • 虽然数据库基本上字段都是默认的为空,但是实际上需要尽可能的保证所有数据都不应该为空,空数据没有任何意义,也没有办法参加与运算
    -- 创建表
    create table my_class(
        name varchar(20) not null,
        room varchar(20) null -- 代表允许为空: 不写默认就是允许为空
    )charset utf8;
    

    列描述

    • 列描述comment,是对字段进行注释备注,方便理解说明字段的功能和意义
    • 使用 comment '列描述' 进行定义
    -- 创建表
    create table if not exists my_teacher(
    	name varchar(20) not null comment '姓名',
    	money decimal(10,2) not null comment '工资'
    )charset utf8;
    

    默认值

    • 如果某一中数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要使用真实数据的时候,可以选择性的使用默认值
    • 使用 default '具体的值' 进行定义
    • 想要使用默认值,可以不一定去指定列表,故意不使用字段列表: 可以使用default关键字代替值
    -- 创建表
    create table if not exists my_default(
        name varchar(20) not null,
        age tinyint unsigned default 0,
        gender enum('男','女','保密') default '男'
    )charset utf8;
    
    -- 插入数据
    insert into my_default (name) values('王耀');
    
    insert into my_default values('李四',18,default);
    

    主键

    • 主键:primary key,一张表只能有一个字段可以设置为主键,用来唯一的约束该字段里面的数据,不能重复
    • 主键本身是不允许为空的
    1. 在创建表的时候直接在字段之后跟primary key 关键字进行设置主键,这种方式非常直接,但是只能使用一个字段作为主键,不能使用复合主键
    -- 直接跟primary key关键字
    create table if not exists my_pri1(
    	name varchar(20) not null comment 'username',
    	number char(10) primary key comment '编号,不能重复'
    )charset utf8;
    
    1. 在创建表的时候,在所有的字段都设置完之后,使用primary key(主键字段列表)来创建主键,如若是使用多个字段作为主键,这就是复合主键
    -- 使用复合主键
    create table if not exists my_pri2(
    	number char(10) comment 'username',
    	course char(10) comment '课程',
    	score tinyint unsigned default 60 comment '分数',
    	primary key(number,course) -- 复合主键,增加主键限制,number 和 course组合一起具有唯一性
    )charset utf8;
    
    1. 当表已经创建好之后,额外追加主键,前提是表中字段对应的数据本身是独立的不能重复
    create table if not exists my_pri3(
    	number char(10) comment 'username',
    	course char(10) comment '课程',
    	score tinyint unsigned default 60 comment '分数'
    )charset utf8;
    
    1. 通过修改表字段属性
    alter table my_pri3 modify course char(10) primary key comment '课程';
    
    1. 直接追加
    -- 需要先删除 再测试
    alter table my_pri3 drop primary key;
    -- 直接增加主键
    alter table my_pri3 add primary key(course);
    

    主键约束

    • 主键对应字段中的数据是不允许重复的,一旦重复,数据进行增和改操作会失败
    
    -- 向pri1表插入数据
    insert into my_pri1 values('古学星','0001'),('蔡仁湾','0002');
    insert into my_pri2 values('0001','39010001',90),('0001','39010002',85),('0002','39010001',92);
    
    -- 主键冲突(重复)
    insert into my_pri1 values('刘辉','0002'); -- 不可以: 主键冲突
    insert into my_pri2 values('0001','39010001',100); -- 不可以:冲突
    

    更新、删除主键

    • 主键是没有办法更新的,只有删除之后才能增加
    -- 删除主键
    alter table my_pri3 drop primary key;
    -- 只有删除主键之后才能增加新的主键
    alter table my_pri3 add primary key(course);
    

    主键分类

    • 在创建表的过程中,应该尽量不要使用真实业务数据作为主键字段,应该尽量使用逻辑性的字段作为主键字段
      • 业务主键: 主键字段是真实的业务数据,如学号、姓名等
      • 逻辑主键:主键没有实际的业务含义,字段值为什么并没有什么关系,也没有什么影响,
    -- 使用逻辑主键
    create table my_student(
    	id int primary key auto_increment comment ‘逻辑主键: 自增长’,	-- 逻辑主键
    	number char(10) not null  comment ‘学号’,
    	name varchar(10) not null
    )charset utf8;
    
    

    自增长

    • 自增长:当某个字段设置自增长,不给值或者给默认值或者NULL的时候,会自动被系统触发,系统会从当前字段中已有的最大值+1操作,得到一个新的唯一的字段
    • 自增长一般会搭配主键进行使用

    特点

    1. 任何一个字段要做自增长必须当前字段本身是一个所有(就是desc的时候,key一栏必须有值),否则不能添加自增长属性
    2. 自增长子弹必须是数字(整型)
    3. 一张表最多只能存在一个自增长字段
    -- 自增长
    create table my_auto(
    id int primary key auto_increment comment '自动增长',
    name varchar(10) not null
    )charset utf8;
    

    使用

    • 当自增长被给定的值为NULL或者默认值的时候会触发自动增长
    -- 触发自增长
    insert into my_auto(name) values('张三');
    insert into my_auto values(null,'李四');
    insert into my_auto values(default,'王五');
    
    • 自增长如果对应的字段输入了值,那么自增长失效: 但是下一次还是能够正确的自增长(从最大值+1)e
    -- 指定数据
    insert into my_auto values(6,'王六');
    insert into my_auto values(null,'李七'); -- id会从当前表中找到最大值然后加1
    
    
    • 可以通过查看表创建语句看到下一次自增长的值
    show create table my_auto;
    

    修改自增长

    • 自增长如果涉及到字段改变,必须先删除自增长,后增加,因为一张表最多只能存在一个自增长
    • 修改当前自增长已经存在的值,修改的值只能比当前已有的自增长耳朵最大值大,若是小则不生效
    -- 修改表选项的值
    alter table my_auto auto_increment = 4; -- 向下修改(小),不生效
    alter table my_auto auto_increment = 10; -- 向上修改 
    
    • 所有的系统变量(字符集、校对集等)都是由系统内部的变量进行控制的,那么就可以产看以及修改,虽然有些修改并无实际意义也无必要
    -- 查看自增长对应的变量
    show variables like 'auto_increment%';
    
    -- 修改自增长步长,可以修改变量实现不同的效果: 修改是对整个数据修改,而不是单张表: (修改是会话级)
    set auto_increment_increment = 5;
    
    -- 插入记录: 使用自增长,这时候自增长的步长是5
    insert into my_auto values(null,'王大');
    insert into my_auto values(null,'王二');
    

    删除自增长

    • 自增长是字段的一个属性,可以通过modify来进行修改(只要保证字段没有auto_increment就可以了)
    -- alter table 表名 modify 字段 类型
    -- 删除自增长
    alter table my_auto modify id int primary key; -- 错误: 主键理论是单独存在
    alter table my_auto modify id int; -- 有主键的时候,千万不要再加主键
    

    唯一键

    • 基本与主键差不多
    1. 在创建表的时候,直接在字段跟unique/unique key
    create table my_unique1(
        number char(10) unique comment '学号: 唯一,允许为空',
        name varchar(20) not null
    )charset utf8;
    
    1. 在所有的字段之后增加 unique key(字段列表),复合唯一键
    number char(10) not null comment '学号',
        name varchar(20) not null,
        -- 增加唯一键
        unique key(number)
    )charset utf8;
    
    1. 在创建表之后增加唯一键
    create table my_unique3(
        id int primary key auto_increment,
        number char(10) not null,
        name varchar(20) not null
    )charset utf8;
    
    -- 追加唯一键
    alter table my_unique3 add unique key(number);
    

    唯一键约束

    • 唯一键和主键本质基本相同,唯一区别就是唯一键默认是允许为空的,而且是多个为空
    • 若是唯一键也不允许为空,那么唯一键和主键的约束作用是一致的
    -- 插入数据,唯一键可以为空
    insert into my_unique1 values(null,'王大'),('0001','王二'),(null,'王三');
    insert into my_unique1 values('0001','王四');
    

    更新、删除唯一键

    • 因为唯一键是可以有多个的,所以可以不先删除后新增
    • 删除唯一键
    -- alter table 表名 drop unique key 索引名字
    -- 删除唯一键, unique key后面必须跟索引名字
    alter table my_unique3 drop index number;
    
  • 相关阅读:
    对软件工程的困惑
    团队作业(七)
    团队作业(六)
    团队作业(五)
    团队作业(四)
    团队作业(三)
    团队作业(二)
    团队作业(一)
    代码
    课余作业 采访
  • 原文地址:https://www.cnblogs.com/nordon-wang/p/9017227.html
Copyright © 2011-2022 走看看