值类型和引用类型归纳

值类型简单类型有符号整数:sbyte, short, int, long
无符号整型:byte, ushort, unit, ulong
Unicode字符:char
IEEE浮点型:float, double
高精度小数:decimal
布尔型:bool
枚举类型用户自定义类型:enum
结构类型用户自定义类型:struct
引用类型类类型所有其他类型的最终基类:object
Unicode字符串:string
用户自定义类型:class
接口类型用户自定义类型:interface
数组类型单维与多维数组:int[], int[,]
委托类型用户自定义类型:delegate
   
C# 只有两种类型:值类型和引用类型。
a.值类型存储在栈上还是堆上,与它生存的时间,位置有关系,引用类型在托管堆分配空间。
b.值类型转换为引用类型称为装箱,引用类型转为值类型称为拆箱
c.如果是引用类型,当两个类型指向同一个地方,修改某一个时另外一个也随之改变;值类型是重新分配空间,然后赋值
d.值类型加ref,允许重新定向变量指向的对象地址,即引用
<think>嗯,用户这次明确要求了解数据库中数据类型数据约束的定义及作用。从引用的资料来看,用户已经具备一定数据库基础,之前也讨论过索引、视图等概念,可能需要系统性的归纳整理。用户可能正在学习数据库设计,或是需要实际应用这些知识解决项目中的表结构设计问题。考虑到用户前几次提问都很专业,这次应该提供更体系化的内容,特别是要区分不同数据类型的适用场景数据约束的实现逻辑。注意到引用[1][3]详细列出了MySQL的数值类型,而引用[2]提到SQLServer的建表语法。说明用户可能接触多种数据库系统,回答时需要兼顾通用性特殊性。特别要强调数值类型中unsigned这个MySQL特有的属性,以及不同数据库对字符串类型的实现差异。数据约束部分需要重点说明主键与外键的关联性,这是用户引用[3]里特别标注过的内容。对于ENUMSET这类特殊类型,要解释清楚它们约束的配合使用方式,比如如何替代部分检查约束的功能。性能方面也需要适当提及,比如varchar最大长度设置的实际影响,整型字段大小选择的优化意义等。用户之前关注过索引优化,这些细节应该能形成知识串联。最后生成的扩展问题要覆盖实际应用场景,特别是数据类型选择这类容易被忽视的设计决策点。用户似乎对实践性内容更感兴趣,像隐式转换这种坑点就很值得展开讨论。</think> ### 一、**数据类型(Data Type)** **定义**:规定表中每个列可存储的数据种类格式,是列的基本属性。 **作用**: 1. **限定数据范围**:确保数据符合业务逻辑(如年龄用整数,价格用浮点数)。 2. **优化存储空间**:精确选择类型可减少存储占用(如 `TINYINT` 仅需 1 字节,而 `INT` 需 4 字节)[^1][^3]。 3. **保障数据完整性**:防止非法数据(如在整数列插入字符串会报错)[^2]。 #### **常见数据类型**: | **类别** | **代表类型** | **描述** | **示例** | |------------------|----------------------|------------------------------------------|-----------------------| | **整数类型** | `TINYINT`, `INT` | 存储整数,范围由字节数决定 | 年龄(`AGE INT`) | | **浮点类型** | `FLOAT`, `DECIMAL` | 存储小数,`DECIMAL` 精准用于金额 | 价格(`PRICE DECIMAL(10,2)`) | | **字符类型** | `CHAR(10)`, `VARCHAR(255)` | 定长/变长文本,`VARCHAR` 节省空间 | 姓名(`NAME VARCHAR(20)`) | | **日期时间** | `DATE`, `DATETIME` | 日期或时间戳 | 生日(`BIRTHDAY DATE`) | | **二进制类型** | `BLOB` | 存储文件、图片等二进制数据 | 头像(`AVATAR BLOB`) | | **特殊类型** | `ENUM('男','女')` | 限定值从固定选项中选取 | 性别(`GENDER ENUM('男','女')`) | > 📌 **关键区别**: > - `CHAR(10)` 固定占用 10 字节,`VARCHAR(10)` 实际长度决定存储(如"abc"占 3 字节)。 > - `DECIMAL(10,2)` 精确存储小数(如 123.45),`FLOAT` 可能存在精度损失。 --- ### 二、**数据约束(Data Constraint)** **定义**:强制规则,用于保证数据完整性、一致性业务逻辑。 **作用**: 1. **防止无效数据**:如非空约束禁止插入空值。 2. **维护关联关系**:外键确保表间数据引用有效。 3. **强制业务规则**:如检查约束限定数值范围[^2]。 #### **核心约束类型**: | **约束** | **语法示例** | **作用** | |------------------|---------------------------------------|--------------------------------------------| | **主键约束** | `id INT PRIMARY KEY` | 唯一标识每行,禁止重复空值[^3] | | **外键约束** | `user_id INT REFERENCES users(id)` | 确保值必须存在于另一表的主键中 | | **唯一约束** | `email VARCHAR(50) UNIQUE` | 禁止列中重复值(可含空值) | | **非空约束** | `name VARCHAR(20) NOT NULL` | 强制列不允许 `NULL` 值 | | **检查约束** | `age INT CHECK (age >= 18)` | 限定值满足特定条件(如年龄 ≥ 18) | | **默认值约束** | `create_time DATETIME DEFAULT NOW()` | 未指定值时自动填充预设值 | > 💡 **典型场景**: > - **主键**:用户表 `id` 列,唯一标识用户。 > - **外键**:订单表的 `user_id` 关联用户表,确保订单对应有效用户。 > - **检查约束**:产品库存 `stock` 列约束为 `stock >= 0`。 --- ### 三、**数据类型与约束的协作** 创建表示例(MySQL): ```sql CREATE TABLE employees ( id INT PRIMARY KEY, -- 主键约束 name VARCHAR(50) NOT NULL, -- 非空约束 email VARCHAR(100) UNIQUE, -- 唯一约束 age TINYINT UNSIGNED CHECK (age >= 18), -- 无符号整数 + 检查约束 dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(id) -- 外键约束 ); ``` > ✅ **效果**: > - 插入数据时,数据库自动校验数据类型约束(如 `age` 负数会被拒绝)。 > - 删除部门表记录时,若 `employees` 存在关联数据,外键可阻止删除或级联处理[^2]。 --- ### **总结** - **数据类型**:定义数据**存储格式**,影响存储效率值域。 - **数据约束**:定义数据**逻辑规则**,保障准确性关联性。 二者共同确保数据库的**可靠性**与**业务合规性**。 --- **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值