diff --git "a/content/zh/post/zhangcuiping/\347\272\246\346\235\237\344\273\213\347\273\215.md" "b/content/zh/post/zhangcuiping/\347\272\246\346\235\237\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..d1e7d68a41af09def9ce17a8b0a79a6fcabb9c00 --- /dev/null +++ "b/content/zh/post/zhangcuiping/\347\272\246\346\235\237\344\273\213\347\273\215.md" @@ -0,0 +1,128 @@ +title = "约束介绍" + +date = "2022-07-14" + +tags = ["约束介绍"] + +archives = "2022-07" + +author = "张翠娉" + +summary = "约束介绍" + +img = "/zh/post/zhangcuiping/title/img.png" + +times = "14:20" + ++++ + +# 约束介绍 + +在给表中插入或者更新数据时,必须满足约束,否则,操作将失败。 + +约束可以在创建表时规定,或者创建表后规定(使用Alter Table语句创建约束)。 + +约束分为列级和表级。 + +常用的约束包含:not null、unique、primary key、foreign key、check + +- not null:指定列不能存储null值 +- unique:确保某列的值都是唯一的。 +- primary key:not null和unique的结合。确保某列有唯一标识,且不能为null。null和没有数据不同,null代表着未知数据。 +- foreign key:保证一个表中的数据匹配另一个表中的值的参照完整性。 +- check:保证列中的值符合一定条件。 + +下面列举一些示例更好的理解各个约束: + +## 1、not null + +创建表时,如果不指定约束,默认值为NULL,意味着可以插入空值。如果不想存在null值,需要为该列定义not null约束 + +```sql +MogDB=# CREATE TABLE staff( + ID INT NOT NULL, + NAME char(8) NOT NULL, + AGE INT , + ADDRESS CHAR(50), + SALARY REAL +);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# +CREATE TABLE +MogDB=# +``` + +## 2、unique + +unique约束表示表里的一个字段或多个字段的组合必须在全表范围内唯一,唯一约束认为null是互不相等的。意思是一列可以存在多个null。 + +```sql +MogDB=# CREATE TABLE staff1( + ID INT NOT NULL, + NAME char(8) NOT NULL, + AGE INT NOT NULL UNIQUE , + ADDRESS CHAR(50), + SALARY REAL +);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# +NOTICE: CREATE TABLE / UNIQUE will create implicit index "staff1_age_key" for table "staff1" +CREATE TABLE +MogDB=# +``` + +## 3、primary key + +主键是数据表中每一条记录的唯一标识。 + +```sql +MogDB=# CREATE TABLE staff2( + ID INT PRIMARY KEY , + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50), + SALARY REAL +);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff2_pkey" for table "staff2" +CREATE TABLE +MogDB=# +``` + +## 4、foreign key + +外键约束指一个表中的某个数据必须匹配另一个表中的某个数据。通过要给表的外键指向另一个表的唯一约束的键。 + +如下表所示,表staff3包含5个字段,表DEPARTMENT包含3个字段,其中EMP_ID为外键,参照staff3表的ID字段。 + +```sql +MogDB=# CREATE TABLE staff3( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50), + SALARY REAL +);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff3_pkey" for table "staff3" +CREATE TABLE +MogDB=# CREATE TABLE DEPARTMENT( + ID INT PRIMARY KEY NOT NULL, + DEPT CHAR(50) NOT NULL, + EMP_ID INT references staff3(ID) +);MogDB(# MogDB(# MogDB(# MogDB(# +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "department_pkey" for table "department" +CREATE TABLE +MogDB=# +``` + +## 5、check + +check约束表示,每次插入的数据必须使表达式结果为真或未知,才能插入成功。 + +```sql +MogDB=# CREATE TABLE staff4( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50), + SALARY REAL CHECK(SALARY > 0) +);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff4_pkey" for table "staff4" +CREATE TABLE +MogDB=# +``` \ No newline at end of file