1. 程式人生 > 資料庫 >資料庫約束與多表查詢

資料庫約束與多表查詢

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型別的自增