SQL 基础(一)创建、查看、修改、删除数据库
SQL(Structured Query Language),结构化查询语言基础理论T-SQL 和 SQL 的区别:T-SQL 是 SQL 语言的一种版本,且只能在 SQL SERVER 上使用。是 ANSI SQL 的加强版语言、提供了标准的 SQL 命令。另外,T-SQL 还对 SQL 做了许多补允,提供了类似 C、Basic 和 Pascal 的基本功能,如变量说明、流控制语言、功能函数等SQL 由甲骨文发布,T-SQL 由微软发布SQL 是一种标准,T-SQL 是 SQL 在 SQL SERVER 上的实现主要功能:数据查询 Query数据定义 Definition数据操纵 Manipulation数据控制 Control主要文件:主数据文件 .mdf次数据文件 .ndf事物日志文件 .ldf数据库创建使用 Management StudioSQL 语句创建CREATE DATABASE db_test
ON
(
NAME=test,
FILENAME='D:\Data\test.mdf', --路径+文件名(加扩展名)
SIZE=5MB,
MAXSIZE=10MB,
FILEGROWTH=5% --最后一句指令后不加逗号
)
LOG ON
(
NAME=test_log,
FILENAME='D:\Data\test_log.ldf',
SIZE=5MB,
MAXSIZE=10MB,
FILEGROWTH=2% --具体容量或 UNLIMITED 不限制
)修改数据库ALTER DATABASE db_test
ADD FILE
(
NAME=test_file, --在数据库 db_test 中添加次要数据文件 逻辑名
FILENAME='D:\Data\test_file.ndf', -- 文件名.ndf 注意文件格式
SIZE=100,
MAXSIZE=200,
FILEGROWTH=10 -- 文件自动增量为10MB
)查看数据库EXECUTE Sp_helpdb db_test --查看数据库迁移数据库 分离与附加EXECUTE Sp_detach_db db_test --分离数据库
EXECUTE Sp_attach_db db_test,物理文件名(.mdf文件位置) --附加数据库*注:数据库的分离与附加一般发生在数据库在不同机器迁移的情况下使用,当使用 Management Studio 操作时,可能会因权限问题导致附加失败,下面演示如何修改控制权限本地找到数据库主文件(.mdf)右键修改属性,勾选完全控制打开 Management Studio 选中数据库节点,进入附加数据库窗口选择数据库文件位置,添加执行即可删除数据库DROP DATABASE db_test*注:SQL 指令常用大写,减少后台指令转换执行时间,提升速度,影响较小,基本可忽略练习题目实验任务 1要求设计一个数据库,数据库名为 db_HX(要求利用 SQL Server ManagementStudio 平台,T-SQL 语句两种方式创建数据库);数据库名为 db_HX;数据库中包含一个数据文件,逻辑文件名为 HX_DATA,物理文件名为 HX_DATA.MDF,文件的初始容量为5MB,最大容量为 15MB,文件容量递增值为 2MB事务日志文件的逻辑文件名为 HX_LOG,物理文件名为 HX_LOG.LDF,初始容量为3MB,最大容量为 10MB,文件容量递增值为 1MB;实验任务 2利用 SQL Server Management Studio 平台,T-SQL 语句两种方式修改数据库,按要求对数据库进行修改在数据库 db_HX 中添加一个数据文件,逻辑文件名为 HX_DATA1,文件的初始容量为 3MB,最大容量为 15MB,文件容量递增值为 2MB;将事务日志文件的最大容量改为 20MB,文件容量递增值为 2MB;实验任务 3利用 SQL Server Management Studio 平台,T-SQL 语句两种方式修改数据库,按要求对数据库文件进行删除,将数据库 db_HX 中刚添加的 HX_DATA1 数据库文件删除。实验任务 4利用 SQL Server Management Studio 平台,T-SQL 语句两种方式,将数据库 db_HX进行分离和附加操作。实验任务 5使用 T-SQL 语句删除数据库 db_HX任务拓展创建一个包含多个数据文件和日志文件的数据库 db_MNS,该数据库包含两个初始大小为 15MB 的数据文件和两个 5MB 的日志文件。Query.sql--任务1
create database db_hx
on
(
name=hx_data,
filename='D:\Data\hx_data.mdf',
size=5,
maxsize=15,
filegrowth=2
)
log on
(
name=hx_log,
filename='D:\Data\hx_log.ldf',
size=3,
maxsize=10,
filegrowth=1
)
--任务2
alter database db_hx
add file
(
name=hx_data1,
filename='D:\Data\hx_data1.ndf',
size=3,
maxsize=15,
filegrowth=2
)
alter database db_hx
modify file
(
name=hx_log,
filename='D:\Data\hx_log.ldf',
maxsize=20,
filegrowth=2
)
--任务3
alter database db_hx
remove file hx_data1
--任务4
execute sp_detach_db db_hx
execute sp_attach_db db_hx,'D:\Data\hx_data.mdf'
--任务5
drop database db_hx
--拓展
create database db_mns
on primary --创建多个数据文件(但仅有一个主数据文件)
(
name=mns_data1,
filename='D:\Data\mns_data1.mdf', --主数据文件
size=15
),
(
name=mns_data2,
filename='D:\Data\mns_data2.ndf', --主文件组,次数据库文件
size=15
)
log on
(
name=mns_log1,
filename='D:\Data\mns_log1.ldf',
size=5
),
(
name=mns_log2,
filename='D:\Data\mns_log2.ldf',
size=5
)Tips:选中代码,点击执行可以执行 部分指令
mysql数据库的备份与恢复
参考文献
参考1:http://blog.csdn.net/feng_sundy/article/details/3496744
参考2:http://www.cnblogs.com/lxJack/archive/2011/05/22/2053270.html
参考3:http://blog.csdn.net/xw13106209/article/details/6608706
1.前言
之前写过关于oracle数据库的备份与恢复,见参考三,今天用到mysql,就顺便把mysql的备份与恢复也搞明白的了。
mysql中对数据库的备份用到命令mysqldump,恢复则用到mysql命令。
2.实例1:
2.1备份单个数据库
del F:\database_backup\mysql_backup\bugdb.sql
mysqldump -uroot -proot bugdb > F:\database_backup\mysql_backup\bugdb.sql
上述命令分为两步,第一步首先是删除bugdb数据原先的脚本,第二则是将bugdb数据备份到sql脚本bugdb.sql下。
2.2单个数据库的恢复
mysql -uroot -proot bugdb < F:\database_backup\mysql_backup\bugdb.sql
3.实例2
3.1备份多个数据库
del F:\database_backup\ngx_backup\ngx_db7.sql
ren F:\database_backup\ngx_backup\ngx_db6.sql ngx_db7.sql
ren F:\database_backup\ngx_backup\ngx_db5.sql ngx_db6.sql
ren F:\database_backup\ngx_backup\ngx_db4.sql ngx_db5.sql
ren F:\database_backup\ngx_backup\ngx_db3.sql ngx_db4.sql
ren F:\database_backup\ngx_backup\ngx_db2.sql ngx_db3.sql
ren F:\database_backup\ngx_backup\ngx_db.sql ngx_db2.sql
mysqldump -uroot -proot --database ngx_ad ngx_authority ngx_jbpm ngx_mes ngx_model > F:\database_backup\ngx_backup\ngx_db.sql
这里的mysqldump命令中用到了 --database选项,后面接的是多个数据库名。具体的可以见参考一。
3.2.恢复多个数据库
mysql -uroot -proot < F:\database_backup\ngx_backup\ngx_db.sql
因为是恢复多个数据库,所以这里没有指定具体的数据库。和实例1有所区别。
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/10/31/2296941.html,如需转载请自行联系原作者
DB2数据库常用工具
1解释工具
1.1 Visual Explain
之前都是explain就可以了昂Visual Explain是一种GUI工具,他为数据库管理员和应用程序开发人员提供了查看为特定SQL语句选择的访问计划的图形化的表示能力。但Visual Explain只能用于查看解释快照数据或人工输入SQL或脚本,要查看已收集并写入了解释表的全面解释数据,则必须使用db2exfmt或db2expln工具。
1.2 db2expln
在包含嵌入式SQL语句的源代码文件绑定到数据库时(无论是作为预编译流程的一部分,还是在延迟绑定过程中),DB2将分析遇到的每一条静态SQL语句,并生成一个相应的访问计划,此访问计划随后以程序包的形式存储在数据库中(syscat.packages)。给定数据库名称、包名称、包创建者ID、部分号(若指定了部分号为0,则处理包的所有部分),db2expln工具即可为存储在数据库系统目录中的任何包解释并说明其访问计划。由于db2expln工具直接处理包而非全面解释数据或解释快照数据,因而通常用来获取那些已选定用于未捕获其解释数据的包的访问计划的相关信息。但由于db2expln工具仅可访问已存储在包中的信息,因而只能说明所选的最终访问计划的实现,不能提供特定SQL语句优化方式的信息。 若使用额外的输入参数,db2expln工具则还可用于解释动态SQL(不包含参数标记的动态sql语句)语句。 查看静态package例子:
1.3 db2exfmt
与db2expln工具不同,db2exfmt工具用于直接处理已收集并存储在解释表中的全面解释数据或解释快照数据。给定数据库名和其他限定信息,db2exfmt工具将在解释表中查询信息、格式化结果,并生成一份基于文本的报告,此报告可直接显示在终端上或写入ASCII文件。
2索引设计工具
3基准测试工具
4数据一致性检查工具
5db2look
db2look是可以从命令行提示符下和控制中心中调用的一个强大的工具。这个工具可以:
从数据库对象中提取数据库定义语言(DDL)语句
生成update语句,用于更新数据库管理器和数据库配置参数
生成db2set命令,用于设置DB2概要注册表
提取和生成数据库统计报告
生成update语句,用于复制关于数据库对象的统计信息 LOAD之类的应用程序要求目标表已经存在。您可以使用db2look命令提取表的DDL,在目标数据库上运行它,然后调用装载操作。db2look非常容易使用,下面的例子展示了这一点。
这个例子生成peter在数据库department中创建的所有对象的DDL,输出被存储在alltables.sql中。
db2look -d department -u peter -e -o alltables.sql
[db2inst1@db22 ~]$ db2look -d sample -u peter -e -o alltables.sql
-- Creating DDL for table(s)
-- Output is sent to file: alltables.sql
-- Binding package automatically ...
-- Bind is successful
-- Binding package automatically ...
-- Bind is successful
[db2inst1@db22 ~]$ less alltables.sql
-- This CLP file was created using DB2LOOK Version "11.1"
-- Timestamp: Thu 13 Apr 2017 11:13:02 AM CST
-- Database Name: SAMPLE
-- Database Manager Version: DB2/LINUXX8664 Version 11.1.1.1
-- Database Codepage: 1208
-- Database Collating Sequence is: IDENTITY
-- Alternate collating sequence(alt_collate): null
-- varchar2 compatibility(varchar2_compat): OFF
CONNECT TO SAMPLE;
------------------------------------------------
-- DDL Statements for Schemas
------------------------------------------------
-- Running the DDL below will explicitly create a schema in the
-- new database that corresponds to an implicitly created schema
-- in the original database.
CREATE SCHEMA "DB2INST1";
COMMIT WORK;
CONNECT RESET;
下面的命令生成
数据库department中所有对象的DDL,(由-d、-a、-e选项指定)
update语句,用于复制数据库中所有表和索引的统计信息(由选项-m指定)
GRANT授权语句(由选项-x指定)
用于数据库管理器和数据库配置参数的update语句和用于概要注册表db2set命令(由选项-f指定)
db2look -d department -a -e -m -x -f -o db2look.sql
db2look还可以生成用于注册XML模式的命令。
下面的例子生成模式名为dbinst1 的对象所需的REGISTER XMLSCHMA和COMPLETE XMLSCHEMA命令(由选项-xs指定)。/home/db2inst1中将创建输出db2look.sql,这个目录由-xdir选项指定。
db2look -d department -z db2inst1 -xs -xdir /home/db2inst1 -o db2look.sql
生成缓冲池、表空间、数据库分区组信息
db2look -d <dbname> -l -o storage.out
-d:数据库名
-l:生成数据库布局
-o:将输出重定向到给定的文件名。
创建数据定义语言(DDL)
下面的db2look 命令创建了DDL以复制所有数据库对象,以及配置和统计信息:
db2look -d <dbname> -a -e -m -o db2look.sql
-a:为所有的创建器(createor)生成统计数据。如果指定了该项,那么将忽略-u选项。
-e:提取复制数据库所需的DDL文件。该选项生成包含了DDL语句的脚本。该脚本可以在另一数据库上运行以重新创建数据库对象。
-m:以模拟模式运行db2look实用程序。该选项包含了SQL UPDATE语句脚本。这些SQL UPDAE语句捕获所有的统计数据。该脚本可以在另一数据库上运行以复制原来的那一个数据库。当指定-m选项时,将忽略-p,-g,-s选项。
收集数据库子集的统计数据和DDL
为了仅仅收集某些表和相关对象的统计数据和DDL,可以使用下列命令:
db2look -d <dbname> -a -e -m -t <table1> <table2> .. <tableX> -o table.ddl
-t:为特定的表生成统计数据
-z:模式名:如果同时指定了-z和-a,那么将忽略-z
6其他工具。
SQL Server链接服务器访问DB2设置步骤图解
原文 http://database.51cto.com/art/201108/283240.htm
SQL Server可以使用链接服务器功能来连接其他的数据库,以实现不同数据库之间的操作。本文我们主要介绍了利用SQL Server利用链接服务器连接访问DB2数据库的操作步骤,并给出了详细的截图,接下来就让我们一起来了解一下这部分内容吧。
使用SQL SERVER的链接服务器连接DB2
1.下载安装Microsoft OLEDB Provider for DB2,SQL SERVER链接服务器中的默认访问接口没有DB2的。
2.安装完成后,打开程序菜单 -Microsoft OLEDB Provider for DB2 -数据访问工具。
3.使用数据访问工具新建数据源。
平台我选的是 DB2/AS400(服务器是HP小型机),下一步的证书共用名称 省略
初始目录和包集合我写数据库DB名称,默认限定符为空白.
4.获取连接字符串
5.新建SQL SERVER链接服务器,链接服务器(自己取名),访问接口选择Microsoft OLE DB Provider for DB2,产品名称(可用数据库名称),数据源为服务器名,访问接口字符串为上面工具中生成的连接字符串。
6.测试连接成功后,即可进行查询了,如:
SELECT *
FROM [DB2SVR].[DB2].[ADMINISTRATOR].[ABC]
以上就是用SQL Server的链接服务器来连接DB2进行操作的全部过程,本文就介绍这么多了,希望本次的介绍能够对您有所帮助。
比较 SQL Server 与 Oracle 、 DB2
比较 SQL Server 与 Oracle 、 DB2
来源:Oracle数据库在线(www.dbonline.cn)一个好的数据库是非常重要的。本文从一些方面比较了 SQL Server 与 Oracle 、 DB2 三种数据库,为你选择数据库提供一些参考。
开放性
SQL Server
只能在 Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。 Windows9X 系列产品是偏重于桌面应用, NT server 只适合中小型企业。而且 Windows 平台的可靠性,安全性和伸缩性是非常有限的。它不象 Unix 那样久经考验,尤其是在处理大数据量的关键业务时。
Oracle
能在所有主流平台上运行(包括 Windows )。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
DB2
能在所有主流平台上运行(包括 Windows )。最适于海量数据。 DB2 在企业级的应用最为广泛 , 在全球的 500 家最大的企业中 , 几乎 85% 以上用 DB2 数据库服务器 , 而国内到 97 年约占 5% 。
可伸缩性 , 并行性
SQL Server
并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。 Oracle
平行服务器通过使一组结点共享同一簇中的工作来扩展 Window NT 的能力 , 提供高可用性和高伸缩性的簇的解决方案。如果 WindowsNT 不能满足需要 , 用户可以把数据库移到 UNIX 中。
DB2
DB2 具有很好的并行性。 DB2 把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。
安全性
SQL server
没有获得任何安全证书。
Oracle Server
获得最高认证级别的 ISO 标准认证。
DB2
获得最高认证级别的 ISO 标准认证。
使用风险
SQL Server
完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
Oracle
长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
DB2
在巨型企业得到广泛的应用,向下兼容性好。风险小。
MySQL复制
复制解决的问题
概述:你的网站访问量非常大,对系统的稳定性非常高,那么可以使用mysql功能的复制功能,复制是指将主要的数据库的DDL和DML操作通过二进制日志传到复制服务器(也叫从服务器)上然后在从服务器上对这些日志重新执行(也叫重做),从而使得从服务器和主服务器的数据保持同步,mysql复制的优点包括以下三个方面
1. 如果主服务器出现问题,可以快速切换到从服务器提供服务
2. 可以在从服务器上执行查询操作,降低主服务器的访问压力
3. 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务
缺点:由于MySQLl实现的是异步的复制,所以在主从服务器之间存在一定的差距,所以对实时性要求高的需要从主服务器数据库获得,对一般只有更新不频繁的数据或对实时性要求不高的数据可以通过从服务器查询,解决这个办法的方法可以使用
复制模式
MySQL复制是异步的,它将数据从一个主机复制到一个或多个MySQL从机。另外,MySQL复制支持多种日志类型,针对各种不同类型的数据库更新来优化数据库性能。
1. 基于行的复制 - 复制单独的行,而不是SQL语句,这种方式最适合更新只影响少数行的情况。这种情况使用的锁较少,使数据库的并发性更高。
2. 基于语句复制 - 复制SQL语句,而不是实际的数据被更新。 适用于影响多行的更新操作,基于语句的复制导致较少的数据被记录在日志中。
3. 混合模式复制 - MySQL可以根据事件动态改变上面讨论的复制模式。
练习1:配置mySQL复制
本练习将会克隆出两个mySQL服务器SQL1 223和mySQL2 224。然后配置这两个mySQL实现所有数据库(除了mysql数据库和information_schame数据库)复制。SQL1的数据会自动复制到mySQL2服务器。
1. 准备实验环境
从现有mySQL克隆mySQL从。关闭现有安装了mySQL的Ubuntu,更改显示名,做快照。
创建快照
点中mySQL克隆模板,点击“Clone”
指定虚拟机存放位置
点击“确定”。可以看到克隆的虚拟机mySQL2 224
启动mySQL2 224,更改服务器名称和IP地址为mySQL2 和192.168.80.224,重启mySQL2后做快照。
2. 使用putty连接主mySQL
如果连接不上,需要关闭Ubuntu的防火墙,运行ufw disable
3. 在主服务器上创建复制账户
在主服务器上创建复制帐号,授予相应的权限。注意,复制帐号的口令最好不要超过6位,而且不要带"#"等特殊字符。
mysql> grant replication slave on *.* to 'repl'@'192.168.80.%' identified by 'a1!';
Query OK, 0 rows affected (0.00 sec)
mysql>exit
4. 更改mySQL1服务器mySQL配置文件
server-id = 1
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
各个配置选项的说明如下:
server-id = 1
服务器ID号,整数值,保证唯一标识一台服务器就可以
log-bin=mysql-bin
打开二进制日志
binlog-ignore-db=mysql
忽略mysql数据库复制
binlog-ignore-db=information_schema
忽略information_schema数据库复制
5. 在mySQL2配置如下
server-id =2
master-host=192.168.80.223
master-user= repl
master-password=a1!
relay-log=relay-bin
relay-log-index=relay-bin
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
6. 在SQL1上备份所有数据库
在查看SQL1上的现有数据库,查看现有数据库。记下这些数据库。
备份所有数据库
root@mySQL1:~# mysqldump -u root -p --all-database > all.sql
Enter password:
root@mySQL1:~# ls
删除SQL1上用户数据库
7. 删除SQL2上所有用户数据库
8. 先重启SQL1上的mysql服务,再重启SQL2上的mysql服务
重启完后SQL1和SQL2就有复制关系了。
9. 从SQL1还原备份的数据库
注意;现在在SQL1上的所有操作都会在SQL2上执行一遍。
在SQL1上还原数据库,在SQL2上也会创建还原的数据库。
root@mySQL1:~# mysql -u root -p < all.sql
Enter password:
查看SQL1上还原的数据库。
10. 在SQL2上查看数据库
可以看到两个数据库students和testDB已经出现在SQL2
练习2:查看复制状态
使用mySQL manager工具连接到SQL2状态
show slave status
Show slave status
可以看到配置的主mySQL是哪个服务器,复制账号,只要Slave_IO_Running和Slave_SQL_Running是yes说明配置成功。
Slave_IO_running负责从主服务器上读取BINLOG日志并写入从服务器的中继日志中。
Slave_SQL_running此进程负责读取并且执行中继日志中的BINLOG日志。
可以看到不参与复制的数据库“mysql”和“information_schema”。
练习3:验证mySQL复制
主mySQL的数据变化会自动复制到从mySQL,从mySQL的数据库变化不会复制到主mySQL。下面就来验证。
1. 在SQL1上创建新的数据库和表 插入数据
2. 在SQL2上查看数据库是否复制过来
查看从SQL1 中刚刚复制过来的schoolDB2数据库。
再查看schoolDB2数据库中的表,可以看到数据也复制过来了。
练习4:验证单向复制
3. 在SQL2上,插入一条记录。
在SQL1上查看,可以看到,SQL2上的记录不会复制到SQL1.
在SQL1上插入一条记录。
在SQL1上的students数据库的s表插入一条记录。
在SQL2上查看,可以看到schoolDB2数据库t1表中的记录复制过来了
查看数据库students中s表中记录,发现也复制过来。
结论:mySQL复制主数据库只能向从数据库复制,并且可同时对多个数据库进行数据同步。
练习5:禁用特定数据库复制
本练习禁止students复制到SQL2。
4. 在SQL1中更改配置文件,增加
binlog-ignore-db=students
##指定不写binlog的数据库,不同步系统库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
##指定写二进制的数据库,多个要多行
replicate-do-db = DB_Test
##指定跨库更新也同步的数据库。和replicate-do-db相同多行
replicate-wild-do-table=DB\_Test.%
备注::关于过滤复制对象的问题,但是如果不是特殊需要,不要使用复制过滤,因为同样有几率在一些事件触发的时候导致一些错误。介绍几种过滤参数。
binlog_do_db 只复制指定的数据库(主服务器配置文件里设置)
binlog_ignore_db 不复制指定的数据库(主服务器配置文件里设置)
replicate_ignore_table 不复制指定的表(从服务器配置文件里设置)
replicate_wild_ignore_table
使用wild匹配来不复制的指定表(从服务器配置文件里设置),比如参数设为abc.%,表示不复制abc的所有表。
5. 重启SQL1的mysql服务
6. 在SQL1上student2数据库的s表插入一条记录
7. 在SQL2上验证,可以看到students数据库的s表中新增加的数据没有复制过来。
练习6:暂停从mySQL从主mySQL复制
本练习将会配置从mySQL暂时停止从主mySQL复制。
8. 你只需要在从mySQL运行
Stop slave
9. 在主mySQL插入记录
10. 在从mySQL查看,发现数据没有复制过来
11. 在从mySQL上运行slave服务,可以看到数据复制过来
本文转自 onesthan 51CTO博客,原文链接:http://blog.51cto.com/91xueit/1138103,如需转载请自行联系原作者
Python 学习(七)--数据库操作
1. MySQL 数据库连接
1). PyMySQL
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
下载解压,如图:
图1.png
2). 安装
python setup.py install
图2.png
2. 数据库连接
连接数据库前,请先确认以下事项:
已经创建了数据库 TESTDB.
在TESTDB数据库中您已经创建了表 EMPLOYEE
EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
在你的机子上已经安装了 Python MySQLdb 模块。
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用 cursor() 方法创建游标对象 cursor
cursor = db.cursor()
# 使用execute() 方法执行SQL查询
cursor.execute("SELECT VERSION()")
# 使用fetchone() 方法获取单条数据
data = cursor.fetchone()
# 打印数据库版本
print("Database version: %s" % data)
# 关闭数据库连接
db.close()
打印结果:
图3.png
3. 创建数据库表
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "root", "TEST")
# 使用cursor() 方法创建一个游标cursor
cursor = db.cursor()
# 使用execute()方法执行SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT)"""
# 执行sql语句
cursor.execute(sql)
# 关闭数据库连接
打印结果:
图4.png
4. 数据插入
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "root", "TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME,AGE,SEX,INCOME) VALUES
('Mac','Mohan',20,'M',2000)"""
try:
# 执行sql语句
cursor.execute(sql)
# 添加事务到数据库
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# 关闭数据库连接
db.close()
打印结果:
图5.png
5. 数据查询
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall(): 接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 执行sql语句
cursor.execute(sql)
# 获取说有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income))
pass
pass
except Exception as e:
print("Error: unable to fetch data")
raise e
# 关闭数据库连接
db.close()
打印结果:
图6.png
6. 数据更新
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
pass
except Exception as e:
# 发生错误时回滚
db.rollback()
raise e
# 关闭数据库连接
db.close()
打印结果:
图7.png
7. 数据删除
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 执行sql语句
cursor.execute(sql)
# 提交修改
db.commit()
pass
except Exception as e:
# 发生错误时回滚
db.rollback()
raise e
# 关闭连接
db.close()
打印结果:
图8.png
8. 事务执行事务
事务机制可以确保数据一致性。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity) : 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency) : 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation) : 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability) : 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()
except:
# 发生错误时回滚
db.rollback()
SQL 基础(一)创建、查看、修改、删除数据库
SQL(Structured Query Language),结构化查询语言基础理论T-SQL 和 SQL 的区别:T-SQL 是 SQL 语言的一种版本,且只能在 SQL SERVER 上使用。是 ANSI SQL 的加强版语言、提供了标准的 SQL 命令。另外,T-SQL 还对 SQL 做了许多补允,提供了类似 C、Basic 和 Pascal 的基本功能,如变量说明、流控制语言、功能函数等SQL 由甲骨文发布,T-SQL 由微软发布SQL 是一种标准,T-SQL 是 SQL 在 SQL SERVER 上的实现主要功能:数据查询 Query数据定义 Definition数据操纵 Manipulation数据控制 Control主要文件:主数据文件 .mdf次数据文件 .ndf事物日志文件 .ldf数据库创建使用 Management StudioSQL 语句创建CREATE DATABASE db_test
ON
(
NAME=test,
FILENAME='D:\Data\test.mdf', --路径+文件名(加扩展名)
SIZE=5MB,
MAXSIZE=10MB,
FILEGROWTH=5% --最后一句指令后不加逗号
)
LOG ON
(
NAME=test_log,
FILENAME='D:\Data\test_log.ldf',
SIZE=5MB,
MAXSIZE=10MB,
FILEGROWTH=2% --具体容量或 UNLIMITED 不限制
)修改数据库ALTER DATABASE db_test
ADD FILE
(
NAME=test_file, --在数据库 db_test 中添加次要数据文件 逻辑名
FILENAME='D:\Data\test_file.ndf', -- 文件名.ndf 注意文件格式
SIZE=100,
MAXSIZE=200,
FILEGROWTH=10 -- 文件自动增量为10MB
)查看数据库EXECUTE Sp_helpdb db_test --查看数据库迁移数据库 分离与附加EXECUTE Sp_detach_db db_test --分离数据库
EXECUTE Sp_attach_db db_test,物理文件名(.mdf文件位置) --附加数据库*注:数据库的分离与附加一般发生在数据库在不同机器迁移的情况下使用,当使用 Management Studio 操作时,可能会因权限问题导致附加失败,下面演示如何修改控制权限本地找到数据库主文件(.mdf)右键修改属性,勾选完全控制打开 Management Studio 选中数据库节点,进入附加数据库窗口选择数据库文件位置,添加执行即可删除数据库DROP DATABASE db_test*注:SQL 指令常用大写,减少后台指令转换执行时间,提升速度,影响较小,基本可忽略练习题目实验任务 1要求设计一个数据库,数据库名为 db_HX(要求利用 SQL Server ManagementStudio 平台,T-SQL 语句两种方式创建数据库);数据库名为 db_HX;数据库中包含一个数据文件,逻辑文件名为 HX_DATA,物理文件名为 HX_DATA.MDF,文件的初始容量为5MB,最大容量为 15MB,文件容量递增值为 2MB事务日志文件的逻辑文件名为 HX_LOG,物理文件名为 HX_LOG.LDF,初始容量为3MB,最大容量为 10MB,文件容量递增值为 1MB;实验任务 2利用 SQL Server Management Studio 平台,T-SQL 语句两种方式修改数据库,按要求对数据库进行修改在数据库 db_HX 中添加一个数据文件,逻辑文件名为 HX_DATA1,文件的初始容量为 3MB,最大容量为 15MB,文件容量递增值为 2MB;将事务日志文件的最大容量改为 20MB,文件容量递增值为 2MB;实验任务 3利用 SQL Server Management Studio 平台,T-SQL 语句两种方式修改数据库,按要求对数据库文件进行删除,将数据库 db_HX 中刚添加的 HX_DATA1 数据库文件删除。实验任务 4利用 SQL Server Management Studio 平台,T-SQL 语句两种方式,将数据库 db_HX进行分离和附加操作。实验任务 5使用 T-SQL 语句删除数据库 db_HX任务拓展创建一个包含多个数据文件和日志文件的数据库 db_MNS,该数据库包含两个初始大小为 15MB 的数据文件和两个 5MB 的日志文件。Query.sql--任务1
create database db_hx
on
(
name=hx_data,
filename='D:\Data\hx_data.mdf',
size=5,
maxsize=15,
filegrowth=2
)
log on
(
name=hx_log,
filename='D:\Data\hx_log.ldf',
size=3,
maxsize=10,
filegrowth=1
)
--任务2
alter database db_hx
add file
(
name=hx_data1,
filename='D:\Data\hx_data1.ndf',
size=3,
maxsize=15,
filegrowth=2
)
alter database db_hx
modify file
(
name=hx_log,
filename='D:\Data\hx_log.ldf',
maxsize=20,
filegrowth=2
)
--任务3
alter database db_hx
remove file hx_data1
--任务4
execute sp_detach_db db_hx
execute sp_attach_db db_hx,'D:\Data\hx_data.mdf'
--任务5
drop database db_hx
--拓展
create database db_mns
on primary --创建多个数据文件(但仅有一个主数据文件)
(
name=mns_data1,
filename='D:\Data\mns_data1.mdf', --主数据文件
size=15
),
(
name=mns_data2,
filename='D:\Data\mns_data2.ndf', --主文件组,次数据库文件
size=15
)
log on
(
name=mns_log1,
filename='D:\Data\mns_log1.ldf',
size=5
),
(
name=mns_log2,
filename='D:\Data\mns_log2.ldf',
size=5
)Tips:选中代码,点击执行可以执行 部分指令
《Oracle达人修炼秘籍:Oracle 11g数据库管理与开发指南 》一1.6 关系数据库
1.6 关系数据库
1.6.1 关系数据库的功能
采用关系模型的数据库系统称为关系数据库系统,其主要功能如下。数据定义:提供数据定义语言(Data Definition Language,DDL),用户利用该语言可以定义数据库的三级模式(外模式、模式、内模式)、两级映像(外模式/模式、模式/内模式),定义数据的完整性、安全性约束等。数据操作:提供数据操作语言(Data Manipulation Language,DML),实现对数据库的操作,包括数据查询、插入、删除、修改等。数据库运行与控制:提供数据库运行和控制功能,保证所有访问数据库的操作在控制程序的统一管理下进行,保证了数据的安全性、完整性、多用户对数据库的并发操作,以及数据库在故障发生时的恢复。数据库的建立与维护:提供实用程序来完成数据库的初始数据输入和数据转换等,完成数据库数据的转储、恢复、重组织、系统性能监控和分析等。 数据库接口:提供与其他软件系统进行交互、通信和操作的接口。
1.6.2 常见的关系数据库管理系统
目前,市场上常见的关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server等。
OracleOracle是当今最大的数据库厂商Oracle公司的数据库产品。它是世界上第一个商品化的关系型数据库管理系统,也是第一个推出与数据库结合的、应用第四代语言开发工具开发的数据库产品。
Oracle数据库采用标准SQL语言,支持多种数据类型,提供面向对象操作的数据支持,支持UNIX、VMS、Windows、OS/2等多种平台。Oracle公司的软件产品主要由3部分构成:Oracle服务器产品、Oracle开发工具和Oracle应用软件。其中,服务器产品包括数据库服务器和应用服务器。当前Oracle最新版本为Oracle 11g,但使用最广的产品为Oracle 10g。
DB2DB2是IBM公司于1983年推出的一个商业化关系数据库管理系统,它是基于System R基础实现的。
20世纪80年代初期,DB2主要运行在大型主机平台上。从20世纪80年代中期到90年代初,DB2已发展到中型机、小型机以及微机平台,可以运行在各种不同的操作系统平台上,如UNIX、VMS、Windows、OS/2等。DB2在金融系统应用较多。DB2 Universal Database Personal Edition 是专为OS/2和Windows系统的单用户提供的数据库管理系统;DB2 Universal Database Workgroup Edition 是专为OS/2和Windows系统的多用户提供的数据库管理系统。
SybaseSybase是Sybase公司发布的关系数据库产品。Sybase公司成立于1984年,于1987年5月推出了关系数据库Sybase SQL Server 1.0。该公司首先提出了客户机/服务器的思想,并率先在Sybase SQL Server中实现。现在,Sybase可以运行在不同的操作系统平台上,如UNIX、VMS、Windows、Netware等。作为网络数据库,Sybase采用开放的体系结构,支持网络环境下各节点数据库的互相访问。
Sybase数据库主要由服务器软件Sybase SQL Server、客户软件Sybase SQL Toolset和接口软件Sybase Client/Server Interface等3类软件产品组成。其中Sybase SQL Server服务器软件中的Sybase SQL Anywhere是Sybase的单机版本,是一个完备的、小型关系数据库管理系统,支持完全的事务处理和SQL功能,可以胜任小型数据库应用系统的开发。此外,Sybase还拥有数据库开发工具PowerBuilder,能够快速开发出基于客户机/服务器工作模式、Web工作模式的图形化数据库应用程序。
Microsoft SQL ServerMicrosoft SQL Server是微软公司推出的应用于Windows操作系统上的关系数据库产品。Microsoft SQL Server是Microsoft公司从Sybase公司购买技术而开发的产品,与Sybase数据库完全兼容,它支持客户机/服务器结构。
Microsoft SQL Server只支持Windows操作平台。它不提供直接的客户开发工具和平台,只提供ODBC和DB-Library两个接口。ODBC接口是一个开放的、标准的访问数据库的接口,允许程序员在多种软件平台上使用第三方的开发工具;DB-Library是用C语言开发的API,供程序员访问Microsoft SQL Server。
python操作mysql数据库实现增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:
GadFlymSQLMySQLPostgreSQLMicrosoft SQL Server 2000InformixInterbaseOracleSybase你可以访问Python数据库接口及API查看详细的支持数据库列表。
不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:
引入 API 模块。获取与数据库的连接。执行SQL语句和存储过程。关闭数据库连接。什么是MySQLdb?MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
如何安装MySQLdb?为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。复制以下代码,并执行:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:
Traceback (most recent call last): File "test.py", line 3, in
import MySQLdb
ImportError: No module named MySQLdb安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python ,(Linux平台可以访问:https://pypi.python.org/pypi/MySQL-python)从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。
如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz$ tar -xvf MySQL-python-1.2.2.tar$ cd MySQL-python-1.2.2$ python setup.py build$ python setup.py install注意:请确保您有root权限来安装上述模块。
数据库连接连接数据库前,请先确认以下事项:
您已经创建了数据库 TESTDB.在TESTDB数据库中您已经创建了表 EMPLOYEEEMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。在你的机子上已经安装了 Python MySQLdb 模块。实例:
以下实例链接Mysql的TESTDB数据库:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()
print "Database version : %s " % data
关闭数据库连接
db.close()执行以上脚本输出结果如下:
Database version : 5.0.45创建数据库表如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
关闭数据库连接
db.close()数据库插入操作以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # Rollback in case there is any error db.rollback()
关闭数据库连接
db.close()以上例子也可以写成如下形式:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()
关闭数据库连接
db.close()实例:
以下代码使用变量向SQL语句中传递参数:
..................................user_id = "test123"password = "password"
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................数据库查询操作Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象fetchall():接收全部的返回结果行.rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。实例:
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except: print "Error: unable to fecth data"
关闭数据库连接
db.close()以上脚本执行结果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000数据库更新操作更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 'M' 的 AGE 字段递增 1:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()
关闭数据库连接
db.close()删除操作删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:
!/usr/bin/python
-- coding: UTF-8 --
import MySQLdb
打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
使用cursor()方法获取操作游标
cursor = db.cursor()
SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit()except: # 发生错误时回滚 db.rollback()
关闭连接
db.close()执行事务事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
实例:
SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit()except: # 发生错误时回滚 db.rollback()对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。