它能够唯一确定一条表中的某条记录,给某条字段添加主键约束,使得它不重复也不为空,比如学号之类的
--给id添加主键 create table user( id int primary key, name varchar(20) ); --联合主键,是指两个字段不同时重复,例给id和name添加主键 create table user2( id int, name varchar(20), password varchar(20), primary key(id,name) ); --建表后再添加主键约束 alter table user2 add primary key(id); --删除主键 alter table user2 drop primary key;给id添加主键约束和自增约束,可以实现插入新数据时不输入id而自动增加id的值
create table user3( id int primary key auto_increment, name varchar(20) ); insert into user3(name) values('zhangsan'); insert into user3 values(2,'lisi');修饰的字段不能为NULL
create table user4( id int primary key auto_increment not null, name varchar(20) );当插入字段值的时候,如果没有传值,就会使用默认值
create table user4( id int , name varchar(20), age int default 10 );涉及到两个表,一个主表一个副表 1.主表中没有的数据值,副表是不可以引用的,比如主表班级数据中没有5班,副表学生表班级id绑定了主表的班级数据,则不能在副表中插入到5班 2.主表被引用的外键不允许被删除,比如说删除了主表班级表中的4班,则副表中的4班同学就不知道归属于哪了
--创建班级表,为主表 create table classes( id int primary key, name varchar(20) ); --创建学生表,为副表 create table student( id int primary key, name varchar(20), class_id int, foreign key(class_id) references classes(id) ); insert into classes values(1,'一班'); insert into classes values(2,'二班'); insert into classes values(3,'三班'); insert into classes values(4,'四班'); insert into student values(1001,'张三',1); insert into student values(1002,'张三',2); insert into student values(1003,'张三',3); insert into student values(1004,'张三',4); --报错 insert into student values(1005,'李四',5);