还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据库的基本操作教学课件欢迎来到数据库基本操作教学课程本课程将全面介绍数据库的基础知识,从数据库的概念、种类、结构到基本操作语句,帮助您掌握数据库管理和应用的核心技能无论您是初学者还是希望巩固基础知识的从业人员,本课程都将为您提供清晰的学习路径和实用的案例演示,确保您能够熟练运用数据库技术解决实际问题让我们开始这段数据管理与分析的学习旅程吧!什么是数据库信息存储和管理系统典型应用场景数据库是一个按照数据结构来组数据库广泛应用于银行交易系织、存储和管理数据的仓库它统、电子商务平台、医疗记录管能够有效地管理大量数据,确保理、学校管理系统、社交媒体平数据的一致性、完整性和安全台等领域无论是简单的个人通性现代数据库不仅存储数据,讯录还是复杂的企业资源规划系还提供各种工具和功能帮助用户统,都离不开数据库的支持管理和分析数据数据库价值和意义数据库使组织能够集中管理数据,减少数据冗余和不一致性它支持多用户同时访问,提高数据处理效率,为决策提供数据支持,已成为现代信息技术基础设施的核心组成部分数据库的发展历史层次、网状数据库世纪年代,第一代数据库系统采用层次模型(如的)和网2060IBM IMS状模型(如)这些早期系统虽然功能有限,但为数据的结CODASYL构化存储奠定了基础关系型数据库的兴起年,研究员提出关系模型,引发数据库领域革命1970IBM E.F.Codd随后、、等关系型数据库系统相继出现,并在Oracle DB2SQL Server年代成为主流数据管理方案80-90新趋势NoSQL世纪初,面对互联网大数据需求,数据库如、21NoSQL MongoDB、等崛起,提供更灵活的数据模型和更高的扩展性,Cassandra Redis满足了现代应用程序的多样化需求常见数据库种类MySQL PostgreSQLOracle最流行的开源关系型数据库之功能强大的开源对象关系型数企业级关系型数据库,提供全一,以其可靠性、易用性和性据库系统,支持高级数据类型面的数据管理解决方案以其能著称广泛应用于网站和应和性能优化因其强大的稳定高性能、高可用性和安全性闻用开发,被Facebook、性和合规性,常用于需要复杂名,广泛用于大型企业和政府Twitter等知名公司使用查询和高可靠性的企业应用机构的关键业务系统MongoDB领先的NoSQL文档数据库,采用JSON类似的BSON格式存储数据特别适合处理非结构化数据和需要快速开发迭代的应用场景,如内容管理和用户数据存储关系型数据库与非关系型数据库关系型数据库特点非关系型数据库特点关系型数据库基于关系模型,使用表格存储数据,各表通过键关非关系型数据库采用多种数据模型,如文档、键值、NoSQL联具有严格的模式定义,支持事务,确保数据一致性和列族或图形模型通常具有更灵活的模式设计,优先考虑可扩展ACID完整性性和性能主要优势在于主要优势在于结构化查询语言标准化处理大量非结构化数据的能力•SQL•强大的事务处理能力水平扩展性强••成熟的生态系统和工具高吞吐量和低延迟••数据库基本术语表()Table数据库中存储数据的基本单位,由行和列组成每个表代表一种特定类型的实体,如用户表、产品表等表可以想象为电子表格中的工作表,有组织地存储着相关数据行()Row表中的一条记录,也称为元组例如,用户表中的一行代表一个用户的完Tuple整信息每行必须是唯一的,通常通过主键来标识列()Column表中的一个字段或属性,定义了存储在表中的特定类型的数据例如,姓名、年龄、电子邮件等每列都有特定的数据类型和约束条件主键()Primary Key唯一标识表中每条记录的字段或字段组合主键值不能重复,也不能为空,确保了数据的唯一性和完整性常见的主键例如用户或产品编号ID数据库对象介绍视图()View虚拟表,基于一个或多个表的查询结果索引()Index提高查询性能的数据结构存储过程、触发器预编译的代码块和自动执行的程序SQL视图是基于查询的结果集,可以像表一样被查询,但不存储实际数据它们用于简化复杂查询、提供数据安全性和呈现定制化数据视图SQL索引类似于书籍的目录,能够加快数据检索速度,但会增加写操作的开销和占用额外存储空间常见索引类型包括树索引、哈希索引等B存储过程是预先编译的语句集合,可以接受参数并执行复杂操作;而触发器是在表上特定事件发生时自动执行的程序,如插入、更新或删除数SQL据时数据库管理系统()简介DBMS常见功能DBMS数据定义、数据操作、数据完整性维护、事务管理、并发控制、安全性控制、数据备份定义与作用DBMS与恢复等现代还提供数据复制、分DBMS数据库管理系统是管理数据库的软件系区和高级查询优化等功能统,负责数据的存储、检索、更新和管理它作为用户或应用程序与数据库之用户与权限控制机制间的接口,提供了一系列工具和功能来操作和维护数据DBMS实现多层次的安全机制,包括身份验证、授权和访问控制不同用户可被赋予不同级别的权限,如只读、写入、管理等,确保数据的安全性和隐私性简介SQL定义与地位SQL结构化查询语言,是关系型数据库Structured QueryLanguage的标准语言自年标准化以来,已成为数据库操作的1986ANSI SQL通用语言,被几乎所有主流关系型数据库系统采用主要分类SQL语句根据功能分为四大类数据定义语言、数据操作语言SQL DDL、数据控制语言和事务控制语言,分别用于不同DML DCLTCL类型的数据库操作方言差异SQL虽然有标准规范,但各个数据库系统都有自己的扩展和变体,如SQL的特有函数、的和的,在MySQL OraclePL/SQL SQL Server T-SQL实际应用中需要注意这些差异数据库安装与环境搭建安装示例MySQL是一款易于安装的流行开源数据库在系统下,您可以MySQL Windows从官方网站下载安装包,按照向导完成安装安装过程中需要设置用root户密码,并可选择安装额外组件如MySQL Workbench连接数据库工具安装完成后,您可以选择多种工具连接数据库自带的命令行MySQL客户端可以执行所有操作,而图形化工具如SQL MySQL、或则提供更友好的界面,方便数据库Workbench Navicat DBeaver设计和查询验证安装环境连接成功后,可以通过简单命令如或SHOW DATABASES;来验证数据库是否正常工作初次安装后通SELECT VERSION;常包含、等系统数据库,这是mysql information_schema MySQL正常运行所必需的数据库的连接方法用户登录方式本地与远程连接数据库连接通常需要提供服务本地连接使用或localhost器地址、端口号、用户名和密作为主机地址,适
127.
0.
0.1码等认证信息默认用于数据库与客户端在同一台MySQL使用端口,初始安装时机器上的情况远程连接则需3306创建了用户作为管理员账要指定服务器的地址或域root IP户安全起见,正式环境应创名,并确保数据库配置允许远建具有适当权限的专用账户程访问且网络环境正确设置用户名和密码设置数据库用户的密码应当足够复杂以确保安全性在中,可以使MySQL用ALTER USERusername@host IDENTIFIED BY来更改密码密码策略通常要求使用字母、数字new_password;和特殊字符的组合创建数据库创建数据库是使用数据库系统的第一步标准SQL语法为CREATE DATABASEdatabase_name;例如,创建名为test_db的数据库,命令为CREATE DATABASE test_db;您可以添加字符集和排序规则参数CREATE DATABASEtest_db CHARACTERSET utf8mb4COLLATE utf8mb4_unicode_ci;这确保数据库可以正确存储和处理各种语言的字符,包括中文和表情符号数据库命名应遵循一定规范仅使用字母、数字和下划线;避免使用数据库保留字;名称应反映数据库用途,便于识别和管理创建前应检查是否已存在同名数据库,以避免错误查看与删除数据库查看数据库删除数据库使用命令可列出服务器上所有的数据库使用命令可永久删除数据库及其所有内容SHOW DATABASESDROP DATABASESHOWDATABASES;DROP DATABASEdatabase_name;执行后,您将看到包括系统数据库如、例如,删除数据库mysql test_db DROPDATABASEtest_db;和您创建的用户数据库在内的完整列information_schema这是一个不可逆操作,执行前请确保表已备份重要数据•确认是正确的数据库名•拥有足够的权限•选择数据库语句切换数据库当前数据库查看方法跨数据库操作USE在开始对特定数据库进行操作前,需要先选择该如果您忘记了当前正在使用哪个数据库,可以使即使已选择某个数据库,也可以通过完全限定名数据库使用USE命令可以切换当前工作的数据用以下命令查询称操作其他数据库中的表库上下文SELECT DATABASE;SELECT*FROM other_db.table_name;USE database_name;此函数返回当前选择的数据库名称如果没有选这种方法在需要联合查询多个数据库的表时特别例如USE test_db;择任何数据库,则返回NULL有用执行此命令后,所有不指定数据库名称的表操作将默认应用于当前选中的数据库数据表的基本结构表名命名规范清晰描述内容,使用名词或名词短语字段命名规则使用有意义的名称,避免特殊字符数据类型选择根据存储内容选择合适的类型表名应当能够清晰描述所存储的数据内容,通常使用复数形式表示包含多条记录的实体集合,如users、products或orders在系统中相关的表可以使用前缀来分组,如crm_customers、crm_contacts等字段命名应当简洁明了,通常使用小写字母和下划线分隔单词(如user_id)或驼峰命名法(如userId)主键通常命名为id或表名_id,外键则通常以引用表名为前缀每个字段的数据类型应根据实际存储的内容选择,既要保证数据的准确性,又要考虑存储效率例如,使用INT存储整数,VARCHAR存储变长字符串,DATETIME存储时间信息等常用数据类型类型分类类型名称说明适用场景数值类型INT整数,范围-ID、年龄、计数2^31~2^31-1数值类型DECIMALp,s精确小数,p总位金额、价格数,s小数位字符串类型VARCHARn变长字符串,最大n姓名、地址、描述个字符字符串类型TEXT长文本,最大文章内容、评论65535字符日期时间类型DATE日期,格式YYYY-生日、纪念日MM-DD日期时间类型DATETIME日期时间,YYYY-创建时间、更新时间MM-DDHH:MM:SS布尔类型BOOLEAN/TINYIN真/假值状态标志、是否选项T1创建数据表规划表结构编写语句CREATE TABLE确定表名、字段及其数据类型定义表结构及约束条件验证表结构执行创建命令检查表是否按预期创建在数据库中实际创建表创建表的基本SQL语法如下CREATE TABLEtable_name column1_name data_type constraints,column2_name data_type constraints,...PRIMARY KEY column_name;以创建用户表为例CREATE TABLEusers id INT NOT NULL AUTO_INCREMENT,username VARCHAR50NOT NULLUNIQUE,password VARCHAR255NOT NULL,email VARCHAR100NOT NULLUNIQUE,created_at DATETIMEDEFAULT CURRENT_TIMESTAMP,PRIMARY KEYid;查看与删除数据表查看所有表使用SHOW TABLES命令列出当前数据库中的所有表SHOW TABLES;查看表结构使用DESCRIBE或DESC命令查看特定表的结构DESC table_name;或使用更详细的SHOW CREATE TABLE SHOW CREATE TABLEtable_name;删除表使用DROP TABLE命令删除表及其所有数据DROP TABLEtable_name;谨慎使用,此操作不可撤销如果表被其他表引用,可能需要先删除外键约束或使用CASCADE选项表结构修改添加列使用ALTER TABLEADD命令向现有表添加新列ALTER TABLEtable_nameADD column_name data_type constraints;例如ALTER TABLEusers ADDphone VARCHAR20;修改列使用ALTER TABLEMODIFY或ALTER TABLECHANGE修改列定义ALTER TABLEtable_nameMODIFY column_name new_data_type new_constraints;例如ALTER TABLEusers MODIFYusername VARCHAR100NOT NULL;删除列使用ALTER TABLEDROP删除列ALTER TABLEtable_nameDROP COLUMNcolumn_name;例如ALTER TABLEusers DROPCOLUMN phone;添加删除主键/添加主键ALTER TABLEtable_nameADD PRIMARY KEYcolumn_name;删除主键索引的作用与创建提高查询效率语法索引示例CREATE INDEXUNIQUE索引是数据库中用于加速查询的数据结构,类似于书籍的目录它允许创建普通索引的基本语法唯一索引不仅提高查询性能,还确保索引列的值唯一性数据库系统快速定位满足条件的记录,而无需扫描整个表对于大型表和频繁查询的列,添加适当的索引可以显著提高性能CREATE INDEXindex_name CREATEUNIQUE INDEX idx_username然而,索引也增加了写操作(插入、更新、删除)的开销,因为索引结ON table_name column1,column2,...;ON users username;构也需要同步更新此外,索引占用额外的存储空间因此,设计索引需要权衡查询性能和写性能例如,在users表的email列上创建索引或在现有表上添加唯一约束(会自动创建唯一索引)CREATE INDEXidx_user_email ALTERTABLE usersONusers email;ADD CONSTRAINTunq_email UNIQUEemail;也可以在表创建时直接定义索引CREATE TABLEusers...INDEXidx_user_email email;数据的插入操作语法详解一次插入多行INSERT INTO向表中插入数据的基本语法提高批量插入性能的语法INSERT INTOtable_name column1,column2,...INSERT INTOtable_name column1,column2,...VALUES value1,value2,...;VALUESvalue1A,value2A,...,value1B,value2B,...,示例向用户表添加一条记录value1C,value2C,...;INSERT INTOusers username,password,email示例VALUES zhangsan,password123,zhang@example.com;INSERT INTOusersusername,password,email如果为表的所有列插入值,可以省略列名部分VALUESwangwu,pass789,wang@example.com,zhaoliu,pass101,zhao@example.com,INSERT INTOusersqianqi,pass202,qian@example.com;VALUES NULL,lisi,pass456,li@example.com,NOW;此方式减少网络通信次数,显著提高插入大量数据的效率其中NULL表示自增主键会自动生成数据的查询操作基础SELECT语句是SQL中最常用的命令,用于从数据库检索数据基本语法为SELECT column1,column2,...FROM table_name[WHERE condition][ORDER BYcolumn ASC|DESC][LIMIT offset,count];查询特定字段示例SELECT username,email FROM users;这将只返回用户表中的用户名和邮箱字段,减少不必要的数据传输子句与条件查询WHERE比较运算符使用、逻辑条件值判断AND ORNULL子句使用比较运算使用逻辑运算符组合多个条表示缺失或未知值,WHERE NULL符筛选符合条件的记录件需要特殊处理等所有条件都必须检查是否为•=,,,,=,=•AND•IS NULL基本比较为真NULL任一条件为真即可检查是•BETWEEN...AND...•OR•IS NOT NULL范围查询否不为条件取反NULL•NOT集合匹配•IN...注意不能用等号比例如NULLSELECT*FROM模式匹配代较•LIKE%users WHEREage=18表任意字符序列中国AND country=;正确SELECT*FROM例如SELECT*FROM contactsWHERE phoneproductsWHERE priceIS NULL;100;错误SELECT*FROMcontacts WHEREphone=NULL;数据排序语法ORDER BY使用ORDER BY子句对查询结果排序升序与降序排序ASC为升序默认,DESC为降序多字段排序先按第一字段排序,值相同时按第二字段排序ORDER BY子句用于按一个或多个列对结果集进行排序基本语法为SELECT column1,column2,...FROM table_nameORDER BYcolumn1[ASC|DESC],column2[ASC|DESC],...;默认情况下,ORDER BY使用升序ASC排列例如,按商品价格从低到高排序SELECT*FROM productsORDER BYprice ASC;使用DESC关键字可实现降序排列例如,按用户注册时间从新到旧排序SELECT*FROM usersORDER BYcreated_at DESC;多字段排序示例SELECT*FROM employeesORDER BYdepartment ASC,salary DESC;该查询先按部门名称字母顺序排序,然后在每个部门内按薪资从高到低排序数据修改操作基本语法UPDATEUPDATE语句用于修改表中已存在的记录UPDATE table_nameSET column1=value1,column2=value2,...WHERE condition;WHERE子句至关重要,它指定了哪些行需要更新如果省略WHERE子句,表中所有记录都将被更新!条件更新最佳实践是始终使用具体条件进行更新UPDATE productsSETprice=
199.99WHERE product_id=1001;在执行重要的UPDATE操作前,建议先用SELECT语句测试WHERE条件,确认影响的记录符合预期多字段同时更新单个UPDATE语句可同时更新多个字段UPDATE usersSETlast_login=NOW,login_count=login_count+1WHERE user_id=123;注意上例中login_count的更新使用了字段当前值进行计算数据删除语法结构清空表数据DELETE TRUNCATE TABLE语句用于删除表中的行如果需要删除表中的所有数据但保留表结构,比DELETE TRUNCATETABLE更高效DELETEDELETE FROM table_nameWHERE condition;TRUNCATETABLEtable_name;与类似,省略子句将删除表中所有数据!因此务必谨慎与的主要区别UPDATE WHERETRUNCATE DELETE使用,并在执行前仔细检查条件不能使用子句•TRUNCATE WHERE删除特定记录示例操作不会记录在事务日志中,无法回滚•TRUNCATE会重置计数器•TRUNCATE AUTO_INCREMENTDELETE FROM orders通常执行更快,尤其是大表•TRUNCATEWHERE order_date2020-01-01;在执行前,应确保已备份重要数据,因为此操作不可逆!TRUNCATE该语句将删除年之前的所有订单记录2020限制与分页1003每页记录数起始偏移量分页导航常见的单页显示数量,便于用户浏览第一页的开始位置索引典型的分页控件显示页数LIMIT子句用于限制查询返回的结果数量,是实现数据分页的核心语法SELECT column1,column2,...FROM table_name[WHERE condition][ORDER BYcolumn ASC|DESC]LIMIT[offset,]row_count;简单限制返回结果数量SELECT*FROM productsLIMIT10;仅返回前10条产品记录实现分页效果SELECT*FROM productsORDER BYid LIMIT20,10;这会跳过前20条记录,返回从第21条开始的10条记录,相当于第3页(假设每页10条)分页计算公式LIMIT page_number-1*page_size,page_size;其中page_number是页码,page_size是每页记录数聚合函数简介和COUNT SUMAVG MAXMIN计算符合条件的行数计算指定列的所有值之和计算指定列的平均值同样分别返回指定列的最大值和计算所有行,仅适用于数值类型列仅适用于数值类型,且忽略最小值可用于数值、字符COUNT*计算指值串和日期类型COUNTcolumn NULL定列非值的行数NULL例如例如例如SELECT SELECTSELECT例如SELECT SUMtotal_amount AVGpriceFROM MAXprice,MINpriceCOUNT*FROM users;FROMorders;products;FROM products;或SELECTCOUNTemail FROMusers;分组统计多表查询简介关联查询从多个表中检索相关数据表关系一对
一、一对多、多对多连接键通过主键和外键建立表关系在关系型数据库设计中,数据通常分布在多个相互关联的表中,以减少数据冗余并提高数据完整性例如,订单表可能只存储客户,而客户详细ID信息存储在客户表中多表查询允许我们在单个操作中从相关表中检索数据最常见的多表查询方式是使用操作,根据表之间的关系将行组合在一起JOIN关系型数据库支持多种连接类型,包括内连接、左连接、右连接和全连接不同类型的连接INNER JOINLEFT JOIN RIGHT JOINFULL JOIN适用于不同的业务场景,正确选择连接类型对于获取所需数据至关重要内连接()INNER JOIN内连接是最常见的连接类型,它只返回两个表中匹配行的结果语法结构如下SELECT A.column1,A.column2,B.column1,B.column2,...FROM table_A ASAINNER JOIN table_B ASB ONA.key=B.key;实际示例,查询订单及其客户信息SELECT orders.order_id,orders.order_date,customers.customer_nameFROM ordersINNERJOIN customers ON orders.customer_id=customers.customer_id;左右连接()LEFT/RIGHT JOINLEFT JOINRIGHT JOIN左连接返回左表中的所有行,即使在右表中没有匹配项如果右表中没有匹配,结果中右表的列将右连接与左连接相反,返回右表中的所有行,即使在左表中没有匹配项语法包含NULL值语法SELECT A.column1,B.column2SELECT A.column1,B.column2FROM table_A ASAFROM table_A ASA RIGHT JOIN table_B ASB ONA.key=B.key;LEFT JOIN table_B ASB ONA.key=B.key;示例查询所有订单及其客户(包括没有客户信息的订单)示例查询所有客户及其订单(包括没有订单的客户)SELECT orders.order_id,customers.customer_nameSELECT customers.customer_name,orders.order_id FROMordersFROM customersRIGHT JOINcustomersONorders.customer_id=customers.customer_id;LEFT JOIN orders ON customers.customer_id=orders.customer_id;注意在实践中,LEFT JOIN更为常用,因为查询的编写通常从主要关注的表开始RIGHT JOIN应用场景查找没有订单的客户的任何查询都可以通过调整表顺序改写为等效的LEFT JOINSELECTcustomers.customer_nameFROM customersLEFTJOINordersON customers.customer_id=orders.customer_idWHERE orders.order_id IS NULL;全连接与自连接全连接()自连接()FULL JOINSELF JOIN全连接返回左表和右表中的所有行当没有匹配时,结果中相应表的列将自连接是表与自身的连接,通过将同一个表当作两个表来处理自连接在包含NULL值它相当于LEFTJOIN和RIGHTJOIN的组合语法处理层次数据(如组织结构)时特别有用语法SELECT A.column1,B.column2SELECT A.column1,B.column2FROM table_A ASA FROM table_name ASAFULL JOIN table_B ASB ONA.key=B.key;JOINtable_name ASB ONA.key=B.related_key;注意MySQL不直接支持FULL JOIN,但可以通过UNION组合LEFT示例查询员工及其直接经理JOIN和RIGHTJOIN实现SELECT E.employee_name AS员工,SELECT*FROM table_A LEFTJOINtable_B ONA.key=B.key M.employee_name AS经理UNION FROMemployees ASESELECT*FROM table_A RIGHTJOINtable_B ONA.key=B.key JOINemployees ASM ONE.manager_id=M.employee_id;WHERE A.key ISNULL;在自连接中,必须为表指定不同的别名(如上例中的E和M),以区分角色子查询嵌套查询筛选数据子查询是嵌套在另一个查询内的SELECT语句子查询结果作为外部查询的条件嵌套层级比较操作子查询可以多层嵌套,但影响可读性使用IN,EXISTS,ANY,ALL等操作符子查询可以出现在SELECT、FROM、WHERE和HAVING子句中最常见的是WHERE子句中的子查询SELECT column1,column2,...FROMtable_nameWHERE column_name operatorSELECT column_name FROMtable_name WHEREcondition;示例查询价格高于平均价格的产品SELECT product_name,priceFROM productsWHEREpriceSELECT AVGpriceFROM products;视图的创建与使用视图定义视图是虚拟表,基于SQL查询的结果集视图不存储数据,而是在访问时动态生成结果视图提供了一种将复杂查询封装为简单逻辑单元的方法语法CREATE VIEW创建视图的基本语法CREATE VIEW view_name ASSELECTcolumn1,column2,...FROMtable_nameWHERE condition;例如,创建一个客户订单汇总视图CREATE VIEWcustomer_orders ASSELECTc.customer_id,c.customer_name,COUNTo.order_id ASorder_count,SUMo.total_amount AStotal_spentFROM customerscLEFT JOINorders oONc.customer_id=o.customer_idGROUP BYc.customer_id,c.customer_name;查询视图视图使用方式与表相同SELECT*FROM customer_ordersWHERE order_count5;视图的其他操作•修改视图ALTER VIEWview_name ASSELECT...•删除视图DROP VIEWview_name;•查看视图定义SHOWCREATEVIEWview_name;数据完整性与约束与约束和NOT NULLUNIQUE CHECKDEFAULTNOT NULL约束确保列不接受NULL值CHECK约束确保列中的值满足特定条件CREATE TABLEusersCREATE TABLEproducts id INT PRIMARY KEY,id INT PRIMARYKEY,username VARCHAR50NOT NULL,name VARCHAR100NOT NULL,email VARCHAR100NOT NULLprice DECIMAL10,2CHECK price0;;UNIQUE约束确保列中的所有值都是唯一的DEFAULT约束为列提供默认值CREATE TABLEusersCREATE TABLEorders id INT PRIMARYKEY,idINTPRIMARYKEY,username VARCHAR50NOT NULLUNIQUE,customer_idINTNOT NULL,email VARCHAR100NOTNULLUNIQUE order_date DATETIMEDEFAULT CURRENT_TIMESTAMP,;status VARCHAR20DEFAULT pending;外键()FOREIGN KEY外键约束用于防止破坏表之间的关系,确保引用完整性CREATE TABLEorders idINTPRIMARYKEY,customer_idINT,order_date DATE,FOREIGN KEYcustomer_idREFERENCES customersidON DELETE CASCADEONUPDATE CASCADE;ONDELETE/UPDATE选项指定当引用的键被删除或更新时的操作CASCADE(级联)、SET NULL、RESTRICT(限制)等事务基础事务定义和原则事务控制语句ACID事务是数据库中的一个逻辑工作单元,由一系列操作组MySQL中的事务控制语句成,这些操作要么全部成功执行,要么全部不执行•开始事务BEGIN或START TRANSACTIONACID代表事务的四个关键特性•提交事务COMMIT•原子性Atomicity事务中的操作要么全部完成,•回滚事务ROLLBACK要么全部失败•设置保存点SAVEPOINT savepoint_name•一致性Consistency事务执行前后,数据库从一•回滚到保存点ROLLBACK TOsavepoint_name个一致状态转变为另一个一致状态事务示例•隔离性Isolation并发执行的事务之间不会互相影响•持久性Durability一旦事务提交,其结果就是永久的BEGIN;UPDATE accountsSET balance=balance-100WHERE id=1;UPDATE accountsSET balance=balance+100WHERE id=2;COMMIT;注意事项事务使用注意点•事务应尽量简短,避免长时间占用资源•不同隔离级别READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ,SERIALIZABLE提供不同的并发控制•只有支持事务的存储引擎如InnoDB才能使用事务功能•默认情况下,MySQL的自动提交模式是开启的,可通过SET autocommit=0关闭用户权限管理添加数据库用户在MySQL中创建新用户的命令CREATE USERusername@host IDENTIFIEDBY password;例如,创建一个可从任何主机连接的用户CREATE USERwebuser@%IDENTIFIEDBYsecret123;创建只能从本地连接的用户CREATE USERdbadmin@localhost IDENTIFIEDBY admin123;授权与回收权限授予权限的命令GRANT permission1,permission2,...ON database_name.table_nameTO username@host;例如,授予用户对特定数据库的所有权限GRANT ALLPRIVILEGES ONmydb.*TO webuser@%;回收权限的命令REVOKE permission1,permission2,...ON database_name.table_nameFROM username@host;权限粒度控制MySQL支持多种权限类型数据备份与恢复导出数据方法导入数据方法使用mysqldump工具导出数据库使用mysql客户端工具导入数据mysqldump-u username-p database_namebackup.sql mysql-u username-p database_namebackup.sql导出特定表或在mysql交互式环境中mysqldump-u username-p database_name table1table2backup.sql SOURCE/path/to/backup.sql;导出多个数据库对于大型备份文件,可以使用管道命令加速导入mysqldump-u username-p--databases db1db2backup.sql gunzipbackup.sql.gz|mysql-u username-p database_name导出所有数据库恢复多个数据库时,需要指定--one-database选项或在导入前创建数据库mysqldump-u username-p--all-databasesbackup.sql在导出时添加--add-drop-table选项会在CREATETABLE语句前添加DROP TABLE语句,确保恢复时表结构是全新的数据表优化建议合理设计数据表结构表设计应遵循以下原则•每个表应有明确的主题,避免混合不相关数据•选择适当的数据类型(如用TINYINT代替INT存储小范围整数)•合理设置字段长度,不要过度预留空间•使用NOTNULL约束减少空值处理•考虑使用ENUM或SET代替VARCHAR存储有限选项值字段冗余与规范化数据库规范化减少数据冗余,但可能降低查询性能在实际应用中•适度冗余可提高读取性能(如在订单表存储当时的产品名称)•经常一起查询的数据可适当合并表•针对报表需求,可以创建汇总表或物化视图•大型系统可考虑垂直或水平分表合理建立索引索引策略建议•经常用于WHERE条件的列应建立索引•联合索引的列顺序应考虑使用频率•避免对频繁更新的列建立过多索引•定期分析和优化索引使用情况•对大文本列使用前缀索引常见错误及调试SQL语法错误排查数据类型不匹配SQL语法错误是最常见的问题数据类型错误可能导致意外结果•检查关键字拼写(SELECT,WHERE,•字符串与数字比较问题(如WHERE idFROM等)=1)•确认括号匹配和闭合•日期格式不正确(使用标准格式•注意SQL语句末尾的分号YYYY-MM-DD)•检查字符串引号匹配(单引号或双引号)•NULL值处理错误(使用ISNULL而非=NULL)•关键字和函数名大小写(虽然在MySQL中不区分,但保持一致有助于•隐式类型转换导致的索引失效可读性)常见报错及解决方法遇到错误时的排查步骤•Unknown column检查列名拼写和表别名•Table doesntexist检查表名和当前数据库•Duplicate entry检查唯一键或主键冲突•Cannot addforeign keyconstraint确认引用表和列存在且类型匹配•使用EXPLAIN分析复杂查询的执行计划•查询慢时,检查索引使用情况数据库实践案例书籍管理系统1系统需求分析一个简单的书籍管理系统需要•存储书籍基本信息(标题、作者、出版社等)•管理图书分类•记录借阅和归还情况•维护读者信息•支持图书检索和库存统计相关表结构设计根据需求,设计以下表结构•books书籍信息表(id,title,author_id,publisher_id,isbn,publish_date,price等)•authors作者信息表(id,name,biography等)•categories图书分类表(id,name,parent_id等)•book_categories书籍与分类的多对多关系表•readers读者信息表(id,name,contact,membership_date等)•borrows借阅记录表(id,book_id,reader_id,borrow_date,return_date等)主要操作举例系统常见操作SQL示例•查询某作者的所有书籍•统计各分类的书籍数量•查找当前借出未归还的书籍•查询最受欢迎(借阅次数最多)的书籍•添加新书和读者借书流程数据库实践案例学生成绩管理2学生姓名课程名称成绩学分任课教师张三数据库原理924李教授张三操作系统853王教授李四数据库原理784李教授李四计算机网络883赵教授王五操作系统913王教授王五计算机网络753赵教授学生成绩管理系统通常包含以下表结构•students学生表(id,name,gender,admission_date,class_id等)•courses课程表(id,name,credit,description等)•teachers教师表(id,name,title,department等)•classes班级表(id,name,grade,major等)•scores成绩表(id,student_id,course_id,teacher_id,score,semester等)常见统计查询示例,如计算学生平均分SELECT s.name AS学生姓名,AVGsc.score AS平均分FROM studentssJOIN scoressc ONs.id=sc.student_idGROUP BYs.id,s.nameORDER BY平均分DESC;数据库与编程语言结合几乎所有主要编程语言都提供了连接数据库的库或模块以下是常见的例子Python连接MySQL示例import mysql.connector#建立连接conn=mysql.connector.connecthost=localhost,user=username,password=password,database=database_name#创建游标对象cursor=conn.cursor#执行SQL查询cursor.executeSELECT*FROM users#获取查询结果results=cursor.fetchallfor rowin results:printrow#关闭连接cursor.closeconn.close数据库常用图形化工具NavicatDBeaverMySQL Workbench商业数据库管理工具,支持多种数据库系开源的通用数据库管理工具,支持几乎所官方提供的免费图形化工具,专为MySQL统提供直观的界面进行数据库设计、查有主流数据库提供图表、数据导出、和设计提供数据库设ER MySQLMariaDB询、导入导出和同步特点包括数据库结编辑器和执行计划查看等功能其社计、模型建立、开发和管理功能其SQL SQL构可视化、查询生成器、数据建模、自动区版免费使用,企业版提供额外的团队协可视化表设计器和模型导出功能特别受欢补全和调试功能等作功能迎,适合初学者和专业开发人员数据库安全基础全面保护策略多层次安全机制和最佳实践数据加密传输加密和存储加密权限控制最小权限原则和细粒度访问控制输入验证4防止SQL注入和其他攻击SQL注入是最常见的数据库攻击方式,攻击者通过在输入中插入恶意SQL代码来操纵数据库防止SQL注入的主要方法是使用参数化查询(预处理语句)而非直接拼接SQL字符串例如在PHP中使用PDO预处理语句$stmt=$pdo-prepareSELECT*FROM usersWHERE username=:username;$stmt-execute[username=$username];敏感数据加密是保护数据库安全的另一关键措施可以使用MySQL的内置加密函数如AES_ENCRYPT或更安全的哈希函数SHA2来存储密码和敏感信息此外,还应考虑传输层加密TLS/SSL保护数据传输,以及数据库文件系统级别的加密最小权限原则是指只给用户分配完成其工作所需的最小权限集例如,应用程序的数据库用户可能只需要SELECT、INSERT权限,而不需要DROP TABLE等危险操作的权限数据库性能调优简介索引优化查询语句优化索引是提高查询性能的关键优化查询结构SQL为子句中的列创建适当索引只选择需要的列,避免•WHERE•SELECT*考虑查询模式创建复合索引减少操作数量,必要时拆分复杂查询••JOIN避免过度索引(每个索引都会增加写操作开销)使用限制结果集大小••LIMIT定期重建碎片化的索引()避免在子句中使用函数(会导致无法使用索引)•OPTIMIZE TABLE•WHERE使用分析查询的索引使用情况使用适当的表别名简化查询•EXPLAIN•考虑使用代替(前者不去重,性能更好)•UNION ALLUNION例如,分析查询执行计划EXPLAIN SELECT*FROMusersWHERE email=test@example.com;云数据库与新趋势主要云数据库服务云数据库优缺点新技术趋势各大云服务提供商都提供托管数据库服务优势数据库领域的新发展•阿里云ApsaraDB(RDS MySQL、•减少基础设施管理负担•分布式数据库如TiDB、CockroachDB等PostgreSQL、SQLServer等)•自动备份和高可用性提供水平扩展能力•腾讯云TencentDB(MySQL、•按需扩展性•多模型数据库单一数据库支持多种数据模PostgreSQL、Redis等)型(文档、图形、关系型)•通常有更好的安全性和合规性•亚马逊AWS RDS、DynamoDB、•无服务器数据库按实际使用计费,自动扩挑战Redshift等展•微软Azure AzureSQL Database、•可能的供应商锁定•边缘数据库降低延迟,支持离线操作Cosmos DB等•长期成本可能高于自托管•AI增强数据库自动优化和自我修复能力•谷歌Cloud CloudSQL、Bigtable、•网络延迟问题Spanner等•数据主权和合规挑战学习数据库的建议理论学习动手实践掌握数据库设计原理和SQL基础通过实际项目巩固技能2进阶发展解决问题学习高级主题和新技术分析和优化真实数据库应用学习数据库的有效方法是理论与实践相结合首先掌握基本概念和SQL语法,然后通过实际项目巩固技能推荐的学习资源包括•官方文档MySQL、PostgreSQL等官方文档是最权威的参考资源•在线课程Coursera、Udemy上有许多优质的数据库课程•技术社区Stack Overflow、GitHub、数据库官方论坛等•经典书籍《SQL必知必会》、《高性能MySQL》等进阶学习方向可以包括数据库内部原理、性能优化、分布式数据库、数据仓库和大数据技术等选择一个感兴趣的专业领域深入研究,结合实际项目经验,将使您成为数据库领域的专家课程总结与答疑全流程回顾从基础概念到高级应用的完整学习路径重点内容梳理SQL基础操作和数据库设计原则常见问题解答解决学习过程中的疑难点恭喜您完成数据库基本操作的学习!在本课程中,我们系统地介绍了数据库的基本概念、SQL语法、表设计、查询优化以及与应用程序的集成等内容这些知识构成了数据库应用开发的基础重点内容包括数据库设计原则(如范式化和适当的索引策略)、SQL的CRUD操作(创建、读取、更新、删除)、多表关联查询、事务处理以及安全性考虑这些都是实际工作中最常用到的技能学习数据库是一个持续的过程,建议您通过实际项目继续巩固所学知识如果您对课程内容有任何疑问,请随时提出,我们将为您提供进一步的解释和指导祝您在数据管理领域取得成功!。
个人认证
优秀文档
获得点赞 0