2.1数据库的创建2.2表的创建
- 格式:ppt
- 大小:1.12 MB
- 文档页数:169
mysql笔记更新至2012-6-151.如何查看数据表先要选择数据库:use judge然后查看该数据库中有哪些表:show tables查看表的结构:desc student说明:judge是数据库;student是表名。
2.表2.1.查询表mysql中如何查询rownum呢?mysql>set@mycnt=0;Query OK,0rows affected(0.00sec)mysql>select(@mycnt:=@mycnt+1)as ROWNUM,description from question;2.1.1.获取记录的条数st();connections=rs.getRow();2.2.创建表2.2.1.创建自增列:create table student(id int primary key auto_increment,name char(20));注意:自增列必须被定义成一个键(主键或者外键)2.3.删除表drop table student;2.4.修改表2.4.1.增加列alter table pass add column issuperpwd bit(1);2.4.2.删除列alter table student drop column name;2.4.3.修改列的类型alter table student change column name name bit(1);alter table student modify column name bit(2);注意:以上两种方法都可以。
2.4.4.修改列名称修改列的名称alter table student change column name name33char(5);2.4.5.修改表名alter table A rename to B;mysql>alter table A rename to B;Query OK,0rows affected(0.00sec)2.5.约束2.5.1.增加主键alter table student add primary key(id);2.5.2.删除主键alter table student drop primary key;2.5.3.设置自增列alter table student modify column id int auto_increment; mysql>alter table student modify column id int auto_increment; Query OK,0rows affected(0.00sec)Records:0Duplicates:0Warnings:0mysql>desc student;+-------+----------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+-------+----------+------+-----+---------+----------------+|id|int(11)|NO|PRI|NULL|auto_increment||name|char(20)|YES||NULL||+-------+----------+------+-----+---------+----------------+2rows in set(0.00sec)2.5.4.去掉自增列alter table student modify column id int;3.备份与还原3.1.备份恢复数据mysqldump-uroot-proot-w"id=2"books book>d:12.sql数据库books中有一个表bookmysqldump-uroot-proot huangwei pass>e:/test/pass.sql说明:huangwei是数据库名,数据库huangwei中有一个表pass mysqldump-uroot-proot-w id=2or id=3books book>d:12.sql备份整个数据库:mysqldump-uroot--password=root--database huangwei>e:/test/huangwei.sql仅备份数据:mysqldump-uroot-proot-t huangwei Question>e:/smb/question.sql说明:-n:不包含数据库的创建语句-t:不包含数据表的创建语句-d:不包含数据3.2.还原执行脚本\./home/whuang/pass.sqlsource d:123\12.sqlsource d:\download\pass_02.sqlmysql-uroot-proot<e:/test/huangwei.sql说明:执行上述命令时,不需要登录数据库4.数据库编码4.1.查看编码show variables like'character\_set\_%';正确的编码是+--------------------------+--------+|Variable_name|Value|+--------------------------+--------+|character_set_client|gbk||character_set_connection|gbk||character_set_database|utf8||character_set_filesystem|binary||character_set_results|gbk||character_set_server|utf8||character_set_system|utf8|+--------------------------+--------+错误的编码是:+--------------------------+--------+|Variable_name|Value|+--------------------------+--------+|character_set_client|gbk||character_set_connection|gbk||character_set_database|latin1||character_set_filesystem|binary||character_set_results|gbk||character_set_server|latin1||character_set_system|utf8|+--------------------------+--------+4.2.设置编码正确default-character-set=utf8错误default-character-set=utf-85.配置5.1.配置文件windows中的配置文件名称是my.inilinux中的配置文件名称是/etc/f配置文件如下:(vim/etc/f)[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql#Default to using old password format for compatibility with mysql3.x#clients(those using the mysqlclient10compatibility package).old_passwords=1#added by huangweidefault-character-set=utf8#Disabling symbolic-links is recommended to prevent assorted security risks; #to do so,uncomment this line:#symbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid#added by huangwei[mysql]default-character-set=gbkwindows下的配置文件C:\Program Files\MySQL\MySQL Server5.1\my.ini5.1.1.设置自动提交set autocommit=1或set autocommit=on开启自动提交set autocommit=0或set autocommit=off禁止自动提交5.1.2.查看是否是自动提交查看自动提交show variables like'autocommit';select@@autocommit;执行set autocommit=0;完之后再查看:在mysql中设置set autocommit=0后,执行完SQL语句之后,并没有自动提交。
MySQL数据库设计规范(仅供参考)MySQL数据库设计规范(仅供参考)⽬录1. 规范背景与⽬的2. 设计规范2.1 数据库设计2.1.1 库名2.1.2 表结构2.1.3 列数据类型优化2.1.4 索引设计2.1.5 分库分表、分区表2.1.6 字符集2.1.7 程序DAO层设计建议2.1.8 ⼀个规范的建表语句⽰例2.2 SQL编写2.2.1 DML语句2.2.2 多表连接2.2.3 事务2.2.4 排序和分组2.2.5 线上禁⽌使⽤的SQL语句1. 规范背景与⽬的MySQL数据库与 Oracle、 SQL Server 等数据库相⽐,有其内核上的优势与劣势。
我们在使⽤MySQL数据库的时候需要遵循⼀定规范,扬长避短。
本规范旨在帮助或指导RD、QA、OP等技术⼈员做出适合线上业务的数据库设计。
在数据库变更和处理流程、数据库表设计、SQL编写等⽅⾯予以规范,从⽽为公司业务系统稳定、健康地运⾏提供保障。
2. 设计规范2.1 数据库设计以下所有规范会按照【⾼危】、【强制】、【建议】三个级别进⾏标注,遵守优先级从⾼到低。
对于不满⾜【⾼危】和【强制】两个级别的设计,DBA会强制打回要求修改。
2.1.1 库名1. 【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。
2. 【强制】库的名称格式:业务系统名称_⼦系统名,同⼀模块使⽤的表名尽量使⽤统⼀前缀。
3. 【强制】⼀般分库名称命名格式是库通配名_编号,编号从0开始递增,⽐如wenda_001以时间进⾏分库的名称格式是“库通配名_时间”4. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。
创建数据库SQL举例:create database db1 defaultcharacter set utf8;。
2.1.2 表结构1. 【强制】表和列的名称必须控制在32个字符以内,表名只能使⽤字母、数字和下划线,⼀律⼩写。
navicat操作手册1. 简介Navicat是一种功能强大的数据库管理工具,为开发人员提供了方便快捷的数据库操作和管理功能。
本操作手册将介绍Navicat的基本功能和操作流程,帮助用户更好地使用该工具。
2. 安装和配置2.1 下载与安装在官方网站上下载Navicat的安装程序,并按照提示完成安装过程。
选择适合自己操作系统的版本,并确保满足所需的系统要求。
2.2 连接数据库在Navicat打开时,点击"连接"按钮,弹出连接设置对话框。
根据需要选择数据库类型,填写相关连接信息,包括主机名、用户名、密码等。
点击"测试连接"按钮,确保连接正常后,点击"连接"按钮完成连接数据库。
3. 数据库管理3.1 创建数据库在连接成功后,选择要操作的数据库,在右键菜单中选择"新建数据库"。
填写数据库名称和字符集等相关信息,点击"创建"按钮完成数据库的创建。
3.2 创建数据表在选择的数据库上右键,选择"新建数据表"。
填写数据表的名称和相关列信息,并进行列的设置,包括数据类型、长度、约束等。
点击"保存"按钮完成数据表的创建。
3.3 数据表操作选择已创建的数据表,在右键菜单中选择相应操作,如"编辑数据"、"删除数据"、"新增数据"等。
根据需要进行相应的数据操作并保存。
4. 查询和过滤4.1 执行查询在Navicat的查询编辑器中,输入SQL语句进行查询操作。
点击"执行"按钮,或使用快捷键"Ctrl+Enter"执行查询,结果将显示在结果窗口中。
4.2 过滤数据通过设置过滤条件,将查询结果进行筛选和过滤。
在查询编辑器中使用"WHERE"语句指定过滤条件,再次执行查询即可获得过滤后的结果。
局域网使用ACCESS数据库一、引言本文档旨在详细介绍如何在局域网环境中使用ACCESS数据库。
其中包含了数据库的安装、配置、使用等方面的内容,以供参考和操作指导。
二、数据库安装1:准备工作1.1 确定服务器和客户端环境1.2 确认操作系统和网络环境1.3 确定数据库版本和许可证类型2:安装数据库服务器2.1 数据库安装程序2.2 运行安装程序2.3 设置数据库服务器参数2.4 完成安装3:配置局域网环境3.1 确定服务器IP地址3.2 配置服务器网络设置3.3 配置客户端网络设置三、数据库设置1:创建数据库文件1.1 打开ACCESS数据库软件1.2 创建新数据库文件1.3 指定数据库文件保存路径2:设计数据库结构2.1 定义数据表2.2 设计数据表字段2.3 设计数据表之间的关系3:导入数据3.1 准备数据源文件3.2 打开数据库并选择导入3.3 指定数据源文件和目标数据表四、数据库操作1:数据录入1.1 打开数据库1.2 选择数据表1.3 输入数据2:数据查询2.1 使用查询向导2.2 设计查询条件2.3 运行查询操作3:数据修改3.1 选择要修改的数据表3.2 选择要修改的数据记录3.3 修改数据项五、数据库维护1:数据备份与恢复1.1 备份数据库1.2 恢复数据库2:数据库优化2.1 选择适当的索引类型2.2 对大量数据进行分区存储2.3 定期清理无用数据3:用户权限管理3.1 添加新用户3.2 分配用户权限3.3 管理用户密码六、附件本文档涉及附件如下:1:数据表设计图2:查询条件示例七、法律名词及注释1: ACCESS数据库:一种微软公司开发的关系型数据库管理系统。
2:局域网:指办公室、学校、家庭等局限范围内的局部网络环境。
3: IP地址:互联网协议地址,用于区分不同设备的唯一标识。
4:数据表:数据库中用于存储数据的逻辑结构,由各个字段组成。
5:查询:从数据库中检索出满足特定条件的数据。
MySQL数据库设计规范MySQL数据库设计规范(仅供参考)⽬录规范背景与⽬的设计规范2.1 数据库设计2.1.1 库名2.1.2 表结构2.1.3 列数据类型优化2.1.4 索引设计2.1.5 分库分表、分区表2.1.6 字符集2.1.7 程序DAO层设计建议2.1.8 ⼀个规范的建表语句⽰例2.2 SQL编写2.2.1 DML语句2.2.2 多表连接2.2.3 事务2.2.4 排序和分组2.2.5 线上禁⽌使⽤的SQL语句1. 规范背景与⽬的MySQL数据库与 Oracle、 SQL Server 等数据库相⽐,有其内核上的优势与劣势。
我们在使⽤MySQL数据库的时候需要遵循⼀定规范,扬长避短。
本规范旨在帮助或指导RD、QA、OP等技术⼈员做出适合线上业务的数据库设计。
在数据库变更和处理流程、数据库表设计、SQL编写等⽅⾯予以规范,从⽽为公司业务系统稳定、健康地运⾏提供保障。
2. 设计规范2.1 数据库设计以下所有规范会按照【⾼危】、【强制】、【建议】三个级别进⾏标注,遵守优先级从⾼到低。
对于不满⾜【⾼危】和【强制】两个级别的设计,DBA会强制打回要求修改。
2.1.1 库名【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。
【强制】库的名称格式:业务系统名称_⼦系统名,同⼀模块使⽤的表名尽量使⽤统⼀前缀。
【强制】⼀般分库名称命名格式是库通配名_编号,编号从0开始递增,⽐如wenda_001以时间进⾏分库的名称格式是“库通配名_时间”【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。
创建数据库SQL举例:create database db1 default character set utf8;。
2.1.2 表结构【强制】表和列的名称必须控制在32个字符以内,表名只能使⽤字母、数字和下划线,⼀律⼩写。
MySQL教案讲解(详细)教案章节:一、MySQL简介1.1 MySQL的历史和发展1.2 MySQL的特点和优势1.3 MySQL的安装和配置二、数据库的基本概念2.1 数据库的概念和分类2.2 数据表的结构和设计2.3 数据库的创建和管理三、SQL语言基础3.1 SQL语言简介3.2 数据定义语言(DDL)3.3 数据操作语言(DML)3.4 数据查询语言(DQL)四、数据库的增删改查操作4.1 数据的插入操作4.2 数据的删除操作4.3 数据的更新操作4.4 数据的查询操作五、索引和约束5.1 索引的概念和作用5.2 索引的创建和管理5.3 约束的概念和作用5.4 约束的添加和删除MySQL教案讲解(详细)教案章节:六、数据库的高级查询6.1 联合查询6.2 子查询6.3 数据汇总和分组6.4 排序和限制七、存储过程和函数7.1 存储过程的概念和作用7.2 存储过程的创建和执行7.3 存储函数的概念和作用7.4 存储函数的创建和执行八、触发器和事件8.1 触发器的概念和作用8.2 触发器的创建和管理8.3 事件的调度和管理8.4 事件和触发器的应用案例九、事务管理9.1 事务的概念和特性9.2 事务的控制和处理9.3 事务的提交和回滚9.4 事务的管理和优化十、MySQL性能优化10.1 查询性能的影响因素10.2 索引优化和选择10.3 查询缓存的使用和管理10.4 数据库的备份和恢复MySQL教案讲解(详细)教案章节:十一、数据库的安全性和权限管理11.1 用户权限的概念和作用11.2 用户权限的分配和管理11.3 角色和角色的使用11.4 安全性和权限管理的最佳实践十二、MySQL备份与恢复12.1 备份的重要性和策略12.2 常用备份方法介绍12.3 恢复方法和故障排除12.4 备份与恢复的自动化管理十三、MySQL性能监控与调优13.1 性能监控的关键指标13.2 性能分析工具的使用13.3 查询优化的策略和方法13.4 系统配置的优化指南十四、MySQL replication(复制)14.1 复制的工作原理和类型14.2 主从复制的设置和维护14.3 复制延迟和故障处理14.4 复制在高可用性方案中的应用十五、MySQL的高级特性15.1 全文索引和搜索15.2 空间数据类型和地理信息查询15.3 事件调度和定时任务15.4 数据库的性能分析和监控工具重点和难点解析重点:MySQL的历史和发展,特点和优势数据库的基本概念,包括数据库的分类,数据表的结构和设计,数据库的创建和管理SQL语言基础,包括DDL,DML,DQL数据库的增删改查操作索引和约束的使用和管理数据库的高级查询,包括联合查询,子查询,数据汇总和分组,排序和限制存储过程和函数的创建和执行触发器和事件的创建和管理事务的特性和管理数据库的安全性和权限管理备份与恢复策略和方法性能监控与调优的关键指标和工具复制的工作原理和类型,主从复制的设置和维护全文索引和搜索,空间数据类型和地理信息查询事件调度和定时任务,数据库的性能分析和监控工具难点:MySQL的安装和配置细节复杂SQL查询的编写和优化存储过程和函数的高级应用触发器和事件的精确控制和调度事务的并发控制和故障处理高级查询优化和性能调优复制中的延迟和故障处理全文索引和空间数据类型的应用场景事件调度和定时任务的复杂场景设计。
企业组织架构数据库表设计1. 引言企业组织架构是指企业内部各个部门、职位和人员之间的关系和层级结构。
对于一个大型企业来说,正确的组织架构对于管理和运营至关重要。
为了有效地管理和维护企业组织架构信息,需要设计一个合适的数据库表结构来存储和管理这些数据。
本文将详细介绍企业组织架构数据库表的设计,包括表的关系、字段的定义和索引的创建等内容。
2. 数据库表设计2.1 公司表(company)公司表用于存储企业的基本信息,包括公司名称、成立日期、注册资本等。
字段名类型描述id int 公司ID(主键)name varchar(100) 公司名称establishment_date date 成立日期registered_capital decimal(10,2) 注册资本2.2 部门表(department)部门表用于存储企业内部的各个部门信息,包括部门名称、所属公司等。
字段名类型描述id int 部门ID(主键)name varchar(100) 部门名称company_id int 所属公司ID(外键)2.3 职位表(position)职位表用于存储企业内部各个职位的信息,包括职位名称、所属部门等。
字段名类型描述id int 职位ID(主键)name varchar(100) 职位名称department_id int 所属部门ID(外键)2.4 员工表(employee)员工表用于存储企业内部员工的信息,包括姓名、性别、联系方式等。
字段名类型描述id int 员工ID(主键)name varchar(100) 姓名gender varchar(10) 性别contact varchar(100) 联系方式position_id int 职位ID(外键)2.5 表关系上述表之间的关系如下:•公司表(company)与部门表(department)之间是一对多的关系,一个公司可以有多个部门,一个部门只能属于一个公司。
数据库标准规范(二)引言:数据库是当代信息系统中关键的存储和管理数据的工具,数据库标准规范的制定对于确保数据的一致性、完整性和可靠性至关重要。
本文将详细阐述数据库标准规范的五个大点,包括数据库设计、数据模型、数据操作、数据存储和数据安全。
概述:在数据库标准规范中,数据库设计是基础,决定了整个数据库系统的架构和功能。
数据模型定义了数据的结构和属性,数据操作确定了对数据库的增删改查操作,数据存储指定了数据的物理存储方式,数据安全保证了数据库的安全性和可用性。
正文内容:一、数据库设计1. 定义数据库设计的目标和要求,包括数据的一致性、可扩展性和易用性。
2. 建立数据库的概念模型,包括实体关系模型、关系模型和层次模型。
3. 制定数据库设计的规范和准则,确保数据库结构的一致性和易维护性。
4. 设计数据库的表结构,包括表的字段、属性和约束等。
5. 定义数据库的索引和视图,提高数据库的查询和操作效率。
二、数据模型1. 介绍常用的数据模型,包括层次模型、网络模型、关系模型和面向对象模型。
2. 选择合适的数据模型,根据数据库的特点和应用需求进行权衡。
3. 设计数据模型的实体和属性,确保数据的准确性和完整性。
4. 定义数据模型之间的关系,包括一对一、一对多和多对多关系。
5. 使用标准的建模工具和方法,对数据模型进行建模和验证。
三、数据操作1. 定义数据操作的目标和要求,包括数据的增加、删除、修改和查询。
2. 设计数据操作的接口和功能,提供简单易用的操作方式。
3. 制定数据操作的规范和约束,确保数据的一致性和安全性。
4. 优化数据操作的性能,提高查询和更新的效率。
5. 实现数据操作的事务管理和并发控制,确保数据的一致和可靠。
四、数据存储2. 设计数据的物理存储结构,包括数据文件、表空间和数据块等。
3. 制定数据存储的规范和准则,确保数据的安全和可靠。
4. 实施数据存储的备份和恢复策略,保护数据的完整性和可用性。
5. 优化数据存储的性能,提高数据访问的效率和响应速度。
数据库数据字典数据库数据字典是一个记录数据库中表、列、索引等对象的详细信息的文档。
它提供了对数据库结构和数据的全面了解,匡助开辟人员、数据库管理员和其他相关人员更好地理解和管理数据库。
下面是一个标准格式的数据库数据字典示例:1. 数据库基本信息:- 数据库名称:MyDB- 数据库版本:MySQL 8.0.22- 数据库创建日期:2022-01-01- 数据库描述:该数据库用于存储公司的产品信息和定单数据。
2. 表信息:2.1 表名:Product- 描述:该表存储了公司的产品信息。
- 列信息:- 列名:ProductID- 数据类型:INT- 描述:产品的惟一标识符。
- 约束:主键- 列名:ProductName- 数据类型:VARCHAR(100)- 描述:产品的名称。
- 列名:ProductPrice- 数据类型:DECIMAL(10, 2)- 描述:产品的价格。
- 列名:ProductDescription- 数据类型:TEXT- 描述:产品的详细描述。
2.2 表名:Order- 描述:该表存储了公司的定单信息。
- 列信息:- 列名:OrderID- 数据类型:INT- 描述:定单的惟一标识符。
- 约束:主键- 列名:OrderDate- 数据类型:DATE- 描述:定单的日期。
- 列名:CustomerID- 数据类型:INT- 描述:客户的惟一标识符。
- 约束:外键,关联Customer表的CustomerID列。
- 列名:TotalAmount- 数据类型:DECIMAL(10, 2)- 描述:定单的总金额。
3. 索引信息:3.1 索引名:idx_Product_ProductName- 描述:基于ProductName列的索引,用于加速产品名称的查询。
3.2 索引名:idx_Order_CustomerID- 描述:基于CustomerID列的索引,用于加速客户ID的查询。
4. 视图信息:4.1 视图名:ProductView- 描述:该视图展示了产品表中的部份列,用于简化产品信息的查询。
2.1概念结构设计 2.2逻辑结构设计
2.3物理结构设计
数据库设计通常包括概念结构设计、逻辑结构设计和物理结构设计三个阶段,每个阶段都有其特定的目标和任务。
2.1 概念结构设计:概念结构设计是数据库设计的第一步,它关注的是数据库的高层概念模型。
在这个阶段,设计师通常使用实体关系图(ERD)或类似的工具来表示数据库中的实体、关系和属性。
通过绘制 ERD,设计师可以清晰地理解和捕捉业务领域中的关键概念和数据之间的关系。
概念结构设计的主要目标是建立一个准确、完整、一致的数据库概念模型,为后续的设计和开发提供指导。
2.2 逻辑结构设计:逻辑结构设计将概念结构转化为逻辑表示形式。
在这个阶段,设计师根据概念模型定义数据库的表、列、约束、索引等逻辑结构。
他们还会确定数据的类型、长度、主键、外键等细节。
逻辑结构设计的主要目标是定义数据库的逻辑模型,确保数据的完整性、一致性和有效性,并优化数据的存储和查询性能。
2.3 物理结构设计:物理结构设计关注的是数据库在实际物理存储设备上的布局和组织。
在这个阶段,设计师会考虑数据库文件的存储位置、文件组织方式、索引的选择和创建、数据存储格式等。
物理结构设计的主要目标是根据系统的性能需求和硬件环境,优化数据库的存储效率、访问速度和数据备份策略。
总之,概念结构设计、逻辑结构设计和物理结构设计是数据库设计的三个重要阶段。
它们依次递进,从高层概念到具体实现,确保数据库在满足业务需求的同时具备良好的性能和可维护性。
每个阶段的设计都需要与利益相关者进行充分的沟通和协作,以确保设计的准确性和有效性。
Access数据库查询和报表的制作教程第一章:Access数据库查询的基本操作1.1 创建查询1.1.1 打开Access数据库,并选择要查询的数据表1.1.2 在查询选项卡中点击“新建查询”1.2 设计查询1.2.1 选择要显示的字段1.2.2 根据需求添加查询条件1.2.3 设置排序方式1.3 运行查询1.3.1 点击查询工具栏上的运行按钮1.3.2 查询结果将显示在查询窗口中第二章:Access数据库查询的进阶操作2.1 多条件查询2.1.1 使用逻辑运算符(如AND、OR)连接多个查询条件 2.1.2 设置复杂的查询条件,如嵌套查询2.2 使用通配符进行模糊查询2.2.1 使用星号(*)代表任意字符2.2.2 使用问号(?)代表单个字符2.3 利用计算字段实现更复杂的查询2.3.1 创建计算字段,并使用表达式进行计算2.4 使用查询参数2.4.1 使用参数作为查询条件,提高查询的灵活性2.4.2 在运行查询之前,输入参数的具体值第三章:Access数据库报表的创建与设计3.1 创建报表3.1.1 打开Access数据库,并选择要生成报表的数据表 3.1.2 在报表选项卡中点击“新建报表”3.2 设计报表3.2.1 选择要显示的字段3.2.2 设置报表的布局和格式3.2.3 添加报表标题、页眉、页脚等信息3.3 添加计算字段和汇总信息3.3.1 创建计算字段,并使用表达式进行计算3.3.2 添加汇总信息,如总计、平均值等3.4 设置排序和分组3.4.1 根据需求设置排序方式3.4.2 设置报表的分组规则第四章:Access数据库报表的格式化与导出4.1 设置报表的样式和颜色4.1.1 修改报表的字体、背景颜色等属性4.1.2 添加边框和线条,使报表更加清晰4.2 添加图表和图形4.2.1 在报表中插入图表,用于数据的可视化展示 4.2.2 添加图形,如公司Logo等4.3 导出报表4.3.1 将报表导出为PDF、Excel或其他常见格式 4.3.2 选择导出的数据范围和相关设置第五章:Access数据库查询和报表的进阶应用5.1 多表查询5.1.1 利用关系型数据库的特性,连接多个数据表进行查询5.1.2 使用连接查询、子查询等技术5.2 嵌入宏和VBA代码5.2.1 嵌入宏,实现自动化的查询和报表生成5.2.2 编写VBA代码,实现更复杂的数据处理和报表设计5.3 定时任务和自动化操作5.3.1 利用Windows任务计划程序实现定时运行查询和生成报表5.3.2 使用Access宏和VBA代码实现自动化操作通过本教程,你将学会如何使用Access数据库进行查询和报表的制作。
SQLite的使⽤--SQLite语句⼀.SQLite的介绍1.为什么要存储数据?1.1 ⼿机数据⼤多都是从⽹络加载的,不存储,每次滚动界⾯都要从新发送⽹络请求加载数据,浪费流量 1.2 当⽤户没⽹的时候,就不能正常显⽰界⾯了1.3 将数据存储到本地,不⽤每次加载,没⽹的时候也可从本地存储的数据拿来显⽰2.存储数据的⽅式Plist(NSArray\NSDictionary)特点: 只能存储系统⾃带的数据类型, ⽐如NSDictory, NSArray等等. ⾃定义的对象⽆法存储Preference(偏好设置\NSUserDefaults)特点: 本质就是⼀个plist⽂件; 也是只能存储系统⾃带的数据类型, ⾃定义的对象⽆法存储NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)特点: 可以存储⾃⼰定义的数据类型, 但是都是⼀次性的全数据操作SQLite3特点: 存储⼀些⼤批量的数据, 排序, 统计等操作Core Data特点: 对SQLite3的⼀层⾯向对象的包装, 本质还是要转换成为对应的SQL语句去执⾏在所有的存储⽅式中,SQLite速度最快,效率最⾼.3.什么是SQLite?SQLite是⼀款轻型的嵌⼊式关系数据库它占⽤资源⾮常的低,在嵌⼊式设备中,可能只需要⼏百K的内存就够了⽬前⼴泛应⽤于移动设备中存储数据(Android/iOS)处理数据的速度⾮常快,效率⾮常⾼4.什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库(类似于excel表格)数据库可以分为2⼤种类(了解)关系型数据库(主流)对象型数据库5.关系型数据库介绍⼆.Navicat软件的破解1.什么是Navicat?Navicat是数据库管理软件,⽀持⼤部分主流数据库(包括SQLite)(收费,要破解)可以通过图形化界⾯的⽅式来管理数据库2.有破解版,可以去⽹上搜索下载,⾃⼰安装,这⾥不做介绍三.Navicat软件的使⽤1.创建SQLite数据库2.创建表2.1 双击打开数据库,在tables中点击右键,选中NewTable2.2 创建表中对应的字段,点击”+”添加字段2.3 保存,要设置表格名称. 名称规范: t_名称如: t_student3.设置主键,添加数据3.1 什么是主键主键就相当于⾝份证⼀样,⽤来区分每⼀条数据3.2 设置主键注意点3.3 添加,删除,修改数据3.31 直接点击”+” 添加数据注意:主键的值不要修改3.32 删除,选中⼀⾏,点击”-“ 直接删除注意:删除⼀组数据后,主键值就不会再被回收使⽤. ⼀个主键值只对应⼀条数据,⽆论数据是否存在 3.33 修改数据双击想要修改的数据,直接修改四.SQLite的使⽤步骤1.创建数据库(⼀个⽤于存储数据的⽂件)通常后缀名为: .db 或 .sqlite2.创建表⽤于存储数据创建表时需要指定该表有哪些字段⽐如学⽣表有:学号/姓名/年龄/⾝⾼等3.对表进⾏增删改查操作⽐如添加⼀条学⽣数据:型号:1/姓名:why/年龄:18/⾝⾼:1.88五.SQL简介1.怎么在程序中使⽤SQLite?真实使⽤SQLite时⽤代码来操作的2.怎么⽤代码操作SQLite?使⽤SQL语句来操作3.SQL介绍不做过多介绍,直接看下定义就⾏了六.在代码中使⽤DDL(数据定义语句)1.先导⼊libsqlite3.tba框架(c语⾔)2.创建桥接⽂件,配置桥接⽂件(不会的话,看之前笔记)3.创建数据库// 创建数据库// ⽂件路径 :// 1.获取数据库的存放路径(沙盒中)let filePath = "/Users/xiaomage/Desktop/123.sqlite"let cString = filePath.cStringUsingEncoding(NSUTF8StringEncoding)!// 2.定义数据库对象(后⾯还要⽤,定义⼀个属性替代)// var db : COpaquePointer = nil// 3.打开/创建数据库对象if sqlite3_open(cString, &db) == SQLITE_OK {print("创建/打开数据库成功")} else {print("失败")}}4.创建表4.1 创建SQL语句4.2 执⾏语句(要对语句进⾏判断) if 语句 == SQLITE_OK 4.3 创建表格式CREATE TABLE IF NOT EXISTS '表名' ('字段名' 类型(INTEGER, REAL, TEXT, BLOB)NOT NULL 不允许为空PRIMARY KEY 主键AUTOINCREMENT ⾃增长,'字段名2' 类型,...)4.4 语句说明CREATE TABLE:创建⼀张表IF NOT EXISTS:不存在则创建't_student':表的名称NOT NULL:不允许为空PRIMARY KEY:主键AUTOINCREMENT:⾃动增加'id' INTEGER:有⼀个ID字段,类型是INTEGER5.删除表5.1删除表的格式DROP TABLE IF EXISTS '表名';5.2 语句说明DROP TABLE:删除表IF EXISTS:存在则删除'表名':要删除的表的名称1// 1.获取要执⾏的SQL语句2 let createTableSQL = "DROP TABLE IF EXISTS t_student;"34// 2.执⾏语句5if sqlite3_exec(db, createTableSQL.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil) == SQLITE_OK {6 print("删除表成功")7 } else {8 print("删除表失败")9 }10 }6.封装SQL语句6.1 创建/打开数据库的代码全部⼀样,可以封装起来6.2 创建语句,执⾏语句步骤都⼀样,只有语句的内容不⼀样,可以把语句当做参数,封装起来6.3 封装⼯具类,最好把实例对象设计为单例class SQLiteManager {// 设计单例对象static let shareInstance : SQLiteManager = SQLiteManager()// 数据库对象var db : COpaquePointer = nil}// MARK:- 打开数据库的操作extension SQLiteManager {func openDB(filePath : String) -> Bool {// 1.将Swift字符串转成C语⾔的字符串let cString = filePath.cStringUsingEncoding(NSUTF8StringEncoding)!// 3.打开/创建数据库对象return sqlite3_open(cString, &db) == SQLITE_OK}}// MARK:- 执⾏SQL语句extension SQLiteManager {func execSQL(sqlString : String) -> Bool {// 1.将Swift字符串转成C语⾔的字符串let cSQLString = sqlString.cStringUsingEncoding(NSUTF8StringEncoding)!// 2.执⾏语句return sqlite3_exec(db, cSQLString, nil, nil, nil) == SQLITE_OK}}七.在代码中使⽤DML(数据操作语句)1.插⼊数据1.1 插⼊数据格式INSERT INTO 't_student' (name, age, height) VALUES ('why', 18, 1.88);1.2 语句说明INSERT INTO: 插⼊数据't_student': 在哪⼀个表中插⼊数据(数据的字段): 给哪些字段插⼊数据VALUES ('why', 18, 1.88): 插⼊的具体值// 1.插⼊数据(获取插⼊语句)let insertSQL = "INSERT INTO t_student (name, age, height) VALUES ('why', 18, 1.88);" // 2.执⾏语句SQLiteManager.shareInstance.execSQL(insertSQL)2.更新数据1.1 更新数据格式UPDATE 't_student' SET 字段 = '值' WHERE 条件判断;1.2 语句说明UPDATE: 跟新数据't_student': 在哪⼀个表中更新数据SET 字段 = '值': 更新怎样的数据WHERE 条件判断: 更新哪些数据// 1.获取更新语句let updateSQL = "UPDATE t_student SET name = 'yz';"// 2.执⾏语句SQLiteManager.shareInstance.execSQL(updateSQL)3.删除数据3.1 删除数据格式DELETE FROM t_student;DELETE FROM t_student WHERE age < 50;3.2 语句说明DELETE FROM: 从表中删除数据t_student : 表名可以跟条件也可以不跟:不跟表⽰删除所有的数据// 1.获取删除语句let deleteSQL = "DELETE FROM t_student;"// 2.执⾏语句SQLiteManager.shareInstance.execSQL(deleteSQL)4.真实开发如何插⼊数据4.1 真实开发插⼊数据,不可能⼀条⼀条去写4.2 ⼀般来说,我们开发都是⾯向模型的4.3 可以把要插⼊的数据包装成模型4.4 在模型中提供⽅法,快速插⼊数据4.5 遍历模型数组,利⽤模型中快速插⼊数据的⽅法插⼊数据5.怎么把数据包装成模型?遍历数据,把数据的每⼀个字段作为模型的属性保存起来// 模拟从⽹络服务器中请求到很多数据(实际中数据是⽹络来的,这⾥⾃⼰写模拟)for _ in0..<100 {let name = "zs\(arc4random_uniform(100))"let age = Int(10 + arc4random_uniform(10))let height = 1 + Double(arc4random_uniform(10)) / 10.0let stu = Student(name: name, age: age, height: height)stus.append(stu)}模型中代码:1class Student: NSObject {2 var name : String = ""3 var age : Int = 04 var height : Double = 0.056 init(name : String, age : Int, height : Double) {7 = name8 self.age = age9 self.height = height10 }11 }1213 extension Student {14 func insertDB() {15// 1.插⼊数据(获取插⼊语句)16 let insertSQL = "INSERT INTO t_student (name, age, height) VALUES ('\(name)', \(age), \(height));" 17// 2.执⾏语句18 SQLiteManager.shareInstance.execSQL(insertSQL)19 }20 }控制器中快速插⼊for stu in stus { stu.insertDB()}6.插⼊数据的优化6.1 如果有⼤量数据插⼊,在主线程执⾏,会阻塞ui6.2 插⼊⼤量数据怎么优化?6.21 在⼦线程进⾏数据插⼊6.22 ⼿动开启事务如果⼀条条数据进⾏插⼊时,那么每插⼊⼀条数据就会开启⼀次事务.(开启事务耗时)但是如果有明确的开启事务,那么系统就不会在插⼊每条数据时,再开启事务1 dispatch_async(dispatch_get_global_queue(0, 0)) {2//获取插⼊数据开始时间3 let startTime = CACurrentMediaTime()4// 开启事务5 let startSQL = "BEGIN TRANSACTION;"6 SQLiteManager.shareInstance.execSQL(startSQL)78for stu in self.stus {9 stu.insertDB()10 }11//关闭事务12 let commitSQL = "COMMIT TRANSACTION;"13 SQLiteManager.shareInstance.execSQL(commitSQL)14//获取插⼊数据结束时间15 let endTime = CACurrentMediaTime()16//获取插⼊数据耗时17 print(endTime - startTime)18 }19 }⼋.在代码中使⽤DQL(数据查询语句)1.查询语句2.查询数据代码实现步骤2.1 获取查询语句2.2 执⾏查询语句(得到的结果保存到数组中,最好是字典数组)2.3 遍历数组,字典转模型2.4 从模型中读取数据代码实现:1// 1.获取查询语句2 let querySQL = "SELECT * FROM t_student LIMIT 30, 30;";34// 2.执⾏语句 (执⾏语句封装到了⼀个⽅法⾥⾯)5 guard let dictArray = SQLiteManager.shareInstance.querySQL(querySQL) else { 6return7 }89// 3.遍历数组10 var tempArray = [Student]()11for dict in dictArray {12// 字典转模型13 tempArray.append(Student(dict: dict))14 }1516for stu in tempArray {17 print(, stu.age)18 }1920//执⾏语句代码实现21 func querySQL(querySQL : String) -> [[String : NSObject]]? {22// 0.将Swift字符串转成C语⾔字符串23 let cString = querySQL.cStringUsingEncoding(NSUTF8StringEncoding)!2425// 1.定义游标(指针)26 var stmt : COpaquePointer = nil2728// 2.给游标赋值29// 1> 参数⼀: 数据库对象30// 2> 参数⼆: SQL语句31// 3> 参数三: 该SQL语句的长度 -1 --> 系统⾃动计算32// 4> 参数四: 游标的地址33 guard sqlite3_prepare_v2(db, cString, -1, &stmt, nil) == SQLITE_OK else {34return nil35 }3637// 3.取出所有的数据38// 3.1.定义字典数组39 var dictArray = [[String : NSObject]]()4041// 3.2.判断是否有该条数据42while sqlite3_step(stmt) == SQLITE_ROW {43// 3.3.获取字段的个数44 let count = sqlite3_column_count(stmt)45// 3.4.定义字典46 var dict = [String : NSObject]()47// 3.5.遍历每⼀个字典48for i in0..<count {49// 3.6.取出该列的键50 let ckey = sqlite3_column_name(stmt, i)51 guard let key = String(UTF8String : ckey) else {52continue53 }54// 3.7.取出该列的值55 let cvalue = UnsafePointer<Int8>(sqlite3_column_text(stmt, i))56//将c语⾔字符串转成swift字符串57 let value = String(UTF8String : cvalue)5859// 3.8.将键值对放⼊到字典中60 dict[key] = value61 }62// 3.9.将字典放⼊到数组中63 dictArray.append(dict)64 }65return dictArray66 }67 }九.FMDB框架的使⽤1.FMDB框架的作⽤?FMDB是⽤来简化操作数据库的框架2.FDMB的基本使⽤2.1 创建数据库private lazy var db : FMDatabase = FMDatabase(path: "/Users/lgp/Desktop/321.sqlite") // 创建FMDatabase对象// 打开/创建数据if db.open() {print("打开成功")} else {print("失败")}2.2 创建/删除表插⼊/更新/删除数据本质都是⼀样的只有语句的内容不⼀样将语句内容换成对应的操作,就能执⾏该项操作(和SQLite语句⼀样) // 1.获取创建表的语句let createSQL = "INSERT INTO t_person (name, age, height) VALUES ('why', 18, 1.88);" // 2.执⾏语句db.executeUpdate(createSQL, withArgumentsInArray: nil)2.3 查询数据var db : FMDatabase?1 func querySQL(querySQL : String) -> [[String : NSObject]]? {2// 0.判断db是否有值 db定义为属性3 guard let db = db else {4return nil5 }6// 1.执⾏查询语句结果为集合7 let results = db.executeQuery(querySQL, withArgumentsInArray: nil)89// 2.获取数据10// 2.0.定义数据11 var dictArray = [[String : NSObject]]()1213// 2.1.判断结果集中是否有内容14while results.next() {1516 let count = results.columnCount()1718 var dict = [String : NSObject]()1920for i in0..<count {21 let key = results.columnNameForIndex(i)22 let value = results.stringForColumnIndex(i) 2324 dict[key] = value25 }26 dictArray.append(dict)27 }28return dictArray29 }。