【MySQL】基础学习——表的约束及增删改

表的约束

空属性

  1. 两个值:null和not null,默认字段都是空,但是实际中尽可能保证字段非空。
  2. not null表示此列不允许为空,必须做数据插入。
    这里写图片描述
    将age设置为not null,所以在插入数据时,age必须有数据,否则就会报错。

默认值

  1. 如果某一属性,经常性出现,可以在一开始就指定数据;
  2. 默认值配合not null一起使用;
  3. set和enum不允许设置默认值
    这里写图片描述
    age设置为非空,默认为0;sex默认设置为“男”。

列描述

comment 仅作为描述列的作用,没有实际含义,要查看当前表的描述信息,使用show create table table_name查看。
这里写图片描述
需要注意的是comment并不但能同于注释,注释只有在创建的时候能看到。
这里写图片描述

自动填充名

  1. 如果某一列数值列规定了zerofill,则自动把此列变为无符号列;
  2. 规定了zerofill的数值列,如果数据长度没有达到规定长度,则在数据前自动填充0
    这里写图片描述

主键

  1. 主键用于唯一约束字段数据,使用主键约束的字段,不能为空,不能重复;
  2. 一张表中只能有一个主键,但是可以是几列一起构成复合主键;
  3. 单主键所在的列为整数数据类型
    a. 设置id为主键
    这里写图片描述
    b. 设置name和宿舍为复合主键
    这里写图片描述
    c. 创建表以后添加主键或删除主键
    注意:要添加为主键的字段已存在的数据,必须不能为空,不能重复。
    这里写图片描述

自增长

  1. 任何一个字段要做自增长,其本身必须是索引(key一栏必须有值)
  2. 自增长必须为整数;
  3. 一张表有且只能有一个自增长;
  4. 一般与主键配合使用 id+auto_increment:逻辑主键
    这里写图片描述
    注意:指定自增数值后,以后的自增以此为基础;删除指定列后,还是以最大值为基础自增。
    这里写图片描述

唯一键

  1. 唯一键允许为空,但是不能重复,一张表可以有多个字段设置唯一;
  2. 唯一键解决表中多个字段需要唯一性约束的问题
    这里写图片描述
    注意:
  3. null是不做比较的,可以允许有多个null;
  4. 这里id的类型是char类型,但是是可以输入整数的;反过来,如果id类型是int类型,那么输入的字符串如果是数字,就可以插入成功,如果不是,就会报错。
    这里写图片描述

表的增删改

1. 增加

insert into table[(column[,column...])] 
    values (value [,value...]);

表的增加操作,我们之前一直在使用,在此不再举例,只说明几点需要注意的:
1. 插入的数据应与字段的数据类型相同;
2. 数据的大小应在规定的范围内,不能把一个长度为80的字符串插入到长度为40的列中;
3. 在values中列出的数据位置必须与被加入的列位置相对应,即顺序不能反;
4. 字符和日期类型应该包含在单引号中;

在插入数据的时候,如果主键对应的值已经存在,那么就会插入失败,我们可以选择性的进行处理:

1. 更新操作

insert into 表名(字段列表) values(值列表) on duplicate key update 字段=新值; 

将id为1对应的name由a更新为c
这里写图片描述

2. 替换操作

replace into 表名(包含字段) values(值列表);

这里写图片描述
替换操作实际上是先删除这一行,然后再插入,因此操作成功后,显示的是2 rows in set
如果那一行存在的话,那么替换那一行,如果那一行不存在,那么添加那一行。

修改

update tbl_name set col_name1=expr1, [, col_name2=expr2 ...] [where conditon]

update使用细节:
1. update语法可以用新值更新原有表中的各列;
2. set子句只是要修改哪些列和要给予哪些值,可以更新多个字段set 字段1=值1,字段2=值2
3. where子句指定应该更新哪些行,如果没有where子句,则更新所有行。
这里写图片描述

  1. 第一个例子是没有where子句,将所有name都改为’小红’;
  2. 第二个例子是指定id为1的name改为‘小明’;
  3. 第三个例子是指定name为’小红’的前两个数据改为’西红柿’。

删除

delete from tbl_name [where condition]
  1. 如果没有where子句,那么数据将会被一行一行的删掉;
  2. 如果要删除整个表的记录,也可以使用truncate;
  3. 带where子句:删除满足条件的记录;
  4. delete只删除数据,不会影响表的结构;

delete和truncate的区别:
1. 效果一样,但是truncate更快;
2. delete可以带where子句,删除更加灵活;
3. delete可以返回被删除的记录数,而truncate返回0。
这里写图片描述
在练习删除时,可以复制一份表,避免数据被删除:

1. 复制表结构
create table tt1 like tt7;
2. 把tt7中的数据赋值到tt1中
insert into tt1 select* from tt7;

猜你喜欢

转载自blog.csdn.net/wei_cheng18/article/details/80316742