【SQL】之约束
约束:为保证数据完整性,对表中字段的限制。
如何添加/删除约束?
create table 时添加约束
alter table 时添加约束,删除约束
如何查看表中约束?
SELECT * FROM information_schema.`TABLE_CONSTRAINTS`
WHERE table_name='employees';
约束分类
- 单列约束,多列约束
- 列级约束:将此约束声明在对应字段的后面
表级约束:在表中所有字段都声明完,在所有字段的后面声明的约束 - not null 非空约束
unique 唯一性约束
primary key 主键约束
foreign key 外键约束
check 检查约束
default 默认值约束
一、非空约束 NOT NULL
限定某个字段/某列的值不允许为空。
关键字:not null
create table 时添加约束
#create table 时添加约束
CREATE DATABASE dbtest;
USE dbtest;
CREATE TABLE test1(
id INT NOT NULL,
last_name VARCHAR(15) NOT NULL,
email VARCHAR(25),
salary DECIMAL(10,2)
);
DESC test1;
INSERT INTO test1(id,last_name,email,salary)
VALUES(1,'tom','tom@163.com',6000);
#错误
INSERT INTO test1(id,last_name,email,salary)
VALUES(1,NULL,'tom@163.com',6000);
INSERT INTO test1(id,last_name,email,salary)
VALUES(NULL,'jerry','tom@163.com',6000);
INSERT INTO test1(id,email)
VALUES(2,'abc@163.com'); #Field 'last_name' doesn't have a default value
alter table 时添加/删除约束
#alter table 时添加约束
SELECT * FROM test1;
DESC test1;
ALTER TABLE test1
MODIFY email VARCHAR(25) NOT NULL;
#alter table 时删除约束
ALTER TABLE test1
MODIFY email VARCHAR(25) NULL;
二、唯一性约束 UNIQUE
限制某个字段或某列的值不能重复
关键字:unique
表级约束:constraint 约束名称 关键字(字段名)
,如:CONSTRAINT uk_test2_email UNIQUE(email)
create table时添加约束
-- 在create table时添加约束
CREATE TABLE test2(
id INT UNIQUE, #(列级约束)
last_name VARCHAR(20),
email VARBINARY(25),
salary DECIMAL(10,2),
#表级约束
CONSTRAINT uk_test2_email UNIQUE(email)
);
#在创建唯一约束时,如果不给唯一约束命名,就默认和列明相同
DESC test2;
SELECT * FROM information_schema.`TABLE_CONSTRAINTS`
WHERE table_name='test2';
#向表中添加数据
INSERT INTO test2(id,last_name,email,salary)
VALUES(1,'tom','tom@163.com',4500);
SELECT * FROM test2;
#错误
INSERT INTO test2(id,last_name,email,salary)
VALUES(1,'tom1','tom@163.com',4500);
#可以向声明为unique的字段上添加null值,且可以多次添加null值
INSERT INTO test2(id,last_name,email,salary)
VALUES(2,'tom1',NULL,4600);
INSERT INTO test2(id,last_name,email,salary)
VALUES(3,'tom2',NULL,4500);