SQL--约束,范式

SQL--约束

补充知识链接

唯一约束

唯一约束   一个表可以多个字段加   值唯一性
ALTER TABLE tb2 ADD UNIQUE(id);
注:下图为id字段 增加唯一约束,key属性变为unique

非空约束   一个表可以多个字段加   值不能为空
ALTER TABLE tb2 MODIFY pwd VARCHAR(20) NOT NULL;
注:下图为pwd字段 增加非空约束,null属性变为not null

主键约束   一个表只有一个字段可以加   值不能为空  值必须唯一性
添加主键约束
ALTER TABLE tb2 ADD PRIMARY KEY(id);

# 删除 主键约束
ALTER TABLE tb2 DROP PRIMARY KEY;
另:一个字段(name) + not null  + unique  当作主键约束,但无法删除主键约束,
如下图

注:下图为id字段 增加唯一约束,key属性变为unique

自增约束   数据类型 数值类型  一般配合主键约束使用
ALTER TABLE tb2 CHANGE id id int AUTO_INCREMENT;
默认约束   一个表可以多个字段加 没有给值的时候 使用默认值
ALTER TABLE tb2 ALTER sex SET DEFAULT "保密";

SQL--完整表

CREATE TABLE tb3 (
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) UNIQUE KEY,
    email VARCHAR(20) NOT NULL,
    sex VARCHAR(20) DEFAULT "保密",
    pwd VARCHAR(20) NOT NULL
    )AUTO_INCREMENT=100,CHARSET=UTF8;
# 外键约束
1.学院表 (表头或字段)
CREATE TABLE `department` (
    did INT PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(20) UNIQUE KEY
    )AUTO_INCREMENT=101,CHARSET=UTF8;

2.学生表 (关联学院表 多对一)(表头或字段)
CREATE TABLE `students` (
    sid INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(20) NOT NULL,
    depid INT,
    CONSTRAINT `depart_student_key` FOREIGN KEY (depid)  
    REFERENCES  `department` (did) ON DELETE SET NULL
    );
(CONSTRAINT `depart_student_key` 可以省略不写,则自动生成)
 (???CONSTRAINT `depart_student_key` 显示在哪里暂不知道)

INSERT INTO `department` (dname) VALUES (增添数据)
("清华大学"),("上海交通大学"),("浙江大学"),("南京大学")
INSERT INTO `students` (sname,deptid) VALUES
("张三",101),("李四",102),("王五",103),("赵六",101),("孙琪",102),
("小花",103),("小红",104)

3 学生档案表(关联学院表 一对一)
CREATE TABLE `studetail` (
    stuid INT PRIMARY KEY AUTO_INCREMENT,
    stusex VARCHAR(20) NOT NULL,
    stuage INT,
    stutel VARCHAR(20) NOT NULL,
    ssid INT,
    FOREIGN KEY (ssid)  REFERENCES  `students` (sid)  ON DELETE CASCADE
    )AUTO_INCREMENT=202401,CHARSET=UTF8;
(CASCADE:小暴布,一联串)

INSERT INTO studetail (stusex,stuage,stutel,ssid) VALUES
("男",18,"15326235224",1),("男",19,"15326235223",2),("男",17,"15326235229",3),
("男",18,"15326235220",4),("女",18,"15326235226",5),("女",18,"15326235221",6),
("女",18,"15326235228",7)

4 课程表(多对多)
CREATE TABLE `course` (
    cid INT PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(20) NOT NULL
    )AUTO_INCREMENT=1001,CHARSET=UTF8;

5 中间表
CREATE TABLE `stu——course` (
    c_id INT,
    s_id INT,
    PRIMARY KEY(c_id,s_id),
    FOREIGN KEY (c_id)  REFERENCES  `course` (cid),
    FOREIGN KEY (s_id)  REFERENCES  `students` (sid)
    );



范式

范式 规则 设计表

知识补充链接
第一范式: 要求任何一张表必须有主键
每一个字段原子性不可再分

"""
(本例中,联系方式不能一个字段有两个,必须分开)
学生编号 学生姓名 联系方式
1001 张三 zs@126.com ,13345212411
1002 李四 ls@126.com ,15424562321

"""

第二范式:在第一范式的基础上,要求所有非主键字段必须完全依赖主键
不要产生部分依赖
"""
(本例中,满足第一范式,不满足第二范式(数据冗余),多对多应建三张表,其中一张是中间表)
学生编号 学生姓名 教师编号 教师姓名
1001 张三 101 李老师
1002 李四 102 王老师
1003 王五 101 李老师
1001 张三 102 王老师
"""
"""
学生编号+教师编号 教师姓名 学生姓名
1001101 李老师 张三
1002102 王老师 李四
1003101 李老师 王五
1001102 王老师 张三
"""

第三范式:在第二范式的基础上,要求所有非主键字段必须直接依赖主键
不要产生传递依赖(非必须)

"""
学生编号 学生姓名 班级编号 班级名称
1001 张三 1 一年一班
1002 李四 2 一年二班
1003 王五 3 一年三班
1004 赵六 4 一年四班
"""

CREATE TABLE tb2 (
id INT,
name VARCHAR(20),
email VARCHAR(255),
pwd VARCHAR(20),
sex VARCHAR(20)
);

posted @ 2024-10-04 15:24  自由的心|勇敢的心  阅读(1)  评论(0编辑  收藏  举报