6.28数据运维面试
1.什么是ETL?你用过的或接触过的 ETL 工具有哪些。如有使用过,请简单的画出基本的数据处理流程。
ETL(Extract, Transform, Load)是指从源系统中提取数据(Extract),对数据进行转换处理(Transform),然后加载到目标系统中(Load)的过程。ETL通常用于数据仓库、数据集成和数据迁移等场景。
常见ETL工具:
-
Informatica PowerCenter:这是一个功能强大的商业ETL工具,提供了可视化的开发环境和丰富的转换和数据操作功能。
-
Microsoft SQL Server Integration Services (SSIS):这是Microsoft SQL Server的ETL工具,具有集成IDE和可视化开发环境,并支持广泛的数据源和转换操作。
-
Apache NiFi:这是一个开源的数据集成和ETL工具,提供了基于图形的界面和强大的数据流处理能力。
-
Talend Open Studio:这是一个开源的数据集成工具,具有可视化的开发环境和大量的转换组件,支持各种数据源和目标系统。
下图是一个简单的ETL数据处理流程的示例:
| Extract | ----> | Transform | -----> | Load |
| 数据源 | | 数据转换 | | 目标系统 |在这个示例中,数据从源系统中提取出来(Extract),经过一系列转换处理(Transform),最后加载到目标系统中(Load)。ETL流程可以根据具体需求和业务逻辑进行定制和扩展。
2.有表如下 : create table t_test(id varchar(36). zdbm varchar(100),jcsj date, swdecimal(10,2))。请写出(1)查询 zdbm 重复的数据的 sql 语句;(2)查询 dbm,jcsj 同时重复的数据的 sql 语句。 (均要求结果列表展示的是所有字段而不仅仅是查重的分组字段)
(1) 查询 zdbm 重复的数据的 SQL 语句可以使用 GROUP BY 和 HAVING 子句来实现:
SELECT *
FROM t_test
WHERE zdbm IN (
SELECT zdbm
FROM t_test
GROUP BY zdbm
HAVING COUNT(*) > 1
);
以上 SQL 语句首先在子查询中找出 zdbm 重复的值,然后在外层查询中筛选出对应的所有数据。
(2) 查询 dbm 和 jcsj 同时重复的数据的 SQL 语句可以使用 GROUP BY 和 HAVING 子句结合多个列来实现:
SELECT *
FROM t_test
WHERE (dbm, jcsj) IN (
SELECT dbm, jcsj
FROM t_test
GROUP BY dbm, jcsj
HAVING COUNT(*) > 1
);
以上 SQL 语句在子查询中找出 dbm 和 jcsj 同时重复的值,然后在外层查询中筛选出对应的所有数据。
这两个 SQL 查询语句中的 *
表示选择所有字段,因此结果列表将展示所有字段而不仅仅是查重的分组字段。
3.要对一个监测系统进行维护,页面上发现监测数据有延迟。从数据运维的角度来看,一般有哪些可能,可以怎么处理。
4.需要共享数据库里的数据给第三方单位,考虑到数据安全性及数据库稳定性,可以怎样进行共享。
- 数据脱敏(Data Masking)
- 数据权限控制
- 数据备份和恢复
- 数据传输加密
- 审计和日志记录
- 数据共享协议和合同
- 监控和警报系统
- 定期安全评估和漏洞扫描
综合考虑数据安全性和数据库稳定性,上述措施可以帮助保护共享数据的隐私和完整性,同时确保数据库的正常运行和稳定性。
5.用命令+描述的方式实施:(1)查询 linux 里/data/cassandra/conf/cassandra.yaml 并把cassandra.yaml里面的seed文件 Seeds:xx.xx.xx改成 seeds:10.33.410 。(2)并列出哪些命令或者快捷键能够使得实施更加快捷
使用以下命令查询 cassandra.yaml 文件。cat /data/cassandra/conf/cassandra.yaml
使用以下命令编辑 cassandra.yaml 文件:vim /data/cassandra/conf/cassandra.yaml
在 vi 编辑器中找到并修改 Seeds
行为 seeds: 10.33.410
-
保存并退出 vi 编辑器:
按
Esc
键退出编辑模式;输入
:wq
保存修改并退出。这里列举几个常用的命令和快捷键,以加快实施的速度:
grep
命令:用于在文件中搜索特定的文本模式,可快速定位到关键信息。
例如:grep 'keyword' filename
,将搜索filename
文件中包含 ‘keyword’ 的行。sed
命令:用于在文件中进行文本替换,可快速替换特定文本。
例如:sed -i 's/old_text/new_text/g' filename
,将filename
文件中的所有 ‘old_text’ 替换为 ‘new_text’。cp
命令:用于复制文件或目录,可在操作时快速创建备份文件。
例如:cp file.txt file_backup.txt
,将file.txt
复制为file_backup.txt
。- 快捷键:
Tab
键补全:在命令行中键入部分命令或文件路径时,按下Tab
键可自动补全命令或路径,快速输入准确的命令或路径。Ctrl + C
:中断正在运行的命令,可快速停止执行中的命令。Ctrl + D
:退出当前的 shell 会话,可快速退出终端。Ctrl + Z
:将当前正在运行的命令放入后台,可快速挂起命令的执行。
- 快捷键:
6.数据库表什么情况下会造成死锁,发生死锁了可以怎么处理
在数据库中,死锁是指两个或多个事务互相等待对方所持有的资源,从而导致它们都无法继续执行的情况。以下是造成死锁的常见情况:
互斥访问共享资源、事务持有并等待、不可剥夺资源
当发生死锁时,可以采取以下方法进行处理:超时设置、死锁检测与回滚、锁定策略优化、分布式事务管理优化查询和事务设计
处理死锁需要综合考虑数据库系统的特性、应用程序的需求以及具体的业务场景,选取相应的策略和工具进行处理。
7.如果 mysgl的数据文件所在的磁盘空间大小不够要迁移到空间更大的数据磁盘下,应该做哪些操作,怎么操作。
当MySQL的数据文件所在的磁盘空间不足以容纳数据时,可以考虑迁移数据到空间更大的数据磁盘下。以下是迁移MySQL数据文件的一般步骤:
-
查看当前MySQL数据文件所在的路径:可以通过执行以下查询语句获取:SHOW VARIABLES LIKE ‘datadir’;
-
关闭MySQL服务:在迁移过程中,需要停止MySQL服务,确保数据库在运行状态下迁移数据可能导致数据丢失或损坏。
-
备份MySQL数据:在进行任何操作之前,建议对MySQL数据进行备份,以防意外情况发生。
-
移动数据文件:
a. 将MySQL数据文件目录下的所有文件复制到新磁盘的目标路径下。可以使用操作系统的复制命令(如cp
或rsync
)进行操作。
b. 确保复制完整且没有遗漏任何文件。 -
修改MySQL配置文件:
a. 打开MySQL的配置文件,一般在my.cnf
或my.ini
中。
b. 找到datadir
配置项,将其值改为新的数据文件所在路径。如:datadir=/new/data/directory/c. 保存并关闭配置文件。
-
启动MySQL服务:重新启动MySQL服务,确认数据库能够访问并正常工作。
-
验证数据迁移:使用MySQL客户端连接到MySQL数据库,执行一些查询操作,确保数据迁移成功且数据完整。
请注意,在执行上述步骤之前,请务必备份数据,并确保有足够的权限和了解MySQL的运行和配置。此外,如果你使用的是其它特定版本或配置的MySQL,可能需要参考相关文档或咨询数据库管理员进行操作。
8.用 sql 进行处理,场景内表名、字段名等可自定义:有一批数据,对某一列字符串类型字段里进行处理,要求小数点前缺 0的补0,其中有整数部分的、空值的数据不变。( 比如.23处理成 0.23 )
可以使用 SQL 中的字符串处理函数和条件语句来对字符串类型字段进行处理,将小数点前的缺 0 补齐。具体操作如下:
假设表名为 your_table
,要处理的字符串类型字段名为 your_column
UPDATE your_table
SET your_column = CASE
WHEN your_column LIKE '.%'
THEN CONCAT('0', your_column)
WHEN your_column LIKE '_%.%'
THEN CONCAT('0', your_column)
ELSE your_column
END;
9.使用sql 语句进行数据库表连接有哪几种,分别举个简单的例子
在SQL中,有几种常见的方法可以用来进行数据库表连接,包括内连接、左连接、右连接、全连接几种:
内连接(INNER JOIN):返回两个表中匹配的行。例如,假设你有两个表A和B,它们有一个共同列"common_column",你可以使用以下语句进行内连接:
SELECT A.column1, B.column2
FROM A
INNER JOIN B ON A.common_column = B.common_column;
这将返回在A和B中都有匹配的"common_column"值的行。
左连接(LEFT JOIN):返回左边表中的所有行,以及与右边表匹配的行。如果没有匹配的行,右边表的列将显示为NULL。例如,假设你有两个表A和B,你可以使用以下语句进行左连接:
SELECT A.column1, B.column2
FROM A
LEFT JOIN B ON A.common_column = B.common_column;
这将返回A中的所有行,以及与A中的行匹配的B中的行。
右连接(RIGHT JOIN):返回右边表中的所有行,以及与左边表匹配的行。如果没有匹配的行,左边表的列将显示为NULL。例如,假设你有两个表A和B,你可以使用以下语句进行右连接:
SELECT A.column1, B.column2
FROM A
RIGHT JOIN B ON A.common_column = B.common_column;
这将返回B中的所有行,以及与B中的行匹配的A中的行。
全连接(FULL JOIN):返回左边表和右边表中的所有行,如果没有匹配的行,对应的列将显示为NULL。例如,假设你有两个表A和B,你可以使用以下语句进行全连接:
SELECT A.column1, B.column2
FROM A
FULL JOIN B ON A.common_column = B.common_column;
这将返回A和B中的所有行,以及相互匹配的行。
这些是最常用的数据库表连接方法,可以根据需要选择合适的连接方式。
1.SQL和MySQL的区别?
SQL是一种查询语言,而MySQL是一种数据库管理系统。。SQL是一种创建用于管理关系数据库的语言,MySQL是基于SQL语言的开源软件。使用MySQL,可以修改存储在数据库中的数据。由于SQL是一种语言,因此它不会进行任何更新,命令始终保持不变。MySQL是一种软件,因此它会经常收到软件更新。
2.数据查询语句(DQL) 的语法结构?
select 列名 ----> 要查询的列名称。from 表名 ----> 要查询的表名称。 where 条件 ----> 行条件。group by 分组列----> 对结果分组。 having 分组条件 ---->分组后的行条件。order by 排序列----> 对结果分组。 limit 起始行,行数 ----> 结果限定
3.数据查询语句(DQL) 的执行顺序?
from
where
group by
having
order by
limit
select
.4.SQL中去重有哪些方法?
使用DISTINCT去重: distinct用来查询不重复记录的条数,用count(distinct id)来返回不重复字段的条数select distinct 去重字段 from 表名
使用GROUPBY:GROUPBY 语根据一个或多个列对结果集进行分组。
select 去重字段 from 表名 group by 去重字段名
使用row_number()over()
select 字段1,row_number() OVER (PARTITION BY 去重字段 ORDER BY 排序字段 DESC/ASC)
5.count(1)、count(*)与count(列名)的区别?
三者都是返回某列行数的函数
三者在执行效果上的区别:
COUNT(1):忽略所有列,1代表代码行,计数时不忽略NULL值
COUNT(): 对表中行的数目进行计数,计数时不忽略NULL值
COUNT(列名):对特定列中有值的行进行计数,忽略NULL值
三者在执行速度上的区别:
如果有主键且列名是主键,COUNT(列名)>COUNT(1)/COUNT()
如果有主键但列名不是主键,COUNT(1)>COUNT(列名)。如果没有主键且有多个字段时,COUNT(1)>COUNT()
数据表只有一个字段时,COUNT()最快
6.union和union all的区别?
两者都可以将多个结果集合并。使用时必须保证各个SELECT的结果有相同个数的列,且类型一致,但列名不一定相同.。 UNION:从查询结果集中自动去除了重复的行;会对获取的结果进行排序操作。UNION ALL: 不去除重复记录,不做排序处理
7.LIKE中的%和 是什么意思?
%:1个百分号(%)可以匹配任意个字符。
_:1个下划线 ()只匹配1个字符。
8.SOL中on、where、having三种过滤的区别?
on:用于多表关联时指定关联的条件,作用于from子句。on是先对数据进行过滤,然后再进行连接表。。where: 用来筛选FROM子句中指定的操作所产生的行。where是在两表进行关联查询之后,再进行过滤的.having:用于对聚合后的数据进行筛选过滤
9.数据库中空字符串、0和NULL的区别?
空字符串:表示有输入数据,只是输入的数据为空字符串。90:即一个数字,其值为0。.NULL: 表示没有输入数据
10.窗口函数是什么?和普通聚合函数的区别是什么?
窗口函数,也叫OLAP(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。窗口函数和普通聚合函数的区别:聚合函数是将多条记录聚合为一条,改变了表的行数;窗口函数是每条记录都会执行,不会改变原表中的行数.可以使用聚合函数作为窗口函数。此时,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多少(最大值、最小值等),同时可以看出每行数据,对整体统计数据的影响。
11.SQL中几种排序窗口函数的区别是什么?
rank()over(: 即跳跃式排序。如果有并列名次的行,就会占用下一名的位置,如100,100,100,98,排名为1,1,1,4dense_rank()over(): 即并列连续型排序。如果有并列名次的行,不占用下一名次的位置。如100,100,100,98,排名为1,1,1,2row_number()over(): 即连续型排序。不考虑并列名次的情况。如100,100,100,98,排名为1,2,3,4
12.SQL中几种表连接的区别是什么?
inner join内连接(默认,不允许任何null的存在): iner可以省略,直接使用join默认为内连接select 字段名 from 表名1 inner join 表名2 on 表名1.字段名 = 表名2.字段名
left join左连接:左边的表不允许null的存在,指选择右边的表的所有行。select 字段名 from 表名1 left join 表名2 on 表名1.字段名 = 表名2.字段名
right join右连接: 右边的表不允许null的存在,指选择左边的表的所有行。select 字段名 from 表名1 right join 表名2 on 表名1.字段名 = 表名2.字段名ful join全外连接: 运行合并后两个表都有null的存在,检索两个表中的所有行并包含两个表的不关联的行select 字段名 from 表名1 full join 表名2 on 表名1.字段名 = 表名2.字段名等价于 from 表2 right join 表1 on 表1.字段A = 表2.字段Bfrom 表1 left join 表2 on 表1.字段A = 表2.字段B
13如何优化SQL?按以下顺序进行优化:
优化查询语句
优化索引、事务处理。
优化数据表结构
优化系统配置
优化硬件
14.如何优化SQL查询语句?
对查询进行优化,首先应尽量避免全表扫描,在比较频繁使用的字段上面加上索引。
尽量避免在 where 子句中对索列使用计算或者进行 null 值判断,否则将导致引擎放弃使用索而进行全表扫描。WHERE子句中: where表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量。
用EXISTS代替IN,用NOT EXISTS代替NOTIN。
15.主键、外键和索引的区别?
定义:1.主键能够唯一标识一条记录,一个表中只能有一个主键且不能重复,也不能为空值2.表的外键是另外一张表的主键,可以有多个且重复,可以是空值。3.索引是用来快速寻找具有特定值的记录。该字段没有重复值,但可以有一个空值。
作用:1.主键-用来保证数据完整性2.外键-用来和其他表建立联系用的3.索引是提高查询排序的速度
个数:一个表只能有一个主键,但可以有多个外键,也可以有多个唯一索引。
数据库三大范式是什么?
第一范式:1NF(原子性)要求任何一张表必须有主键,每一个字段原子性不可再分。
第二范式:2NF(唯一性)建立在第一范式的基础之上,要求所有非主键 字段完全依赖主键,不要产生部分依赖。
第三范式:3NF(直接性)建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。
事务的四大特性(ACID)介绍
原子性(Atomicity):整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。
一致性(Consistency):在事务开始之前与结束之后,数据库都保持一致状态。
隔离性(Isolation):一个事务不会影响其他事务的运行。
持久性(Durability):在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。
建表时
create table 表名称(
字段名 数据类型 primary key auto_increment,
字段名 数据类型 unique key not null,
字段名 数据类型 unique key,
字段名 数据类型 not null default 默认值,
);
create table 表名称(
字段名 数据类型 default 默认值 ,
字段名 数据类型 unique key auto_increment,
字段名 数据类型 not null default 默认值,
primary key(字段名)
)
建表后
alter table 表名称 modify 字段名 数据类型 auto_increment;
DB:数据库(Database)
DBMS:数据库管理系统(Database Management System)
SQL:结构化查询语言(Structured Query Language)
关系型数据库(RDBMS) 非关系型数据库(非RDBMS)
DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括 CREATE创建 、DROP删除 、 ALTER修改 等。
DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。(增删改查)
主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。
SELECT是SQL语言的基础,最为重要。
DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。
因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。
还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语言)。
SQL数据库中cross join 和inner join区别为:连接不同、条件筛选不同、语法不同。
CROSS JOIN 求笛卡尔积
一、连接不同
cross join 将A表的所有行分别与B表的所有行进行连接,返回的记录数为两个表的记录数乘积。
inner join组合两个表中的记录,只有公共字段之中有相符的值才进行连接。
二、条件筛选不同
cross join不能在连接时进行条件筛选。
inner join可以通过on关键字,在连接时进行条件筛选。
三、语法不同
cross join的语法不加on关键字,为SELECT * FROM table1 CROSS JOIN table2。
inner join的语法可以加on关键字,为SELECT * FROM table1 INNER JOIN table2 ON table1.field1 = table2.field2。
为了避免笛卡尔积, 可以在 WHERE 加入有效的连接条件。
1.在SELECT语句中使用关键字DISTINCT去除重复行
2.所有运算符或列值遇到null值,运算的结果都为null
3.使用WHERE 子句,将不满足条件的行过滤掉
WHERE子句紧随 FROM子句
\4. 不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,
如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,
或两边都为NULL,则结果为NULL。
5.(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘$’匹配以该字符前面的字符结尾的字符串。
(3)‘.’匹配任何一个单字符。
6.使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾
7.MySQL中使用 LIMIT 实现分页 格式:LIMIT [位置偏移量,] 行数
8.多个表中有相同列时,必须在列名之前加上表名前缀。
对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或表名)进行限定。
9.左外连接
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;
LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中,在 SQL92 中不存在,只能用 (+) 表示。
10.可以对数值型数据使用AVG 和 SUM 函数。
可以对任意数据类型的数据使用 MIN 和 MAX 函数。
COUNT(*)返回表中记录总数,适用于任意数据类型。
count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。
过滤分组:HAVING子句
行已经被分组;使用了聚合函数;满足HAVING 子句中条件的分组将被显示。
HAVING 和 WHERE区别:
HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
不能在 WHERE 子句中使用聚合函数。
WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;
HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。
如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,执行效率高,
而 HAVING 是先连接后筛选。
11.查询的结构:
#方式1:
SELECT …,…,…
FROM …,…,…
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY …,…
HAVING 包含组函数的过滤条件
ORDER BY … ASC/DESC
LIMIT …,…
#方式2:
SELECT …,…,…
FROM … JOIN …
ON 多表的连接条件
JOIN …
ON …
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY …,…
HAVING 包含组函数的过滤条件
ORDER BY … ASC/DESC
LIMIT …,…
#其中:
#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页
1.使用 WHERE 子句指定需要更新的数据
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;如果省略 WHERE 子句,则表中的所有数据都将被更新。
2.使用 WHERE 子句删除指定的记录。
DELETE FROM departments
WHERE department_name = ‘Finance’;如果省略 WHERE 子句,则表中的所有数据都将被删除。
3.使用这种语法一次只能向表中插入一条数据。
INSERT INTO 表名
VALUES (value1,value2,…);
4.视图 在 CREATE VIEW 语句中嵌入子查询
查看数据库的表对象、视图对象 SHOW TABLES;
查看视图的结构 DESC / DESCRIBE 视图名称;
查看视图的属性信息# 查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等)
SHOW TABLE STATUS LIKE ‘视图名称’\G
查看视图的详细定义信息 SHOW CREATE VIEW 视图名称;
(1)使用CREATE OR REPLACE VIEW 子句修改视图
修改视图的语法是
ALTER VIEW 视图名称
AS
查询语句
删除视图的语法是DROP VIEW IF EXISTS 视图名称;
SELECT * FROM fruits WHERE f_name REGEXP ‘^b’;
REGEXP正则表达式
*表的别名*
使用别名可以简化查询。
列名前使用表名前缀可以提高查询效率
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e , departments d
WHERE e.department_id = d.department_id;
字符集指的是可以在计算机中存储和处理的字符集合。常见的字符集包括ASCII、Unicode等。ASCII码是基于拉丁字母的字符集,只包含128个字符,包括英文字母、数字、符号等。而Unicode是一种字符集,包含全世界所有语言的字符,支持超过60万种字符。Unicode的编码方式包括UTF-8、UTF-16等。UTF-8是一种变长编码方式,可以表示全世界所有字符,同时兼容ASCII,因此被广泛使用。
# 16、查询书名和类型,其中note值为novel显示小说,law显示法律,medicine显示医药,
#cartoon显示卡通,joke显示笑话
SELECT NAME “书名”,note,CASE note WHEN ‘novel’ THEN ‘小说’
WHEN ‘law’ THEN ‘法律’
WHEN ‘medicine’ THEN ‘医药’
WHEN ‘cartoon’ THEN ‘卡通’
WHEN ‘joke’ THEN ‘笑话’
ELSE ‘其他’
END “类型”
FROM books;
***视图优点*
*操作简单*
*减少数据冗余*
*数据安全*
*适应灵活多变的需求*
*能够分解复杂的查询逻辑*
视图具有 隔离性
在MySQL中记录货币金额时,建议使用DECIMAL或NUMERIC字段类型。这两种类型可以精确表示小数位数,并且避免了浮点数计算导致的精度问题。
例如,您可以在创建表时使用以下语句定义一个货币字段:
CREATE TABLE transactions (
id INT,
amount DECIMAL(10, 2),
currency VARCHAR(3)
);
.如何在python中写注释?
·Python中的注释以#字符开头。也可以使用doc-strings (三重引号中包含的字符串) 进行注释
什么是pickling和unpickling?
·Pickle模块接受任何Python对象并将其转换为字符串表示形式。并使用dump函数将其转储到文件中,此过程称为pickling·从存储的字符串中检索原始Python对象的过程称为unpickling。
python中的生成器是什么?。返回可迭代项集的函数称为生成器
你如何把字符串的第一个字母大写?
·在Python中,capitalize0函数可以将字符串的第一个字母大写。。如果字符串在开头已经包含大写字母,那么它将返回原始字符串
如何将字符串转换为全小写?
·要将字符串转换为小写,可以使用lower0函数。
如何在python中注释多行?
。注释多行代码时。所有要注释的行都要在开头前加#。还可以使用快捷方式来注释多行,。就是按住Ctrl键并在每个想要包含 # 字符的地方左键单击并键入一次#。
.什么是Pvthon中的文档Docstrings?
。Docstrings实际上不是注释,它们是文档字符串。这些文档字符串在三引号内。
。它们没有分配给任何变量,因此有时也用于注释。
如何在Windows上安装Python并设置路径变量?
要在Windows上安装Python,请按照以下步骤操作:先到Pvthon官网上下载安装包
下载之后,将其安装在您的PC上。
在命令提示符下使用以下命令查找PC上安装PYTHON的位置:cmd python。
然后转到高级系统设置并添加新变量并将其命名为PYTHON NAME并粘贴复制的路
·查找路径变量,选择其值并选择“编辑”。·如果值不存在,请在值的末尾添加分号,然后键入%PYTHON_HOME%
13.Python中是否需要缩进?
·缩进是Python必需的。它指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。
。通常使用四个空格字符来完成。如果您的代码没有必要缩进,它将无法准确执行并且也会抛出错误
.Python数组和列表有什么区别?
。Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。
15.Python中的函数是什么?
函数是一个代码块,只有在被调用时才会执行。要在Python中定义函数,需要使用def关键字。
16.什么是init?
init是Python中的方法或者结构。
在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有init方法。
17.什么是lambda函数?
lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句。
在上述示例中,DECIMAL(10, 2)指定了一个最大长度为10,小数点后有2位的DECIMAL类型字段。这将允许您存储最多99999999.99的货币金额。
请注意,无论使用DECIMAL还是NUMERIC,都需要根据实际需求进行适当的精度和范围设置。
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
创建空元组
tup1 = ()
元组中只包含一个元素时,需要在元素后面添加逗号
tup1 = (50,)
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
元组可以使用下标索引来访问元组中的值,如下实例:
访问元组
元组可以使用下标索引来访问元组中的值,如下实例:
实例(Python 2.0+)
#!/usr/bin/python tup1 = (‘physics’, ‘chemistry’, 1997, 2000) tup2 = (1, 2, 3, 4, 5, 6, 7 ) print "tup1[0]: ", tup1[0] print "tup2[1:5]: ", tup2[1:5]
以上实例输出结果:
tup1[0]: physics
tup2[1:5]: (2, 3, 4, 5)
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
实例(Python 2.0+)
#!/usr/bin/python # -- coding: UTF-8 -- tup1 = (12, 34.56) tup2 = (‘abc’, ‘xyz’) # 以下修改元组元素操作是非法的。 # tup1[0] = 100 # 创建一个新的元组 tup3 = tup1 + tup2 print tup3
删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:
实例(Python 2.0+)
#!/usr/bin/python tup = (‘physics’, ‘chemistry’, 1997, 2000) print tup del tup print "After deleting tup : " print tup
以上实例元组被删除后,输出变量会有异常信息,输出如下所示:
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup
NameError: name 'tup' is not defined
循环类型 | 描述 |
---|---|
while 循环 | 在给定的判断条件为 true 时执行循环体,否则退出循环体。 |
for 循环 | 重复执行语句 |
嵌套循环 | 你可以在while循环体中嵌套for循环 |
基于input()函数输入
在Python中可以通过input()函数取键盘输入数据。一般格式为:
input()函数首先输出提示字符串,然后等待用户键盘输入,
直到用户按回车键结束,函数最后返回用户输入的字符串(不包括最后的回车符),
保存于变量中,然后程序继续执行input函数后面的语句。
实现根据输入的年份(4位数字,如1981),计算目前的年龄,程序中使用input()函数输入年份,使用datetime模块获取当前年份,然后用获取的年份减去输入的年份,就是计算的年龄。
import datetime
birth_year = input(“请输入您的出生年份:”)
now_year = datetime.datetime.now().year
age = now_year - int(birth_year)
print("您的年龄为: " + str(age) + “岁”)
运行结果:
E:\PythonCode\venv\Scripts\python.exeE:/PythonCode/para@2/examples/超市抹零结账.py
请输入您的出生年份: 2000
您的年龄为: 21岁
- input()的小括号中放入的是提示信息,用来在获取数据之前给用户的一个简单提示
- input()在从键盘获取了数据以后,会存放到等号右边的变量中
- input()会把用户输入的任何值都作为字符串来对待
print()函数的标准用法
在Python中,默认情况下,一条print()语句输出后会自动换行,如果想要一次输出多个内容,
而且不换行,可以将要输出的内容使用英文半角的逗号分隔。
print(‘abc’, 123)
print(‘abc’, 123, sep=’,’)
运行结果:
E:\PythonCodevenvScripts\python.exeE:/PythonCode/para02/examples/超市抹零结账.py
abc 123
abc,123