怎么用lamp做网站,东陵网站制作,图片下载网站哪个好,wordpress虚拟主机无法发邮件文章目录 空属性默认值列描述zerofill主键 本篇总结的是MySQL中关于表的约束部分的内容
空属性
在进行表的创建时#xff0c;会有两个值#xff0c;null和not null#xff0c;而数据库默认的字段基本都是空#xff0c;但是在实际的开发过程中要保证字段不能为空#xff… 文章目录 空属性默认值列描述zerofill主键 本篇总结的是MySQL中关于表的约束部分的内容
空属性
在进行表的创建时会有两个值null和not null而数据库默认的字段基本都是空但是在实际的开发过程中要保证字段不能为空因为数据为空就意味着不能进行参与运算
mysql select null;
------
| NULL |
------
| NULL |
------
1 row in set (0.00 sec)mysql select 1null;
--------
| 1null |
--------
| NULL |
--------
1 row in set (0.00 sec)如上所示数据为空时不能进行运算的
比如当创建一个班级表这个表中包含的信息有班级名和班级所在的教室的时候如果站在一个正常的业务逻辑的角度来讲班级没有名字就不知道是哪个班级教室没有名字就不知道在哪上课于是在进行设计的时候要对于表进行限制使得只有满足这个条件才能插入到数据表中这就是所谓的约束
我们创建一个这样的MySQL数据库
mysql create table myclass( class_name varchar(20) not null, class_room varchar(10) not null );
Query OK, 0 rows affected (0.07 sec)mysql desc myclass- ;
----------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
----------------------------------------------------
| class_name | varchar(20) | NO | | NULL | |
| class_room | varchar(10) | NO | | NULL | |
----------------------------------------------------
2 rows in set (0.01 sec)
这样就对于元素添加了限制的字样自此之后如果想要添加数据就必须要填写名字和教室了如果不填写是不可以插入进去的
mysql insert into myclass (class_name) values (yuwen);
ERROR 1364 (HY000): Field class_room doesnt have a default value
mysql insert into myclass (class_room) values (class1);
ERROR 1364 (HY000): Field class_name doesnt have a default value
mysql insert into myclass (class_name, class_room) values (yuwen, class1);
Query OK, 1 row affected (0.01 sec)默认值
下一个约束是默认值默认值的意思是对于某一种数据会经常性的出现某个具体的值就可以在一开始就指定好之后在插入数据的时候如果没有需要就用默认值需要就插入正常值
比如在程序员统计的时候大多数程序员都是男性所以在统计性别的时候可以默认选择男性如果有女性的信息也没关系可以直接插入具体如下所示
mysql create table info (- name varchar(20) not null,- age tinyint unsigned default 0,- sex char(2) default 男- );
Query OK, 0 rows affected (0.11 sec)mysql desc info;
----------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
----------------------------------------------------
| name | varchar(20) | NO | | NULL | |
| age | tinyint unsigned | YES | | 0 | |
| sex | char(2) | YES | | 男 | |
----------------------------------------------------
3 rows in set (0.00 sec)如上所示创建了一个人的信息表其中包含有名字年龄性别其中名字不可以忽略而年龄和性别都设置了缺省值
所以在插入数据的时候对于默认值可以选择插入也可以选择不插入
mysql insert into info (name, age, sex) values(小明, 15, 男);
Query OK, 1 row affected (0.01 sec)mysql insert into info (name, age) values(小亮, 16);
Query OK, 1 row affected (0.00 sec)mysql insert into info (name) values(小宏);
Query OK, 1 row affected (0.01 sec)mysql insert into info (name, sex) values(小红, 女);
Query OK, 1 row affected (0.00 sec)mysql select * from info;
--------------------
| name | age | sex |
--------------------
| 小明 | 15 | 男 |
| 小亮 | 16 | 男 |
| 小宏 | 0 | 男 |
| 小红 | 0 | 女 |
--------------------
4 rows in set (0.00 sec)由此可以看出默认值其实是生效了的
列描述
下一个介绍的约束项是列描述它的意思就是用来描述一个字段用来给程序员看的比如
mysql create table commentinfo(- name varchar(20) comment 要写入的是姓名,- sex char(2) comment 要写入的是性别- );
Query OK, 0 rows affected (0.04 sec)此时如果直接进行desc是看不到这个表的信息的但是如果选择的是show create table就可以看到了
mysql desc commentinfo;
-----------------------------------------------
| Field | Type | Null | Key | Default | Extra |
-----------------------------------------------
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
-----------------------------------------------
2 rows in set (0.00 sec)mysql show create table commentinfo\G
*************************** 1. row ***************************Table: commentinfo
Create Table: CREATE TABLE commentinfo (name varchar(20) DEFAULT NULL COMMENT 要写入的是姓名,sex char(2) DEFAULT NULL COMMENT 要写入的是性别
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci
1 row in set (0.00 sec)zerofill
下一个要介绍的约束项是zerofill比如在创建一个数据类型的时候可能填写的是int(10)
mysql create table t1 (- lenth int(10)- );
Query OK, 0 rows affected, 1 warning (0.04 sec)mysql desc t1;
----------------------------------------
| Field | Type | Null | Key | Default | Extra |
----------------------------------------
| lenth | int | YES | | NULL | |
----------------------------------------
1 row in set (0.00 sec)那么这个10是什么意思呢而这个10其实是和zerofill关系起来的我们给这个lenth这一列添加上zerofill的关键字设置
mysql alter table t1 change lenth lenth int(5) unsigned zerofill;
Query OK, 0 rows affected, 2 warnings (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 2此时插入信息进行查看就会发现这个现象
mysql insert into t1 (lenth) values (1);
Query OK, 1 row affected (0.01 sec)mysql select *from t1;
-------
| lenth |
-------
| 00001 |
-------
1 row in set (0.00 sec)可以看到本来应该存储的是1现在变成了00001这个就是zerofill属性的作用如果宽度小于设定的宽度那么就自动填充0但是实际在存储的时候还是存储的是1只是进行了一个格式化的输出而已
主键
主键表示的是标识字段里面的数据不能重复不能为空一个表中最多只能有一个主键主键所在的列通常是整数类型
mysql create table t2 (- id int unsigned primary key comment 学号不能重复,- name varchar(20) not null);
Query OK, 0 rows affected (0.03 sec)mysql desc t2;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int unsigned | NO | PRI | NULL | |
| name | varchar(20) | NO | | NULL | |
------------------------------------------------
2 rows in set (0.01 sec)这样就创建了主键下面进行插入数据
mysql insert into t2 (id, name) values(123, 小明);
Query OK, 1 row affected (0.00 sec)mysql insert into t2 (id, name) values(123, 小红);
ERROR 1062 (23000): Duplicate entry 123 for key t2.PRIMARY当插入两个相同id的信息时就会报错这说明id是不可以被重复的因为它是主键
这里需要注意的是主键只有一个并不意味着只能给一列添加主键还存在一个复合主键可以给多个列添加这写列合起来作为主键