我是一个初学者,文中部分概念是按照自己的理解去解释的,可能会存在错误。表操作的代码,自己手打测试过的。话不多说,直接进入主题吧!
对于初学者来说,完整性约束听起来感觉难以理解,其实完整性约束就是一种规则(限制),比如说保证数据是唯一的、要求数据限制在某些范围内或者是一些其他的限制条件。
比如说将员工的ID输入数据库,假如没有限制条件,有人随便写或者写错了,那么这条数据就没有任何用了,所以就得有硬性要求,保证数据的准确有效。
就是为了防止不符合规范的数据进入数据库,确保库内数据的准确性和一致性。
约束条件 | 作用 |
---|---|
主键约束 | 约束数据库中每条记录唯一 |
唯一性约束 | 约束数据库中每条记录唯一(与主键有点区别) |
外键约束 | 确保表之间引用完整 |
NOT NULL 约束 | 不允许该字段存在空值,必须包含值 |
检查约束 | 限制列中值的范围 |
DEFAULT 约束 | 如没其他输入值,则向字段中插入默认值 |
主键是由一个或多个列构成,作用在于表里的每条记录具有唯一值。
1.必须包含唯一值
2.不能包含NULL值
3.每个表都应该有主键,且只有一个
下面是操作主键约束的SQL语法:
CREATE TABLE Exercise_tbl
(
EX_ID CHAR(9) NOT NULL ,
EX_NAME VARCHAR(20) NOT NULL,
EX_PHONE VARCHAR(10) NULL
CONSTRAINT EXE_ID_PK PRIMARY KEY (EX_ID)
);
ALTER TABLE Exercise_tbl
DROP PRIMARY KEY;
--注意:使用 ALTER TABLE 添加主键时,必须在表首次创建时,主键列声明为不包含空值(即 NOT NULL)。
ALTER TABLE Exercise_tbl
ADD PRIMARY KEY (EX_ID);
1.唯一性约束和主键约束类似,约束某个字段的值在记录中是唯一的。
2.每个表中只能存在一个主键,可以存在多个唯一性约束。
下面是操作唯一性约束的SQL语法:
CREATE TABLE Exercise_tbl_first
(
EX_ID CHAR(9) NOT NULL PRIMARY KEY,
EX_NAME VARCHAR(20) NOT NULL UNIQUE,
EX_PHONE VARCHAR(10) NULL
);
ALTER TABLE exercise_tbl_first
DROP INDEX EX_NAME;
ALTER TABLE Exercise_tbl_first
ADD UNIQUE (EX_NAME);
1.外键就是用于与另一张表的关联,用于保持数据的一致性。
2.外键是子表里的一个字段,引用的是父表里的主键。
以上图表为例,假如需要在B表(字表)Ex_id 字段录入新的数据,必须保证A表(父表)Ex_id 字段存在这个数据,否则不能录入,这样保证了B表的数据引用完整,否则将会是垃圾数据。
下面只涉及外键约束的创建及删除,不涉及级联操作(因为我暂时还没搞很清楚)。
CREATE TABLE Exercise_tbl_second
(
EX_ID CHAR(9) NOT NULL,
EX_CITY VARCHAR(20) NOT NULL,
EX_ADDRESS VARCHAR(10) NULL,
CONSTRAINT Exe_ID_pk FOREIGN KEY (EX_ID) REFERENCES Exercise_tbl(EX_ID)
);
注释:该操作语句为 :CONSTRAINT 外键名字 FOREIGN KEY (子表字段名) REFERENCES 父表名(父表主键字段名)
ALTER TABLE Exercise_tbl_second
DROP FOREIGN KEY Exe_ID_pk;
ALTER TABLE Exercise_tbl_second
ADD FOREIGN KEY(EX_ID)
REFERENCES Exercise_tbl(EX_ID);
1.受约束字段不接受NULL值
2.受约束字段必须包含值
CREATE TABLE Exercise_tbl_third
(
EX_ID CHAR(9) NOT NULL PRIMARY KEY,
EX_NAME VARCHAR(20) NOT NULL,
EX_PHONE VARCHAR(10) NULL
);
ALTER TABLE Exercise_tbl_third
MODIFY EX_NAME VARCHAR(20) NULL;
ALTER TABLE Exercise_tbl_third
MODIFY EX_NAME VARCHAR(20) NOT NULL;
1.为了限制列中值的范围
CREATE TABLE Exercise_tbl_fourth
(
EX_ID CHAR(9) NOT NULL PRIMARY KEY,
EX_AGE int NOT NULL,
EX_NAME VARCHAR(20) NOT NULL,
EX_PHONE VARCHAR(10) NULL,
CONSTRAINT CHK_Exe_AGE CHECK (EX_AGE > 0)
);
ALTER TABLE Exercise_tbl_fourth
DROP CHECK CHK_Exe_AGE;
ALTER TABLE Exercise_tbl_fourth
ADD CONSTRAINT CHK_Exe_AGE CHECK (EX_AGE > 0);
1.如没规定其他的值,则向列中插入默认值
CREATE TABLE Exercise_tbl_fifth
(
EX_ID CHAR(9) NOT NULL PRIMARY KEY,
EX_CITY VARCHAR(20) DEFAULT 'BEIJING' ,
EX_NAME VARCHAR(20) NOT NULL,
EX_PHONE VARCHAR(10) NULL,
);
ALTER TABLE Exercise_tbl_fifth
ALTER EX_CITY DROP DEFAULT;
ALTER TABLE Exercise_tbl_fifth
ALTER EX_CITY SET DEFAULT 'BEIJING';
了解完约束条件,表的创建和约束条件有什么关系呢?
其实约束条件就是创建表的规则,遵守这个规则会使表设计的更加规范,防止错误的数据插入,确保数据的准确和完整,同时也便于后期的维护。
下面以创建表Exercise_tbl_sixth为例子
CREATE TABLE Exercise_tbl_sixth
(
EX_ID CHAR(9) NOT NULL ,
EX_NAME VARCHAR(20) NOT NULL,
EX_PHONE VARCHAR(10) NULL,
CONSTRAINT EXE_ID_PK PRIMARY KEY (EX_ID)
);
-- 在表的最后一列位置新增列 EX_ADDRESS
alter table Exercise_tbl_sixth add column EX_ADDRESS varchar(20) not null;
-- 在指定列 EX_NAME 后面新增列 EX_ADDRESS
alter table Exercise_tbl_sixth add column EX_ADDRESS varchar(20) not null AFTER EX_NAME;
**基本规则:**如果表里有数据,此时添加的新列就不能定义为 NOT NULL。
如果想添加一条定义为 NOT NULL 的列,方法如下:
1.添加一个定义为NULL的列
2.在这个新列中插入数据
3.把列的定义修改为 NOT NULL
ALTER TABLE Exercise_tbl_sixth DROP COLUMN EX_ADDRESS ;
列属性包括数据类型、有效位数、标度、能否为空等
ALTER TABLE Exercise_tbl_sixth MODIFY
EX_PHONE VARCHAR(15) NULL;
表中EX_PHONE的长度由原来的的10变成了15
ALTER TABLE Exercise_tbl_fifth change name app_name VARCHAR(20) not null;
ALTER TABLE Exercise_tbl_fifth RENAME TO Exercise_tbl_five;
SHOW TABLES;
DESC Exercise_tbl_sixth;
DROP TABLE Exercise_tbl_sixth;