Serilog高階玩法之用Serilog記錄所選終結點附加屬性
阿新 • • 發佈:2020-12-21
1.約束
作用:保證使用者輸入的資料儲存到資料庫中是正確的。
確保資料的完整性 = 在建立表時給表中新增約束
完整性的分類:
- 實體完整性:
- 域完整性:
- 引用完整性:
1.1 實體完整性
實體:即表中的一行(一條記錄)代表一個實體(entity)
實體完整性的作用:標識每一行資料不重複。
約束型別:
主鍵約束(primary key)
唯一約束(unique)
自動增長列(auto_increment)
1.1.1 主鍵約束(primary key)
注:每個表中要有一個主鍵。
特點:資料唯一,且不能為null
示例:
第一種新增方式:
CREATE TABLE student( id int primary key, name varchar(50) );
第二種新增方式:此種方式優勢在於,可以建立聯合主鍵
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
);
第三種新增方式:
CREATE TABLE student( id int, name varchar(50) ); ALTER TABLE student ADD PRIMARY KEY (id);
1.1.2 唯一約束(unique)
特點:資料不能重複。
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
1.1.3 自動增長列(auto_increment)
sqlserver資料庫 (identity) oracle資料庫( sequence)
給主鍵新增自動增長的數值,列只能是整數型別
CREATE TABLE student( Id int primary key auto_increment, Name varchar(50) ); INSERT INTO student(name) values(‘tom’);
1.2 域完整性
域完整性的作用:限制此單元格的資料正確,不對照此列的其它單元格比較
域代表當前單元格
域完整性約束:資料型別 非空約束(not null) 預設值約束(default)
check約束(mysql不支援)check(sex='男'or sex='女')
1.2.1 資料型別:(數值型別、日期型別、字串型別)
1.2.2 非空約束:not null
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO student values(1,’tom’,null);
1.2.3 預設值約束 default
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘男’
);
insert intostudent1 values(1,'tom','女');
insert intostudent1 values(2,'jerry',default);
1.3 引用完整性(參照完整性)
外來鍵約束:FOREIGN KEY
示例:
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);
create table score(
id int,
score int,
sid int , -- 外來鍵列的資料型別一定要與主鍵的型別一致
CONSTRAINT fk_score_sid foreign key(sid) references student(id)
);
第二種新增外來鍵方式。
ALTER TABLEscore1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
注意: 現代專案中的主鍵基本上使用 bigint型別的自增