MySQL设置字段可为空默认给0 mysql设置字段允许为空

您所在的位置:网站首页 flush属性的默认值 MySQL设置字段可为空默认给0 mysql设置字段允许为空

MySQL设置字段可为空默认给0 mysql设置字段允许为空

2023-06-21 20:20| 来源: 网络整理| 查看: 265

文章目录1 空属性2 默认值3 列描述4 zerofill5 主键复合主键6 自增长7 唯一键8 外键

目的:保证数据的合法性,从业务逻辑角度保证数据的正确性

数据类型也算是一种约束

1 空属性

null:字段为空,表示不存在(未填写) not null:不为空

// 说明null != 0 mysql> select * from tnull; +--------+------+ | name | age | +--------+------+ | 张三 | NULL | | 李四 | 0 | +--------+------+

设置字段不能为空的约束:在创建表时数据类型后加not null

mysql> create table if not exists tnotnull( name varchar(16) not null, age int not null )engine=innodb default // null一列都显示为NO,即不能为NULL mysql> desc tnotnull; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(16) | NO | | NULL | | | age | int(11) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+

此时向tnotnull插入时只能同时插入两列信息

2 默认值

关键字:default default和not null同时设置时,not null不起作用

mysql> create table tdefault( name varchar(16) not null, age int default 18, sex char(1) default '男' )engine=innodb default charset=utf8; // age和sex的default列有值 mysql> desc tdefault; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(16) | NO | | NULL | | | age | int(11) | YES | | 18 | | | sex | char(1) | YES | | 男 | | +-------+-------------+------+-----+---------+-------+//只插入姓名,年龄和性别也不是空,而是默认值 mysql> insert into tdefault (name) values ('张三'); mysql> select * from tdefault; +--------+------+------+ | name | age | sex | +--------+------+------+ | 张三 | 18 | 男 | +--------+------+------+3 列描述

关键字:comment 作用:给字段添加一个描述,可以用来解释字段含义

mysql> create table if not exists tcomment( name varchar(16) not null, age int not null comment '用户的年龄' )engine=innodbdefault charset=utf8; // show create table tablename查看建表时的详细信息,\G调整显示的格式 mysql> show create table tcomment \G *************************** 1. row *************************** Table: tcomment Create Table: CREATE TABLE `tcomment` ( `name` varchar(16) NOT NULL, `age` int(11) NOT NULL COMMENT '用户的年龄' ) ENGINE=InnoDB DEFAULT CHARSET=utf84 zerofill

和数据类型后面括号里的数字有关

mysql> create table if not exists tzerofill( a int(5) unsigned default 0, b int(5) unsigned zerofill default 0 )engine=innodb default charset=utf8; // 可以看到设置了zerofill之后默认值和插入值的不同:显示结果位数不够会用0填充 // 同时说明int(5)括号内的5指的是显示宽度为5 mysql> desc tzerofill; +-------+--------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------------------+------+-----+---------+-------+ | a | int(5) unsigned | YES | | 0 | | | b | int(5) unsigned zerofill | YES | | 00000 | | +-------+--------------------------+------+-----+---------+-------+ mysql> insert into tzerofill (a,b) values (10,10); mysql> insert into tzerofill (a,b) values (10,123456); mysql> select * from tzerofill; +------+--------+ | a | b | +------+--------+ | 10 | 00010 | | 10 | 123456 | +------+--------+5 主键

关键字:primary key 功能:表中特定的唯一标识,来表示唯一性,可以根据主键来提取唯一的记录

mysql> create table if not exists tpkey( id int unsigned primary key comment '用户id,主键', name varchar(16) not null )engine=innodb default charset=utf8; // 可以看到设置主键的id自动设置成不能为空了 mysql> desc tpkey; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | id | int(10) unsigned | NO | PRI | NULL | | | name | varchar(16) | NO | | NULL | | +-------+------------------+------+-----+---------+-------+ mysql> insert into tpkey (id,name) values (10,'张三'); mysql> insert into tpkey (id,name) values (10,'李四');//插入失败,主键重复 ERROR 1062 (23000): Duplicate entry '10' for key 'PRIMARY' mysql> insert into tpkey (id,name) values (20,'张三'); mysql> select * from tpkey; +----+--------+ | id | name | +----+--------+ | 10 | 张三 | | 20 | 张三 | +----+--------+复合主键

主键的一种,复合主键的所有插入选项都相同,才称为主键冲突 primary key(column1,column2);

6 自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键,一张表只能有一个自增长 设置的同时需要指定primary key或unique

7 唯一键

unique,不可重复,可以为null(null:没有字段) 当没有指定主键时,unique + not null = primary key 主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复

mysql> create table tunique( id int primary key, sno char(8) unique not null); mysql> desc tunique; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | sno | char(8) | NO | UNI | NULL | | +-------+---------+------+-----+---------+-------+ mysql> create table tunique2(sno char(8) unique not null); mysql> desc tunique2; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | sno | char(8) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+ mysql> create table tunique3( id int unique not null, sno char(8) unique not null); mysql> desc tunique3; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | sno | char(8) | NO | UNI | NULL | | +-------+---------+------+-----+---------+-------+ mysql> create table tunique4( id int unique not null, sno char(8) primary key); mysql> desc tunique4; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | UNI | NULL | | | sno | char(8) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+8 外键

foreign key,定义主表和从表的关系,外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null 含义:从表需要通过外键依附于主表

// references后填写主表的表名和列名 foreign key columnname references tablename(columnname);

外键: 外键是用来形成表和表关系的字段,两张表通过外键产生了逻辑上的关联 外键约束: mysql在操作上要维护外键产生的逻辑关系的正确性,完整性,强约束两表之间的关系



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3