2026/5/20 17:48:43
网站建设
项目流程
乐清建网站哪家好,美食网站网站建设定位,老君山旅游网页设计模板,郑州seo关键词E#xff09;
表是关系型数据库中最基本的对象#xff0c;PostgreSQL支持丰富的数据类型与约束机制。
常用数据类型示例#xff1a;
类型分类常用数据类型存储范围/特性示例数值型INT/BIGINT4/8字节整数100,500数值型DECIMAL(p,s)高精度十进制数DECIMAL(10,2)→1234.56字…E表是关系型数据库中最基本的对象PostgreSQL支持丰富的数据类型与约束机制。常用数据类型示例类型分类常用数据类型存储范围/特性示例数值型INT/BIGINT4/8字节整数100,500数值型DECIMAL(p,s)高精度十进制数DECIMAL(10,2)→1234.56字符型VARCHAR(n)可变长字符串数据分析字符型TEXT无长度限制字符串长文本内容日期时间DATE年月日20231231日期时间TIMESTAMPWITHTIMEZONE带时区的时间戳2024010110:00:0008布尔型BOOLEAN真/假TRUE/FALSE二进制BYTEA二进制数据\\xDEADBEEF创建表示例sql部门表CREATETABLEdepartments(dept_idINTEGERPRIMARYKEY,dept_nameVARCHAR(50));员工信息表含多种约束CREATETABLEemployees(emp_idSERIALPRIMARYKEY,自增主键emp_nameVARCHAR(50)NOTNULL,非空约束emailVARCHAR(100)UNIQUE,唯一约束hire_dateDATEDEFAULTCURRENT_DATE,默认值约束salaryNUMERIC(10,2)CHECK(salary0),检查约束department_idINTEGERREFERENCESdepartments(dept_id)外键约束);约束类型对比约束类型关键字作用性能影响主键PRIMARYKEY唯一标识记录读优化写轻微影响唯一UNIQUE确保字段值唯一类似主键允许NULL非空NOTNULL禁止字段为空无索引性能影响检查CHECK自定义逻辑约束每次写入时触发检查外键REFERENCES建立表间关联级联操作需额外开销修改表结构ALTERTABLEALTERTABLE功能丰富用于表创建后修改其定义。sql添加字段带默认值ALTERTABLEemployeesADDCOLUMNphoneVARCHAR(20)DEFAULT未提供;修改数据类型需重建表ALTERTABLEemployeesALTERCOLUMNsalaryTYPENUMERIC(12,2);删除字段生产环境慎用ALTERTABLEemployeesDROPCOLUMNfax;添加外键延迟约束检查ALTERTABLEemployeesADDCONSTRAINTfk_deptFOREIGNKEY(department_id)REFERENCESdepartments(dept_id)DEFERRABLEINITIALLYDEFERRED;关键选项解析CASCADE自动删除依赖该列的对象如视图、外键。RESTRICT默认存在依赖对象时拒绝删除。USING子句指定从旧类型到新类型的转换规则。删除表DROPTABLEsql级联删除依赖对象DROPTABLEIFEXISTSemployeesCASCADE;仅删除表结构保留数据PostgreSQL12TRUNCATETABLEemployees;重要提示TRUNCATE比DELETEFROM效率高10–100倍适合清空大表。2.3索引创建与管理索引是提升查询性能的关键机制PostgreSQL支持多种索引类型。基本索引创建sql创建Btree索引默认CREATEINDEXidx_employee_nameONemployees(emp_name);创建唯一索引CREATEUNIQUEINDEXidx_unique_emailONemployees(email);创建多列复合索引CREATEINDEXidx_dept_salaryONemployees(department_id,salaryDESC);并发创建索引适用于在线业务避免阻塞其他会话的DML操作。sqlCREATEINDEXCONCURRENTLYidx_employee_nameONemployees(emp_name);部分索引PartialIndex仅对满足条件的行创建索引减少索引大小。sqlCREATEINDEXidx_active_employeesONemployees(department_id)WHEREactivetrue;表达式索引在表达式上创建索引。sqlCREATEINDEXidx_lower_nameONemployees(LOWER(emp_name));2.4视图创建与管理视图是基于一个或多个表的查询结果集定义的虚拟表不存储实际数据。基本视图创建sql基于多表连接创建视图CREATEVIEWemployee_detailsASSELECTe.emp_id,e.emp_name,e.salary,d.dept_nameFROMemployeeseJOINdepartmentsdONe.department_idd.dept_id;查询视图SELECTFROMemployee_detailsWHEREsalary5000;可更新视图与检查选项sql创建带检查选项的视图CREATEVIEWhigh_paid_employeesASSELECTFROMemployeesWHEREsalary10000WITHCHECKOPTION;以下插入会失败500010000INSERTINTOhigh_paid_employees(emp_name,salary)VALUES(John,5000);物化视图MaterializedView将查询结果实际存储需手动刷新。sql创建物化视图CREATEMATERIALIZEDVIEWmonthly_sales_summaryASSELECTdate_trunc(month,sale_date)ASmonth,product_id,SUM(amount)AStotal_salesFROMsalesGROUPBYdate_trunc(month,sale_date),product_id;刷新物化视图REFRESHMATERIALIZEDVIEWmonthly_sales_summary;2.5外键与参照完整性深度解析外键是实现参照完整性ReferentialIntegrity的核心机制。外键约束创建sql在创建表时定义外键CREATETABLEorders(order_idSERIALPRIMARYKEY,product_idINTEGERREFERENCESproducts(product_id)ONDELETECASCADE,quantityINTEGER,order_dateDATEDEFAULTCURRENT_DATE);通过ALTERTABLE添加外键ALTERTABLEordersADDCONSTRAINTfk_productFOREIGNKEY(product_id)REFERENCESproducts(product_id);引用动作ReferentialActions定义父表记录更新或删除时子表记录的响应方式。动作描述示例NOACTION/RESTRICT禁止操作默认父表记录有引用时禁止删除CASCADE级联删除或更新删除父表记录时同时删除子表相关记录SETNULL将子表中外键列设置为NULL删除父表记录时将子表外键设为NULLSETDEFAULT将子表中外键列设置为默认值删除父表记录时将子表外键设为默认值示例sqlCREATETABLEorder_items(item_idSERIALPRIMARYKEY,order_idINTEGERREFERENCESorders(order_id)ONDELETECASCADE,product_idINTEGERREFERENCESproducts(product_id)ONDELETESETNULL,quantityINTEGER);外键性能优化若PostgreSQL版本未自动建立外键索引需手动创建以避免影响更新或删除性能。sql为外键列创建索引CREATEINDEXidx_order_items_order_idONorder_items(order_id);CREATEINDEXidx_order_items_product_idONorder_items(product_id);2.6对象重命名RENAME重命名操作用于修改数据库对象的名称。sql重命名表ALTERTABLEemployeesRENAMETOstaff;重命名列ALTERTABLEemployeesRENAMECOLUMNemp_nameTOfull_name重命名索引ALTERINDEXidx_old_nameRENAMETOidx_new_name;重命名视图ALTERVIEWold_view_nameRENAMETOnew_view_name;重命名序列ALTERSEQUENCEold_sequence_nameRENAMETOnew_sequence_name;注意事项重命名操作立即生效无法回滚。重命名后所有引用该对象的地方均需更新。建议在低峰期执行重命名操作。2.7注释管理COMMENT注释是数据库文档化的重要组成部分。基本语法sqlCOMMENTON{对象类型}对象名称IS注释文本|NULL;为各类对象添加注释sql为表添加注释COMMENTONTABLEemployeesIS员工信息表存储公司所有员工的基本信息;为列添加注释COMMENTONCOLUMNemployees.salaryIS员工月薪单位为人民币元税前金额;为索引添加注释COMMENTONINDEXidx_employee_nameIS员工姓名索引用于加速按姓名查询;为视图添加注释COMMENTONVIEWemployee_detailsIS员工详细信息视图包含员工及其部门信息;为函数添加注释COMMENTONFUNCTIONcalculate_bonus(decimal,integer)IS计算员工年终奖金参数1基本工资参数2绩效评分;修改与删除注释sql修改注释直接覆盖COMMENTONTABLEemployeesIS员工信息主表包含员工基本信息、薪资和部门信息;删除注释设置为NULLCOMMENTONTABLEemployeesISNULL;查看注释sql使用系统函数查看SELECTobj_description(employees::regclass,pg_class);SELECTcol_description(employees::regclass,列序号);注释最佳实践为所有重要对象表、列、索引、视图、函数等添加注释。保持注释简洁明了统一团队内部注释风格。在注释中说明重要的业务规则与约束。记录重要的表结构变更原因与时间权限与安全提示大多数对象只有所有者可设置或修改注释。注释无安全机制所有连接用户均可查看请勿存放敏感信息。2.8NULL值的处理与最佳实践NULL表示“未知”或“不存在”的值不同于空字符串或零。NULL比较与计算sql正确使用ISNULL判断SELECTFROMemployeesWHEREsalaryISNULL;错误与NULL的比较结果总是NULL视为FALSESELECTFROMemployeesWHEREsalaryNULL;不会返回任何行包含NULL的计算结果通常也是NULLSELECT10NULL;返回NULLSELECTHello||NULL;返回NULLNULL与约束NOTNULL约束确保列不允许NULL值。UNIQUE约束PostgreSQL视多个NULL值为互不相同允许存在多个NULL。外键中的NULL外键列允许为NULL表示该记录未关联到父表。处理NULL的函数sqlCOALESCE返回第一个非NULL值SELECTCOALESCE(salary,0)ASeffective_salaryFROMemployees;NULLIF如果两个表达式相等则返回NULLSELECTNULLIF(salary,0)FROMemployees;若salary为0则返回NULLISDISTINCTFROM比较时考虑NULLSELECTFROMt1WHEREaISDISTINCTFROMb;来源小程序app开发|ui设计|软件外包|IT技术服务公司-木风未来科技-成都木风未来科技有限公司