主键(Primary Key)
表中有一列或几列组合的值能用来唯一地标识表中的每一行,这样的一列或者多列的组合叫做表的主键。
如:学号可以作为学生表的主键,课程号可以作为课程表的主键,(学号,课程号)作为成绩表的主键(组合键)
说明:
(1)一个表只能有一个主键,主键约束确保了表中的行是唯一的。
(2)表中可以没有主键,但是通常情况下应当为表设置一个主键。
选择主键的原则:
最少性:尽量选择单个键作为主键
稳定性:尽量选择数值更新少的列作为主键
主键
1、主键PRIMARY KEY
作用:DBMS为了方查找数据库,设计的一个规则
特点:
一张表里面主键是唯一的;
主键可以用来唯一的标识一行数据,主键不能为空,
联合主键:表中字段不能作为唯一标识每一行数据时,选取表中两个或者多个字段作为联合主键
联合主键的特点:如果去掉联合主键某个字段,剩下的字段任然可以构成联合主键,那么说明之前的联合主键是错误的
在修改表时添加主键
alter table user add primary key(id);
删除主键:
alter table user drop primary key;
创建表的时候设置主键:
方式一:
create table class(
-> id int(11) primary key,
-> name varchar(12)
-> );
方式二:
create table class1(
-> id int(11),
-> name varchar(12),
-> primary key(id)
-> );
创建联合主键:
create table user1(
-> name char(16),
-> gender char(10),
-> birthday date,
-> city varchar(16),
-> primary key(name,city)
-> );
2、主键自增 AUTO_INCREMENT
通过auto_increment设置主键自增
特点:
和主键结合使用,
自增字段的数据类型是整数类型
自增的数据开始值是1,没增加一行数据,自增1
添加自增
create table tb_dept10(
id INT(11) PRIMARY key AUTO_INCREMENT,
name VARCHAR(25),
location VARCHAR(50)
);
设置自增默认值
CREATE TABLE tb_dept11(
id INT(11) PRIMARY key auto_increment,
name VARCHAR(25),
location VARCHAR(50)
)auto_increment=100;
删除自增
ALTER TABLE tb_dept10 MODIFY id int(11);
在修改表时设置自增
ALTER TABLE tb_dept12 CHANGE COLUMN id id INT(11) auto_increment;
修改表时指定初始值
ALTER TABLE tb_dept12 auto_increment=100;
3、直接在字段定义后面声明主键
CREATE TABLE demo(
ID INT PRIMARY KEY,
………
)
4、用constraint声明主键
CREATE TABLE demo(
ID INT,
………,
– 外键命名规范:pk_表名,
CONSTRAINT pk_demo PRIMARY KEY (ID))
也可以简写成:
CREATE TABLE demo(
ID INT,
NAME VARCHAR(10),
………,
PRIMARY KEY (ID, NAME)) – 复合主键
4.删除主键
ALTER TABLE demo DROP PRIMARY KEY;
给ID创建主键
字段和主键同时定义并设定自增长
给VIP字段创建唯一约束
试图为该字段插入重复的
数据时会提示错误信息
定义vip字段唯一
CREATE TABLE demo(
……
vip VARCHAR(50) UNIQUE,
………
)
给name字段创建非空约束
定义name字段非空
试图为该字段插入空值时
数据库会提示错误信息
CREATE TABLE demo(
……
name VARCHAR(50) NOT NULL,
………
给性别字段创建检查约束
Mysql原生并不支持检查约束。
对于离散值可使用set或enum
方式解决。对于连续值只能通
过触发器解决。
试图为该字段插入除”男”、
“女”外的值会报错
CREATE TABLE demo(
……
sex SET(‘男’, ‘女’),
payment ENUM(‘货到付款’, ‘在线支付’)
………
创建默认值
试图为该字段插入重复的
数据时会自动填充
给name字段创建非空约束
定义tel字段默认值
CREATE TABLE demo(
……
tel VARCHAR(50) DEFAULT ‘default’,
………
外键(Foreign Key)
简单地说,就是“子表”中对应于“主表”的列,在子表中称为外键或者引用键。
它的值要求与主表的主键或者唯一键相对应,外键用来强制引用完整性。例如在成绩表中,学号为外键。一个表可以有多个外键。
3、外键CONSTRAINT fk_rl FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
表间关系:
一对一
一对多
多对多
MySQL5.6中文支持问题
DEFAULT CHARSET=GB2312;
查看创建表是sql
show create table 表名;
外键特点:
外键关联时主表要先去从表创建
外键字段的值必然在主表中是可以一一对应的
外键可以为空,但是不为空的外键必然可以在主表中跟它对于
外键关联的必然是主表的主键
创建外键约束
CREATE TABLE score (
id int(10) NOT NULL PRIMARY KEY auto_increment,
sid INT(10),
name varchar(50) DEFAULT NULL,
subject varchar(50) DEFAULT NULL,
score varchar(50) DEFAULT NULL,
CONSTRAINT fk_sid
FOREIGN KEY(sid) REFERENCES studentinfo(id)
)ENGINE=InnoDB DEFAULT CHARSET=GB2312;
修改变时添加外键约束
alter table 表名 add CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES studentinfo(id)
删除外键约束
ALTER TABLE score drop FOREIGN KEY 外键名