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的约束的主要内容,如果未能解决你的问题,请参考以下文章

在约束布局中查看片段的绑定不起作用

活动中 TabLayout 内的片段的约束问题

sql sql里面的代码片段

Microsoft SQL Server 代码片段收集

缺少 SQL SERVER 2014 代码片段

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?