亿万先生官方网站’123”123′

SELECT * FROM tb_clazz;
SELECT * FROM tb_student;

SELECT * FROM tb_clazz;
SELECT * FROM tb_student;

INSERT INTO tb_clazz(code,NAME,bzr)
VALUES(‘1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(code,NAME,bzr)
VALUES(‘1402′,’14计算机2班’,’谢老师’);

INSERT INTO tb_clazz(code,NAME,bzr)
VALUES(‘1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(code,NAME,bzr)
VALUES(‘1402′,’14计算机2班’,’谢老师’);

INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(2,’林志玲’,’女’,41,’123′,’lzl@qq.com’,’台湾’);
— 以下数据丧失数据完整性
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(3,null,’妖’,200,’123′,’lzl@qq.com’,’台湾’);

INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(2,’林志玲’,’女’,41,’123′,’lzl@qq.com’,’台湾’);
— 以下数据丧失数据完整性
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(3,null,’妖’,200,’123′,’lzl@qq.com’,’台湾’);

/**
大部分数据库支持下几乎接近完整性约束:
CHECK 检查约
— NOT NULL 非空约束(特殊之自我批评约)
UNIQUE KEY 唯一约束
PRIMARY KEY 主键约束
FOREIGN KEY 外键约束
*/

/**
绝大多数数据库支持下几乎看似完整性约束:
CHECK 检查约
— NOT NULL 非空约束(特殊之检讨约)
UNIQUE KEY 唯一约束
PRIMARY KEY 主键约束
FOREIGN KEY 外键约束
*/


建表时,直接以排列后创建约束,称为列级约束,数据库会默认分配唯一的束缚名SYS_624
CREATE TABLE tb_student(
ID INT,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100)
);


建表时,直接以列后创建约束,称为列级约束,数据库会默认分配唯一的束缚名SYS_624
CREATE TABLE tb_student(
ID INT,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100)
);

SELECT * FROM tb_student;

SELECT * FROM tb_student;

INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’);

INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’);

— 查询两长长的相同数量
INSERT INTO tb_student(ID,name,sex,age,phone,email,address)
VALUES(1,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’);

— 查询两长相同数量
INSERT INTO tb_student(ID,name,sex,age,phone,email,address)
VALUES(1,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’);

INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(1,’林志玲’,’女’,41,’台湾’);

INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(1,’林志玲’,’女’,41,’台湾’);

— 删除其中同样条数据,发现无法唯一确定有平等长条记下
DELETE FROM tb_student WHERE

— 删除其中同样漫漫数,发现无法唯一确定有同长达记下
DELETE FROM tb_student WHERE

/*******************主键**************************/
/**
重点
格式 PRIMARY KEY
意:用来唯一确定一行记录
(1)主键是说明中绝无仅有确定一行数的字段,主键从成效及看相当给非空且唯一
(2)一个表中只同意一个主键
(3)主键字段可以是单字段或者是多字段的结缘
(4)当起主键约束时,Oracle也主键创建对应的目录
(5)现代数据库建模,建议同样布置表得要起主键,并且主键应该同事务数据无关,建议用自动增长之自然数。
*/
CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100)
);

/*******************主键**************************/
/**
重点
格式 PRIMARY KEY
打算:用来唯一确定一行记录
(1)主键是表明中绝无仅有确定一行数的字段,主键从成效及看相当给非空且唯一
(2)一个表中只同意一个主键
(3)主键字段可以是单字段或者是多字段的重组
(4)当起主键约束时,Oracle也主键创建对应的目录
(5)现代数据库建模,建议同样布置表得要发生主键,并且主键应该同事情数据无关,建议利用自动增长之自然数。
*/
CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100)
);

— 因为主键非空并且唯一,所以插入时得插入,并且不能够同一
INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(1,’林志玲’,’女’,41,’台湾’);
INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(2,’林志玲’,’女’,41,’台湾’);
— 删除其中同样长达数,根据主键id删除
DELETE FROM tb_student WHERE ID = 2;

— 因为主键非空并且唯一,所以插入时得插入,并且不能够同
INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(1,’林志玲’,’女’,41,’台湾’);
INSERT INTO tb_student(ID,name,sex,age,address)
VALUES(2,’林志玲’,’女’,41,’台湾’);
— 删除其中同样长数据,根据主键id删除
DELETE FROM tb_student WHERE ID = 2;

/*****************外键****************************/
— 保存学生数常常要懂得学生的班级情况
CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazzcode VARCHAR(18),
clazzname VARCHAR(18),
clazzbzr VARCHAR(18)
);
SELECT * FROM tb_student;

/*****************外键****************************/
— 保存学生数量常常需要理解学生的班级情况
CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazzcode VARCHAR(18),
clazzname VARCHAR(18),
clazzbzr VARCHAR(18)
);
SELECT * FROM tb_student;

