MySQL18

主键约束

主键约束,其特点是:
不允许表中有NULL记录;
不允许表中有重复记录;
每张数据表只能存在一个PRIMARY KEY约束;
创建主键约束后,系统将自动创建主键索引(是一种特殊的唯一索引);

-- 创建数据表时添加列级主键约束 
CREATE TABLE t4( 
    id SMALLINT UNSIGNED PRIMARY KEY, 
    username VARCHAR(20) 
); 
DESC t4; 
INSERT t4(id,username) VALUES(1,'Tom'); 
-- 创建数据表时添加表级主键约束 
CREATE TABLE t5( 
    first_name VARCHAR(10), 
    lASt_name  VARCHAR(20), 
    PRIMARY KEY (first_name,lASt_name) 
);    
DESC t5; 

主键约束经典面试题

创建如下结构的数据表t6
Field Type NULL KEY DEFAULT Extra
first_name VARCHAR(10) NO PRI NULL
last_name VARCHAR(20) NO PRI NULL
age tinyINT(3) unsigned YES NULL
----
CREATE TABLE t6( 
    first_name VARCHAR(10), 
    last_name  VARCHAR(20), 
    age        TINYINT UNSIGNED, 
    PRIMARY KEY (first_name,lASt_name) 
); 

插入记录时可能产生的错误

ERROR 1364 (HY000): Field 'id' doesn't have a DEFAULT value 
错误原因:插入记录时,没有为禁止为空且没有赋认值的字段进行赋值;
ERROR 1062 (23000): Duplicate entry '1' fOR KEY 'PRIMARY' 
错误原因:因主键值重复而导致插入/更新记录失败;
-- 创建表时,添加主键约束
CREATE TABLE word01(
	id INT PRIMARY KEY,
	name VARCHAR(30),
	age INT(3)
);
DESC word01;
INSERT INTo word01 VALUES(101,'张三',20);
INSERT INTo word01 VALUES(101,'李四',30);  --错误
INSERT INTo word01(name,age) VALUES('王五',35);  --错误

联合(复合)主键

使用主键约束来修饰两列或者多列

CREATE TABLE word02(
	id INT,
	name VARCHAR(30),
	age INT(3),
	PRIMARY KEY(id,name)
);
DESC word02;
-- 创建一张表,表名为word03,表中包含的字段有id INT(8),name VARCHAR(30),sex CHAR(3),age INT(3)
修改表时,对id列添加主键约束
CREATE TABLE word03(
	id INT(8),
	name VARCHAR(30),
	sex CHAR(3),
	age INT(3)
);
DESC word03;  --修改前
ALTER TABLE word03 ADD PRIMARY KEY(id);
DESC word03;  --修改后
-- 创建一张表,表名为word04,表中包含的字段有wid INT,wname VARCHAR(30),age INT(3),修改表时,对wid和wname列添加主键约束并验证
CREATE TABLE word04(
	wid INT,
	wname VARCHAR(30),
	age INT(3)
);
DESC word04;
ALTER TABLE word04 ADD PRIMARY KEY(wid,wname);
DESC word04;

删除主键约束

语法格式:

ALTER TABLE 表名 DROP PRIMARY KEY;
-- 删除word01表中主键约束并验证
ALTER TABLE word01 DROP PRIMARY KEY;
DESC word01;
上一篇:quartz(三)任务持久化-jdbc篇(一看就会)


下一篇:MySQL21