mysql 基础-约束
mysql 基础--约束
主键约束
1 在创建主键时候如果有auto_increment关键字,那么必须设置为主键,否则报错
mysql> create table t2( -> id smallInt unsigned auto_increment, -> username varchar(30) not null -> ); 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
设置成主键后
mysql> create table t2( -> id smallInt unsigned auto_increment primary key, -> username varchar(30) -> ); Database changed
显示字段的详细信息
mysql> show columns from t2; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(30) | YES | | NULL | | +----------+----------------------+------+-----+---------+----------------+ 2 rows in set
唯一约束
mysql> create table t3( -> username varchar(20) unique key); Database changed mysql> show columns from t3; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | username | varchar(20) | YES | UNI | NULL | | +----------+-------------+------+-----+---------+-------+ 1 row in set mysql> insert into t3 values('zhang'); Query OK, 1 row affected mysql> insert into t3 values('zhang'); 1062 - Duplicate entry 'zhang' for key 1
添加的空的话会不会唯一呢?
mysql> insert into t3 values(); Query OK, 1 row affected mysql> insert into t3 values(); Query OK, 1 row affected mysql> insert into t3 values(); Query OK, 1 row affected mysql> select username from t3; +----------+ | username | +----------+ | NULL | | NULL | | NULL | | NULL | | zhang | +----------+
默认约束,没有值的情况下的约束
mysql> create table t5( -> username varchar(30) default 'zhangsan' -> ); mysql> insert into t5 values(); Query OK, 1 row affected mysql> select username from t5; +----------+ | username | +----------+ | zhangsan | +----------+ 1 row in set
非空约束
mysql> create table t6( -> username varchar(20) not null); Database changed mysql> insert into t6 values(); 1364 - Field 'username' doesn't have a default value
外键约束 PROEIGN KEY
1保持数据一致性,实现一对一或者一对多的关系
2要求 父表子表必须使用相同的存储引擎 innoDB ,default -storage-engine=INNODB
3禁止使用临时表,必须据说相似的数据类型
4 外键列跟参照列必须创建索引
mysql> create table dept( -> id smallint auto_increment primary key, -> deptName varchar(20));
mysql> create table user(
-> uid smallint auto_increment primary key,
-> username varchar(20),
-> deptId smallint,
-> FOREIGN KEY(deptId) REFERENCES dept(id));
Database changed
查索引命令用show index from user;