INSERT INTO
tb_student(ID,NAME,sex,age,phone,email,address,clazzcode,clazzname,clazzbzr)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,’1401′,’14计算机1班’,’廖老师’);

INSERT INTO
tb_student(ID,NAME,sex,age,phone,email,address,clazzcode,clazzname,clazzbzr)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,’1401′,’14计算机1班’,’廖老师’);

INSERT INTO
tb_student(ID,name,sex,age,phone,email,address,clazzcode,clazzname,clazzbzr)
VALUES(2,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’,’1402′,’14计算机2班’,’廖老师’);
/*
以上数据库插入数据问题:如果有100口于1401趟,则100总人口之clazzcode,clazzname,clazzbzr信息
完全一致,一个学生的clazzcode,clazzname,clazzbzr信息囤积需要17个字节,100单学生需17*100个字节,
一经这些信中心属于重复的(数据冗余),浪费存储空间。

INSERT INTO
tb_student(ID,name,sex,age,phone,email,address,clazzcode,clazzname,clazzbzr)
VALUES(2,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’,’1402′,’14计算机2班’,’廖老师’);
/*
如上数据库插入数据问题:如果来100口当1401趟,则100人数的clazzcode,clazzname,clazzbzr信息
完全一致,一个生的clazzcode,clazzname,clazzbzr信息存储需要17单字节,100只学生要17*100个字节,
一旦这些信息主导属于再的(数据冗余),浪费存储空间。

化解多少冗余问题用外键。
关系数据库就是据区区个说明经过外键产生关联关系。
例如:通过tb_student表的clazz_id列让tb_clazz表和tb_student表产生了涉的涉嫌。
*/
CREATE TABLE tb_clazz(
ID INT PRIMARY KEY,
CODE VARCHAR(18),
NAME VARCHAR(18),
bzr VARCHAR(18)
);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(2,’1402′,’14计算机2班,’谢老师’);

化解数量冗余问题采取外键。
关系数据库就是指区区个说明经过外键产生关联关系。
例如:通过tb_student表的clazz_id列让tb_clazz表和tb_student表产生了事关的干。
*/
CREATE TABLE tb_clazz(
ID INT PRIMARY KEY,
CODE VARCHAR(18),
NAME VARCHAR(18),
bzr VARCHAR(18)
);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(2,’1402′,’14计算机2班,’谢老师’);

CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazz_id INT REFERENCES tb_clazz(ID)
);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address,clazz_id)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,1);

CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazz_id INT REFERENCES tb_clazz(ID)
);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address,clazz_id)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,1);

INSERT INTO tb_student(ID,name,sex,age,phone,email,address,clazz_id)
VALUES(2,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’,1);

INSERT INTO tb_student(ID,name,sex,age,phone,email,address,clazz_id)
VALUES(2,’林志玲’,’女’,41,’111′,’lzl@qq.com’,’台湾’,1);

SELECT * FROM tb_clazz;
SELECT * FROM tb_student;

SELECT * FROM tb_clazz;
SELECT * FROM tb_student;

/**
格式 FOREIGN KEY (外键列名) REFERENCES 主表(参照列)
意:外键是构建于一个发明底星星独字段或者少个说明的星星点点只字段之间的关联,解决数据冗余(多余)问题。
例如:通过clazz_id字段将tb_claz表和tb_student表关联起来。

/**
格式 FOREIGN KEY (外键列名) REFERENCES 主表(参照列)
意:外键是构建于一个发明底少单字段或者少独说明的点滴个字段之间的关联,解决数据冗余(多余)问题。
例如:通过clazz_id字段将tb_claz表和tb_student表关联起来。

clazz_id INT REFERENCES tb_clazz(ID)

clazz_id INT REFERENCES tb_clazz(ID)

外键要留意的题目:
1.子(从)表[tb_student]外键列[clazz_id]的价值必须于父(主)表[tb_clazz]参照列[id]值的限制外,
抑或也空(也堪加非空约束,强制不同意吗空)。

外键要留心的题材:
1.子(从)表[tb_student]外键列[clazz_id]的值必须在父(主)表[tb_clazz]参照列[id]价的限制外,
要么也空(也得以加非空约束,强制不允许为空)。

2.外键[clazz_id]参考的只能是主表[tb_clazz]主键或者唯一键,保证子表记录得准确定位及叫参照的笔录。
3.当主表[tb_clazz]的记录被子表[tb_student]参照时,主表记录不允许被删除。
4.建表时可以多以下设置:
(1)ON DELETE
CASCADE:当父表中的行被删除的当儿,同时删除在子表中因的履

2.外键[clazz_id]参照的只能是主表[tb_clazz]主键或者唯一键,保证子表记录得准确定位及叫参照的记录。
3.当主表[tb_clazz]的记录被子表[tb_student]参考时,主表记录不允吃去除。
4.建表时可以追加以下设置:
(1)ON DELETE
CASCADE:当父表中之行被删除的时节,同时删除在子表中因的施行

clazz_id INT REFERENCES tb_clazz(ID) ON DELETE CASCADE

clazz_id INT REFERENCES tb_clazz(ID) ON DELETE CASCADE

(2)ON DELETE SET NULL:将因的外键值转换为空值

(2)ON DELETE SET NULL:将依靠的外键值转换为空值

clazz_id INT REFERENCES tb_clazz(ID) ON SET NULL
*/

