### primary key 主键
#1.primary key不能重复而且不能为null
#2.一张表最多一个主键,但可以是复合主键
mysql> create table clerk(
-> id int,
-> name varchar(10),
-> age int,
-> primary key(id,name));
Query OK, 0 rows affected (0.02 sec)
#3.主键的指定方式有两种
直接在字段名后指定
mysql> create table clerk1(
-> id int primary key,
-> name varchar(10));
Query OK, 0 rows affected (0.01 sec)
在表定义最后写 primary key (列名)
mysql> create table clerk2(
-> id int ,
-> name varchar(10),
-> primary key(id));
Query OK, 0 rows affected (0.01 sec)
### not null 非空
### 如果在列上定义了not null ,那么当插入数据时,必须为列提供数据
### unique 唯一
### 该列值不能重复
### 如果没有指定not null ,则unique字段可以有多个null
### 一张表可以有多个unique字段
### unique not null 使用效果类似 primary key
### foreign key外键
#1.外键指向表的字段,要求是primary key 或者是unique
#2.表的类型是innodb,这样的表才支持外键
#3.外键字段的类型要和主键字段的类型一致,长度可以不同
#4.外键字段的值,必须在主键字段中出现过,否则为null
#5.一旦建立外键的关系,数据就不能随意删除
mysql> create table my_class(
-> id int primary key,
-> name varchar(10));
Query OK, 0 rows affected (0.03 sec)
mysql> create table my_stu(
-> id int,
-> name varchar(10),
-> class_id int,
-> foreign key(class_id) references my_class(id));
### check mysql5.7目前还不支持check 只做语法校验,但不会生效
### oracle sql server 这两个数据库是真的生效
mysql> create table xxx(
-> id int primary key,
-> name varchar(10) check(name in ("zs","ls")));
Query OK, 0 rows affected (0.03 sec)
### auto_increment 自增长
#增加自增长的字段方式
insert into xxx(字段1,字段2,...) values(null,value,value...)
insert into xxx(字段2,字段3,...) values(value,value,...)
insert into xxx values(null,value,value,..)
#注意事项
1.一般自增长和primary key配合使用
2.自增长也可以单独使用,但需要配合一个unique
3.自增长修饰的字段为整形的
4.自增长默认从1开始,也可以修改 alter table 表名 auto_increment=新的开始值
5.如果给定值,下一次自增长将按照最大值的下一个进行添加