自增长 外键约束

1. 自增长

作用: 自动递增

-- 自增长

CREATE TABLE student(

       idINT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始  ZEROFILL 零填充

       NAMEVARCHAR(20)

)

-- 自增长字段的主键字段可以不赋值,自动递增

INSERT INTO student(NAME) VALUES('张三');

INSERT INTO student(NAME) VALUES('李四');

INSERT INTO student(NAME) VALUES('王五');

 

 

SELECT * FROM student;

DELETE FROM student; --自增长的约束不删除

TRUNCATE TABLE student; -- 可以删除自增长约束

2.外键约束

作用:约束两张表的数据

--创建员工表

CREATE TABLE employee(

       idINT PRIMARY KEY,

       empNameVARCHAR(20),

       deptNameVARCHAR(20) –部门名称

)

-插入员工表的数据:

INSERT INTO employee VALUES(1,”张三”,“事业部“);

INSERT INTO employee VALUES(2,”李四”,“人力资源部“);

INSERT INTO employee VALUES(3,”王五”,“研发部“);

--查看表

SELECT*FROM employee;

 

每次添加员工是都要输入部门名称,比较麻烦,数据冗余较大,现在将部门名称用另一张表表示来约束本employee员工表。

--创建部门表

CREATE TABLE dept(

       id INT PRIMARY KEY,

       deptNameVARCHAR(20)

)

--插入部门数据

INSERT INTO dept(id,deptName) VALUES(1,'事业部');

INSERT INTO dept(id,deptName) VALUES(2,'HR');

INSERT INTO dept(id,deptName) VALUES(3,'研发部');

--修改员工表

CREATE TABLE employee(

       idINT PRIMARY KEY,

       empNameVARCHAR(20),

       deptIdINT –部门名称改为部门(dept)的ID

)

--插入员工信息

INSERT INTO employee VALUES(1,”张三”,1);

INSERT INTO employee VALUES(2,”李四”,2);

INSERT INTO employee VALUES(3,”王五”,3);

--但是这里直接看不见部门名称

 

--部门中没有4,所以错误

INSERT INTO employee VALUES(4,”王五”,4);

--限制插入不合法的数据现在就需要外键约束(这里约束deptID)

--重新建立员工表表

CREATE TABLE employee(

       idINT PRIMARY KEY,

       empNameVARCHAR(20),

       deptIdINT,-- 把部门名称改为部门ID

       --声明一个外键约束,fk就是外键的缩写

    CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) –声明外键    

                                                                     外键名称              外键         参考表(参考字段)

)

--这时插入4部门会报错

INSERT INTO employee VALUES(4,”王五”,4);

--注意重新建立表的=时候记得删除以前建立的表,被约束字段的表称为副表,约束的表称为主表。这里employee为副表。dept为主表;添加数据: 先添加主表,再添加副表;修改数据:先修改副表,再修改主表;删除数据: 先删除副表,再删除主表。

 

级联操作

--我们希望直接修改主表的数据来影响副表的数据,这时候就需要级联操作;

--创建级联的主表形式是在外键的基础上加ON UPDATE CASCADE这里的UPDATE可以改为DELETE或者添加DELETE,这时候可以有修改和删除两种操作

CREATE TABLE employee(

       idINT PRIMARY KEY,

       empName  VARCHAR(20),

       deptId  INT,-- 把部门名称改为部门ID

       --声明一个外键约束,fk就是外键的缩写

    CONSTRAINT  emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)  ON UPDATE CASCADE   –-声明级联修改   

)

UPDATE dept SET id=5 WHRER id=4;--修改主表的数据可以改变附表的数据

--如果我们想级联删除,则需要添加ON DELETE CASCADE

CONSTRAINT emlyee_dept_fk  FOREIGN KEY(deptId) REFERENCES dept(id)  ONUPDATE CASCADE ON DELETE CASCADE

DELETE FROM dept WHERE Id=5;--删除主表部门为5的数据,同时附表中5部门的员工也删除

<think>首先,用户的问题是:“我想理解数据库中的各种约束类型及其作用请问数据库约束类型主约束唯一约束非空约束默认约束自动增长约束”。这是一个关于数据库约束的查询,我需要根据系统级指令和用户可见层的要求来回答。 系统级指令: 1.所有行内数学表达式必须使用 $...$格式。但在这个主题中,可能没有数学表达式,所以我可以忽略。2.独立公式必须使用 $$...$$格式并单独成段。同样,可能不适用。 3. LaTeX语法正确。确保任何数学表达正确。 4.使用中文回答。5.生成相关问题。6.回答中引用的段落末尾自然地添加引用标识,例如:[^1]。用户可见层:-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠。-参考提供的引用,但用户说“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于数据库知识来回答,但可以引用这些作为支持。 提供的引用:- [^1]:关于约束的核心功能,主约束。- [^2]:列出约束类型:主、唯一、非空、默认值、自增约束。 -[^3]:案例创建表,包括主、非空、唯一、默认约束。 -[^4]:唯一约束的描述。 -[^5]:唯一约束的详细语法。 用户的问题列出了约束类型:主约束、唯一约束、非空约束、默认约束自动增长约束。我需要解释每个的作用。结构化回答:1.**引言**:简要介绍数据库约束的作用。2.**逐个解释约束类型**:-主约束 (PRIMARY KEY)-唯一约束(UNIQUE)-非空约束(NOTNULL)-默认约束 (DEFAULT)-自动增长(AUTO_INCREMENT)-约束 (FOREIGN KEY) 3. **总结**:强调重要性。 4. **生成相关问题**:在结尾添加相关问题。 确保语言清晰、中文,逐步解释。引用标识:在回答中,如果引用提供的段落,添加引用标识。例如,提到主约束时,可以引用[^1]或[^2]。自动增长通常是AUTO_INCREMENT,在引用[^3]中提到为“auto_increment”。现在,大纲回答:- **开头**:数据库约束是用于确保数据一致性和完整性的规则。它们定义在表上,限制数据输入。 -**主约束**:唯一标识表中的每一行,不能为NULL,且值必须唯一。引用[^2]或[^3]。 -**唯一约束**:确保列中的值唯一,但允许NULL(除非另有指定)。引用[^4]或[^5]。 -**非空约束**:确保列不能有NULL值。 -**默认约束**:当未指定值时,提供一个默认值。 -**自动增长**:通常用于主自动生成唯一值(如自增ID)。 -**约束**:维护表之间的关系,确保引用完整性。 -**总结**:使用这些约束可以提升数据质量。- **相关问题**:生成3-5个相关问题。相关问题示例: 1.如何添加或删除约束?2.约束在数据库设计中的最佳实践是什么? 3.约束如何处理级联操作?</think>### 数据库约束类型及其作用 数据库约束是用于维护数据一致性和完整性的核心机制。它们通过在表结构上定义规则,限制数据的输入和修改,确保数据符合业务逻辑要求。常见的约束类型包括主约束、唯一约束、非空约束、默认约束自动增长约束。下面我将逐步解释每个约束的作用、语法示例(基于 SQL)以及实际应用场景。 #### 1. **主约束 (PRIMARY KEY)** - **作用**:唯一标识表中的每一行记录,确保每行数据都有一个唯一且非空的标识符。主常用于快速查找和建立表间关系。 - **语法示例**: ```sql CREATE TABLE employees ( id INT PRIMARY KEY, -- 定义 id 为主 name VARCHAR(50) NOT NULL ); ``` - **关点**: - 值必须唯一且不能为 NULL。 - 一个表只能有一个主(但
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值