clazz_id INT REFERENCES tb_clazz(ID) ON SET NULL
*/


1.子(从)表[tb_student]外键列[clazz_id]的价值必须于父(主)表[tb_clazz]参照列[id]值的界定外,
— 或者也空(也堪加非空约束,强制不允许为空)。
INSERT INTO tb_student(ID,name,sex,age,phone,email,address,clazz_id)
VALUES(3,’柳岩’,’女’,36,’222′,’ly@qq.com’,’台湾’,9);


1.子(从)表[tb_student]外键列[clazz_id]的价值必须于父(主)表[tb_clazz]参照列[id]值的限外,
— 或者也空(也堪加非空约束,强制不允许吗空)。
INSERT INTO tb_student(ID,name,sex,age,phone,email,address,clazz_id)
VALUES(3,’柳岩’,’女’,36,’222′,’ly@qq.com’,’台湾’,9);


2.外键[clazz_id]参照的只能是主表[tb_clazz]主键或者唯一键,保证子表记录可以准确定位及给参照的笔录。
— 反证法证明,tb_clazz参照的莫是主键也非是唯一键,会起的问题
CREATE TABLE tb_clazz(
ID INT ,
CODE VARCHAR(18),
NAME VARCHAR(18),
bzr VARCHAR(18)
);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1402′,’14计算机2班’,’谢老师’);


2.外键[clazz_id]参考的只能是主表[tb_clazz]主键或者唯一键,保证子表记录可以规范定位到为参照的笔录。
— 反证法证明,tb_clazz参照的匪是主键也不是唯一键,会面世的题材
CREATE TABLE tb_clazz(
ID INT ,
CODE VARCHAR(18),
NAME VARCHAR(18),
bzr VARCHAR(18)
);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1401′,’14计算机1班’,’廖老师’);
INSERT INTO tb_clazz(id,code,NAME,bzr)
VALUES(1,’1402′,’14计算机2班’,’谢老师’);

CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazz_id INT
);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address,clazz_id)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,1);

CREATE TABLE tb_student(
ID INT PRIMARY KEY,
NAME VARCHAR(18) NOT NULL,
sex CHAR(3) CHECK(sex = ‘男’ OR sex = ‘女’),
age INT CHECK(age > 15 AND age < 50),
phone VARCHAR(18) UNIQUE,
email VARCHAR(50) UNIQUE,
address VARCHAR(100),
clazz_id INT
);
INSERT INTO tb_student(ID,NAME,sex,age,phone,email,address,clazz_id)
VALUES(1,’周杰伦’,’男’,31,’123′,’jack@qq.com’,’台湾’,1);

SELECT * FROM tb_clazz;

SELECT * FROM tb_clazz;

SELECT * FROM tb_student;

3.当主表[tb_clazz]的记录被子表[tb_student]参照时,主表记录不允许为剔除。
DELETE FROM tb_clazz WHERE ID = 1;
— 解决方案1:先去子表数据,再去父表数据
DELETE FROM tb_student WHERE clazz_id = 1;
— 解决方案2:先用子表关联数据设置也null,再删除父表数据
UPDATE tb_student SET clazz_id = NULL WHERE clazz_id = 1;
— 解决方案3:先以子表数据修改,再删除父表数据
UPDATE tb_student SET clazz_id = 2 WHERE clazz_id = 1;

— 4. ON DELETE
CASCADE指当删除父表数据经常,级联删除子表数据,对承诺者的方案1
— ON SET NULL
指当删除父表数据常常,将关系的数码设置为null,对承诺者的方案2

 

SELECT * FROM tb_student;

3.当主表[tb_clazz]的记录被子表[tb_student]参考时,主表记录不允被删除。
DELETE FROM tb_clazz WHERE ID = 1;
— 解决方案1:先去子表数据,再去父表数据
DELETE FROM tb_student WHERE clazz_id = 1;
— 解决方案2:先用子表关联数据设置也null,再删除父表数据
UPDATE tb_student SET clazz_id = NULL WHERE clazz_id = 1;
— 解决方案3:先以子表数据修改,再删除父表数据
UPDATE tb_student SET clazz_id = 2 WHERE clazz_id = 1;

— 4. ON DELETE
CASCADE指当删除父表数据常常,级联删除子表数据,对承诺者的方案1
— ON SET NULL
指当删除父表数据时,将关系的数码设置也null,对承诺者的方案2

 

相关文章