主键约束----复合主键

主键约束
(一)概述
1、关键字 :primary key
2、特点:增加主键约束的列(字段)的值必须是非空 + 唯一的,一个表只有一个主键约束
3、作用:保证表中不会出现两条无法区分的记录
4、要求:每一张表都必须有主键约束
5、分类
单列主键约束
复合主键约束
(二)使用主键约束
1、创建主键约束
(1)在建表时指定主键约束
create table 【数据库名.】表名称(
字段1 数据类型 primary key,
字段2 数据类型,

);

create table 【数据库名.】表名称(
字段1 数据类型,
字段2 数据类型,
…,
primary key(字段1)
);

例如:
create table dept(
id int primary key,
name varchar(20),
description varchar(100)
);

create table dept(
id int ,
name varchar(20),
description varchar(100),
primary key(id)
);
mysql> desc dept;
±------------±-------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------------±-------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| description | varchar(100) | YES | | NULL | |
±------------±-------------±-----±----±--------±------+

insert into dept values(1,‘财务部’,‘发钱的’);
insert into dept values(1,‘财务部’,‘发钱的’);主键约束----复合主键_第1张图片

mysql> insert into dept values(1,‘财务部’,‘发钱的’);
ERROR 1062 (23000): Duplicate entry ‘1’ for key ‘PRIMARY’

(2)建表后指定主键约束
create table dept(
id int,
name varchar(20),
description varchar(100)
);
修改表结构:
alter table dept add primary key(id);

2、删除主键约束
修改表结构
alter table 表名称 drop primary key;

例如:
alter table dept primary key;

3、复合主键----

(1)在建表时指定主键约束
create table 【数据库.】表名称(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
…,

primary key(字段列表)

);

说明:复合主键不能在列后面加,需要单独指定

(2)建表后指定主键约束
alter table 【数据库.】表名称 add primary key(字段列表,字段列表);

例如:
create table stu(
sid int primary key, #学号
sname varchar(20) #姓名
);
create table course(
cid int primary key, #课程编号
cname varchar(20) #课程名称
);
create table score(
sid int, #学号
cid int, #课程编号
score int #对应的成绩
);

insert into stu values(1,‘张三’),(2,‘李四’);
insert into course values(1001,‘java’),(1002,‘mysql’);
insert into score values(1,1001,89),(1,1002,90),(2,1001,56),(2,1002,69);

mysql> select * from stu;
±----±------+
| sid | sname |
±----±------+
| 1 | 张三 |
| 2 | 李四 |
±----±------+
2 rows in set (0.00 sec)

mysql> select * from course;
±-----±------+
| cid | cname |
±-----±------+
| 1001 | java |
| 1002 | mysql |
±-----±------+
2 rows in set (0.00 sec)

mysql> select * from score;
±-----±-----±------+
| sid | cid | score |
±-----±-----±------+
| 1 | 1001 | 89 |
| 1 | 1002 | 90 |
| 2 | 1001 | 56 |
| 2 | 1002 | 69 |
±-----±-----±------+
4 rows in set (0.00 sec)

alter table score add primary key(sid,cid);
主键约束----复合主键_第2张图片

create table score(
sid int, #学号
cid int, #课程编号
score int, #对应的成绩
primary key(sid,cid)
);

变通成如下这种:
create table score(

id int,

没有业务意义,只是唯一标记一行

sid int,		#学号
cid int,		#课程编号
score int,		#对应的成绩

primary key(id)

);

你可能感兴趣的:(java基础,sql)