SQL的约束
Posted a-src
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL的约束相关的知识,希望对你有一定的参考价值。
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
比如,规定一个用户的用户名不能为空且没有重复的记录,这就是一种约束规则。
在mysql中,通常的有这几种约束:
约束类型: 主键 默认值 唯一 外键 非空
关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL
在数据库中,如果有两个记录是一样的,数据库是无法区分并且认为他们是一个主体,如果要区分,就要用到主键(PRIMARY KEY);
主键(PRIMARY KEY)是用于约束表中的某一行,作为这一行的唯一标示符,在一张表中通过主键就能准确 定位到一行,主键不能用重复记录且不为空;
主键的三种定义方式:
第一种:
user_name CHAR(20) PRIMARY KEY,
第二种:
CONSTRAINT us_na(主键名,自定义) PRIMARY
KEY(user_name),
第三种:
CONSTRAINT us——na(主键名,自定义) PRIMARY KEY(user_a,user_b),
CHARE DATABASE school;
use school;
CHEATE TABLE user_info
(
user_name CHAR(20) NOT NULL,
user_num INT(10) DEFAULT ‘10‘,
CONSTRAINT user_pk PRIMARY KEY (user_name)
);
CHEATE TABLE user_data
(
id INT(10),
name CHAR(20),
age INT(10),
salary INT(10) NOT NULL,
phone INT(12) NOT NULL,
UNIQUE (phone),
CONSTRAINT data_pk FOREIGN KEY (da_sch) REFERENCES user_info(user_name)
);
CREATE TABLE object
(
boject_num INT(10) NOT NULL,
boject_name CHAR(20) NOT NULL,
boject_data DATE NOT NULL,
end_data DATE DEFAULT ‘2015-04-01‘,
obj_sch CHAR(20) REFERENCES user_info(user_name),
CONSTRAINT obj_pk PRIMARY KEY (boject_num,boject_name)
);
默认值约束:
默认值约束(DEFAULT)规定,当有DEFAULT约束的列,插入数据为空时,将使用默认值。
默认值常用于一些可有可无的字段,比如用户的个性前面,如果用户没有设置,系统给他应该设定一个默认的文本,比如空文本或‘O(∩_∩)O哈哈哈~,没有信息啦’.
user_id INT(10) DEFAULT ‘10‘,
#设置user_id的默认值为10
#正常插入数据
INSERT INTO user_info (user_id,user_name)
VALUES (01,‘jack‘),
#设置过默认值后,使用默认值填充充
INSERT INTO user_info (user_name) VALUES (‘jack‘),
#此时,user_id 的值为默认值 10
mysql> select * from user_info;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 10 | jack |
+---------+-----------+
唯一约束:
唯一约束(UNIQUE), 他规定一张表中制定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
mysql> create table user_data
-> (
-> id int(10),
-> name char(20),
-> phone int(12),
-> UNIQUE(phone)
-> );
#插入数据:
#第一次插入:
mysql> insert into user_data (id,name,phone) VALUES (01,‘jack‘,123);
Query OK, 1 row affected (0.00 sec)
#第二次插入:
mysql> insert into user_data (id,name,phone) VALUES (01,‘jacka‘,123);
ERROR 1062 (23000): Duplicate entry ‘123‘ for key ‘phone‘
#此处,phone值相同,与UNIQUE约束起冲突,插入数据失败
外键:
外键(FOREIGN KEY)既能确保数据完整性,也能表现表与表之间的关系。
比如,现在有用户和文章表,给文章表中添加一个指向用户ID的外键,表示这篇文章所属的用户ID,外键将确保这个外检指向的记录是存在的,如果你尝试删除一个用户,而这个用户还有文章存在于数据库中,那么操作将无法完成并报错。因为你删除改用户过后,他发布的文章都没有所属用户了,而这样的情况是不被允许的。同理,在你创建一篇文章的时候也不能为它制定一个不存在的用户ID。
一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在他参考的列中有对应值。
外键的三种写法:
第一种:
create table user_info
(
id int(10) not null,
user_name char(20) DEFERENCES KEY,
phone int(12)
);
第二种:
CONSTRAINT obj_ue(外键名,自定义) FOREIGN KEY(in_dpk(约束列)) REFERENCES user_info(user_name);
#user_info(user_name)为参考表中的参考列
在插入时,如果被外键约束的值没有在参考列中有对应,则插入失败,如果有,则插入成功。
非空约束:
非空约束(NOT NULL),被非空约束的列,在插入值时必须非空.
没被非空约束,插入时值为空,则为NULL。
以上是关于SQL的约束的主要内容,如果未能解决你的问题,请参考以下文章