表完整约束性
约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,是可以唯一的标识记录,不可以为空 UNIQUE+NOT NULL
(primary key)
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
(foreign key)
NULL 标识该字段是否允许为空,默认为NULL。
(null)
NOT NULL 标识该字段不能为空,可以修改。
(not null)
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
(unique key)
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
(auto_increment)
DEFAULT 为该字段设置默认值
(default)
UNSIGNED 无符号,正数
(unsigend)
修改字段是否为空的约束
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table t1 modify name varchar(12) not null;
mysql>alter table t1 modify name varcahr(12) null;
#修改该字段不允许为空 null为允许该字段为空
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
- 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum(‘male’,‘female’) not null default ‘male’ #只能选择maie和female,不允许为空,默认是male
mysql> create table 表名(id int(5),name varchar(10),sex enum('male','female') not null default 'male');
### 设置enum的默认值为male
取消默认值
mysql> alter table 表名 alter column 字段 drop default;
##取消表中该字段的默认值
实现表值的自动增长
mysql> create table 表名()
- auto_increment 自动增长约束。
自增--------自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况: - 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
- 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。
(每张表只能有一个字段为自曾) (成了key才可以自动增长)
mysql> create table t2(id int unique key auto_increment,name varchar(5));
#指定id字段自动增长。
(unique key 指定字段唯一性) (auto_increment 指定该字段数值自动增长。)
删除自动增长
mysql> alter table 表名 modify column 字段 int;
#重新定义id字段类型即可删除自动增长约束。
主键
每张表里只能有一个主键,不能为空,而且唯一,主键保证记录的唯一性,主键自动为NOT NULL。
一个UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键。
定义两种方式:
#表存在,添加约束
mysql> alter table 表名 add primary key (字段);创建表并指定约束
mysql> create table 表名(字段 char(20),字段2 char(150),primary key(字段));
删除主键
mysql> alter table 表名 drop primary key;
## 删除的仅是主键不会删除该字段的唯一性,需要额外执行删除唯一性约束sql语句。
唯一性约束
设置唯一约束 UNIQUE,字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值
mysql> create table 表名(字段 int unique);
为字段添加唯一性约束。
删除唯一约束:
在 MySQL 中,UNIQUE 约束会被视为一个唯一索引,因此需使用 DROP INDEX:
mysql> alter table t3 drop index 字段;
或者
mysql> alter table t3 drop key 字段;