1. 主键约束
- 主键:一张表的唯一标识。原则上:每张表必须有主键,且只能有一个主键
- 主键约束:
- 特点:被主键约束的字段,值必须是非空、唯一
- 语法:primary key
CREATE TABLE product(
id INT PRIMARY KEY,
pname VARCHAR(100),
price DOUBLE
);
INSERT INTO product (id,pname,price) VALUES (1,'Thinkpad T490', 8999);
INSERT INTO product (id,pname,price) VALUES (1,'macbook pro', 15999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
- 要求:主键字段必须是整数类型,MySql会自动生成主键值:1,2,3, … +1
- 语法:primary key auto_increment
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100),
price DOUBLE
);
INSERT INTO product (id,pname,price) VALUES (NULL,'Thinkpad T490', 8999);
INSERT INTO product (id,pname,price) VALUES (NULL,'macbook pro', 15999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
2. 唯一性约束
- 效果:唯一性约束的字段,值不能重复,但是可以为null
- 语法:字段名 类型 unique
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100) UNIQUE,
price DOUBLE
);
INSERT INTO product (id,pname,price) VALUES (NULL,'Thinkpad T490', 8999);
INSERT INTO product (id,pname,price) VALUES (NULL,'macbook pro', 15999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
INSERT INTO product (id,pname,price) VALUES (NULL,NULL, 5999);
3. 非空约束
- 效果:非空约束的字段,值不能为null
- 语法:字段名 类型 not null
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100) UNIQUE NOT NULL,
price DOUBLE
);
INSERT INTO product (id,pname,price) VALUES (NULL,'Thinkpad T490', 8999);
INSERT INTO product (id,pname,price) VALUES (NULL,'macbook pro', 15999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
INSERT INTO product (id,pname,price) VALUES (NULL,'lenovo', 5999);
INSERT INTO product (id,pname,price) VALUES (NULL,NULL, 5999);
4. 默认值约束
- 效果:默认值约束的字段,如果不指定值,取默认值(如果指定null值,值就是null,不取默认值)
- 语法:字段名 类型 default 默认值
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100) UNIQUE NOT NULL,
price DOUBLE DEFAULT 0
);
INSERT INTO product (id,pname,price) VALUES (NULL,'Thinkpad T490', NULL);
INSERT INTO product (id,pname) VALUES (NULL,'macbook pro');
5. 外键约束
- 效果:外键约束的字段,必须从指定表的主键中取值。目的:保证数据的一致性和完整性,避免脏数据
- 语法:
[constraint 约束名称] foreign key(外键字段) references 主表(主键)
alter table 表名称 add [constraint 约束名称] foreign key(外键字段) references 主表(主键)
CREATE TABLE category(
id INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(50) NOT NULL UNIQUE
);
INSERT INTO category (id,cname) VALUES (NULL, '家用电器');
INSERT INTO category (id,cname) VALUES (NULL, '手机数码');
INSERT INTO category (id,cname) VALUES (NULL, '电脑办公');
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100) NOT NULL UNIQUE,
price DOUBLE DEFAULT 0,
cid INT NOT NULL,
CONSTRAINT product_category_fk FOREIGN KEY(cid) REFERENCES category(id)
);
INSERT INTO product (id,pname,price,cid) VALUES (NULL, '小米电视4A 65', 2999, 1);
INSERT INTO product (id,pname,price,cid) VALUES (NULL, '吉普JEEP牛仔裤男士青年商务休闲长裤子', 133.2, 4);
INSERT INTO product (id,pname,price,cid) VALUES (NULL, '吉普JEEP牛仔裤男士青年商务休闲长裤子', 133.2, NULL);