MySQL表的约束

目录

前言:

        空属性:

        默认值:

        列描述 :

        zerofill:

        主键:

        自增长 :

        唯一键:

        外键:


前言:

真正约束字段的是数据类型,但是数据类型约束很单一,有时候需要一些额外的约束,更好的保证数据的合法性,表的约束很多,这里重点介绍以下几个

  • null/not null
  • default
  • comment
  • zerofill
  • primary key
  • auto_increment
  • unique key

 

空属性:

  • 值:null和not null
  • 数据库默认基本字段都为空,但是实际开发要尽可能保证字段不为空,因为空数据没法参加运算
mysql> select null;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
mysql> select 1+null;
+--------+
| 1+null |
+--------+
|  NULL |
+--------+
1 row in set (0.00 sec)

例如:创建一个班级表,包含班级名和班级所在教室

按正常业务逻辑来看:

  • 如果班级没有名字,你就不知道你在哪个班级
  • 如果教室名字为空,你就不知道在哪里上课
  • 所以在设计数据库表的时候,一定要在表中限制,这就是约束 
mysql> create table myclass(
 -> class_name varchar(20) not null,
 -> class_room varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)

mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field     | Type      |Null   | Key  | Default | Extra|
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO      |     | NULL  |      |
| class_room | varchar(10) | NO      |     | NULL  |      |
+------------+-------------+------+-----+---------+-------+


//插入数据时,没有给教室数据插入失败:
mysql> insert into myclass(class_name) values('class1');
ERROR 1364 (HY000): Field 'class_room' doesn't have a default value

 

默认值:

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。 

mysql> create table tt10 (
 -> name varchar(20) not null,
 -> age tinyint unsigned default 0,
 -> sex char(2) default '男'
 -> );
Query OK, 0 rows affected (0.00 sec)
mysql> desc tt10;
+-------+---------------------+------+-----+---------+-------+
| Field | Type            | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name | varchar(20)       | NO     |    | NULL  |      |
| age  | tinyint(3) unsigned| YES    |    | 0     |     |
| sex  | char(2)          | YES    |    | 男    |      |
+-------+---------------------+------+-----+---------+-------+

  默认值的作用就是在插入时如果没有给该字段负值,就使用默认值

mysql> insert into tt10(name) values('zhangsan');
Query OK, 1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Obto-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值