1.主键
主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键(联合主键)。
** 1) 一个表中只能有一个主键。**如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。
2)主键的值不可重复,也不可为空(NULL)。
3)主键值不能被重复
主键用PRIMARY KEY()表示

例如:
CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
年龄 INT(2),
生日 DATE,
PRIMARY KEY(姓名)     //将姓名设置为主键,姓名的值不能重复,且不能为空,就像身份证一样作为识别他的依据,一个表中只有一个主键,具有唯一性
)ENGINE = INNODB;

当有两个名字的值是一模一样的时候就报错
2.联合主键
联合主键就是用2个或2个以上的字段组成主键。
联合主键用PRIMARY KEY(字段1,字段2)表示

接着上面代码所示,列如:
CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
年龄 INT(2),
生日 DATE,
PRIMARY KEY(姓名,年龄)     //将姓名和年龄设置为联合主键,具有唯一性,只有姓名和年龄都i一样的时候才报错
)ENGINE = INNODB;
向表中插入信息李四 20 03.06和李四 18 01.16
李四 20和李四18或张三 20 和张李四 20都不会报错
只有当两个属性都一样的时候才报错如李四 20和李四20

3.替代键
替代键用UNIQUE代表

例如
CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
年龄 INT(2),
生日 DATE,
UNIQUE(姓名)     //将姓名设置为替代键,和主键一样。不能出现重复的值具有唯一性,但是和主键不一样的是,一个表中可以设置多个替代键,而且他的值可以为空
)ENGINE = INNODB;

4.非空约束:该字段不允许有空值(必填)
NOT NULL

CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10) NOT NULL,    //设置姓名必须填
年龄 INT(2),
生日 DATE,
)ENGINE = INNODB;

5.check(),控制数据在某一范围内

```sql
CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
性别 char,
年龄 INT(2),
生日 DATE,
CHECK(性别 IN('男','女'))        //设置性别只有男女范围内
)ENGINE = INNODB;

4.联合替代键
联合替代键用UNIQUE(字段1,字段2) 道理和联合主键一样,只是一个表里可以有多个联合替代键
5.外键
外键其实就是将两个表连接起来的键。
列如现在有一张表

CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
性别 char,
年龄 INT(2),
生日 DATE
)ENGINE = INNODB;

每一个对象都有其姓名年龄和生日,现在还想加入他们的成绩和班级,而这些信息在另一张表中怎么办?

CREATE TABLE IF NOT EXISTS tem2
(姓名 VARCHAR(10),
成绩 INT(10),
班级 TEXT
)ENGINE = INNODB;

主键与替代键的区别不大,但是那个区别的作用很大,一个表中只能有一个主键,而被设为主键的那个元素就是区别他们的依据,他们不可以重复就像身份证一样,但是他是可以更改的,只是不能重复。
而替代键在一个表中可以设置多个元素是替代键。
而要想把两张表链接,就是依靠那个唯一不重复的主键,所以要想把两表链接
1.先有主键才有外键
2.把要来判断唯一性的那个设置为主键和外键
分为主表和从表,被依赖的那个为主表,另一个为从表,主表设置为主键,从表为外键

CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
性别 char,
年龄 INT(2),
生日 DATE,
PRIMARY KEY(姓名)//将需要判断唯一性的值设置主键
)ENGINE = INNODB;


CREATE TABLE IF NOT EXISTS tem2
(姓名 VARCHAR(10),
成绩 INT(10),
班级 TEXT,
FOREIGN KEY(姓名) REFERENCES tem1(姓名)//把可以与主表相对应的元素设置外键
)ENGINE = INNODB;

相当于

CREATE TABLE IF NOT EXISTS tem1
(姓名 VARCHAR(10),
性别 char,
年龄 INT(2),
生日 DATE,
成绩 INT(10),
班级 TEXT
)ENGINE = INNODB;