请教有关MySQL

请教有关MySQL,第1张

1、连接Mysql

格式: mysql -h主机地址 -u用户名 -p用户密码

1、连接到本机上的MYSQL。

首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

2、连接到远程主机上的MYSQL。假设远程主机的IP为:110110110110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110110110110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

2、修改密码

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码ab12。

首先在DOS下进入目录mysql\bin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、再将root的密码改为djg345。

mysqladmin -u root -p ab12 password djg345

3、增加新用户

注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符

格式:grant select on 数据 to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on to [email=test1@”%]test1@”%[/email]” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的 *** 作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb to [email=test2@localhost]test2@localhost[/email] identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb to [email=test2@localhost]test2@localhost[/email] identified by “”;

41 创建数据库

注意:创建数据库之前要先连接Mysql服务器

命令:create database <数据库名>

例1:建立一个名为xhkdb的数据库

mysql> create database xhkdb;

例2:创建数据库并分配用户

①CREATE DATABASE 数据库名;

②GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名 TO 数据库名@localhost IDENTIFIED BY '密码';

③SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');

依次执行3个命令完成数据库创建。注意:中文 “密码”和“数据库”是户自己需要设置的。

php程序员的简历 1

姓 名 代林

手机:15850383121 ·Email: linlinpusd@sinacom 居住地: 上海市闸北区 ·性别:男 ·出生日期:01·01

个人概况

毕业院校:海南经贸职业技术学院

专 业:电子商务 学 历:大专 期望职位:PHP程序员

项目经验:基于Apache下电子商务购物Estore系统 、中小型企业及团体餐饮订餐系统 、基于Ajax的网页聊天工具

专业技术

核心语言:

在windows和linux环境下,熟练安装Apache、MySQL,熟练配置好解析php的环境。 熟练应用PHP+`MySQL技术,能在LAMP环境下熟练编程。

理解对于Web网站开发的安全性要求,例如防SQL注射、令牌加密等技术。

理解Web开发流程,具有OO思想,能独立开发网站。

框架技术:

熟练使用smarty模板引擎技术, TP框架开发网站。

对三层结构、MVC的开发(设计模式)有较好的理解。

数 据 库:

熟练应用MySQL、SQL Server20xx数据库,以及使用SQL语言。

前台展现:

熟识 HTML 、XHTML 网页技术,能熟练应用 DIV+CSS 样式布局设计出符合Web20的页面,熟练应用JavaScript 、Ajax 技术实现对于客户端的脚本验证,能够熟练使用Jquery类库实现对页面即点即改等功能。

开发工具:

能够使用ZendStudio-550等PHP开发工具。

掌握PhotpShop、Dreamweaver网页开发工具的使用。 熟悉php168,Ecshop二次开发工具的使用。

培训认证:

20xx年12月在杰普软件培训公司进行培训,培训期间熟练掌握并运用以下内容

1PHP基础编程2PHP高级编程3mysql数据库,数据库的增删改查 4mysql与php结合的数据库高级编程5Javascript的使用6XML的使用7Ajax的应用8cvs,数据的并发访问控制

项目经验:

Estore (购物网站)

软件环境: PHP+MYSQL+APACHE 开发语言:JavaScript,html,css 编程工具: EditPlus

责任描述: 研究需求分析以及数据建模,功能独立开发完成

项目描述: 无论对于大型商务系统,中小型系统,都必须要有一个明确的主题思路,无论对于使用者还是管理者,在任何方面都需要一个既提供标准有提供管理的系统;

该项目主要应用了 smarty + javascript等技术由于php是一种弱的语言,并不能实现面向对象的多态(重载),所以只是用到了面向对象的编程思想。在开发的过程中也使我更加熟悉基于Smarty + CMS的开发模式。

餐饮管理(订餐系统)

软件环境:PHP+MYSQL+APACHE

开发工具:ZendStudio-550 开发语言:JavaScript,html,css

项目描述:建立一个完善的客户管理系统,通过不同用户的不同需求,进行相应的调配和处理,提高对订餐系统进行配置、管理的便捷性。

责任描述:前期设计数据库,在数据库中创建相关联的表;实现模块:用户登录,依据权限用户对后台 *** 作,包括后台管理用户admin和普通用户的编辑菜单,添加菜单,查看已付款定单,修改admin密码,所有人员消费记录,查看充值记录,查看未付款订单,帐号充值。该项目是独立完成的!

项目感想:通过对该系统的进一步深入了解,发掘出该项目适合一些中小型企业项目的订购系统的开发以及更深入的修改,对订购(订餐)系统有了更深的了解和认识!

根据客户的需求,然后利用产品的内核,进行系统的扩展和修改。

WEB聊天室构建

软件环境:PHP+MYSQL+APACHE 开发语言:JavaScript,html,css

开发工具:ZendStudio-550

项目描述:基于Ajax的web聊天室,用户登录成功后,显示在线用户,并在同一页面可以进行聊天。

责任描述:设计注册登录页面以及聊天室的主界面;利用ajax技术进行对用户名的即时验证;通过session保存用户的用户名,并更改用户状态;用ajax,php与mysql的结合显示在线用户;对聊天内容的一些特殊字符的处理与显示。

Ecshop二次开发

软件环境:PHP+MYSQL+APACHE

开发工具:ZendStudio-550

项目感想: 对二次开发又有了深入的了解,在开发过程中熟悉了网上购物的过程,购物车的实现 开发语言:JavaScript,html,css

自我评价:

自信、乐观、责任心强。具有较好的团队组织能力、分析问题和宣传策划活动能力、协调能力等。学习方面也有较强的求知欲与良好的学习能力。为人真诚,惯于换位思考;对自己要求严格,做事情讲究效率;对程序的开发及测试方面很感兴趣;有较强的学习能力,适应行业的要求和新技术的挑战;有较强的求知欲、较强的学习能力。

php程序员的简历 2

PHP 程序员简历

熟练应用PHP+MySQL技术,能在WAMP环境下熟练编程。

理解对于Web网站开发的安全性要求,例如防SQL注射、令牌加密等技术。 理解Web开发流程,具有OO思想,能独立开发网站。

框架技术:

熟练使用smarty模板引擎技术, TP框架开发网站。

对三层结构、MVC的开发(设计模式)有较好的理解。

数 据 库:

熟练应用MySQL、SQL Server20xx数据库,以及使用SQL语言。 前台展现:

熟识 HTML 、XHTML 网页技术,能熟练应用 DIV+CSS 样式布局设计出符合

Web20的页面,熟练应用JavaScript 、Ajax 技术实现对于客户端的脚本验证,能够熟练使用Jquery类库实现对页面即点即改等功能。

开发工具:

能够使用ZendStudio-550等PHP开发工具。

掌握PhotpShop、Dreamweaver网页开发工具的使用。

熟悉php168,Ecshop二次开发工具的使用。

php程序员的简历 3

基本简历

姓名:黄先生

国籍:中国

现在所在地:广州

民族:汉族

户口所在地:潮州

身材:170 cm

婚姻状况:未婚

年纪:22岁

求职意向

人才类型:通常求职

应聘职位:计算机类:php程序员、网站信息管理/内容修改:网站修改、

作业年限:1

职称:中级

求职类型:全职

可上任日期:随时

月薪请求:20xx--3500

期望作业区域:广州广州

工作阅历

公司名称:广州奥莱科技网络有限公司起止年月:20xx-08~20xx-03

公司性质:私营公司所属工作:计算机业

担任职务:网站修改、程序员

作业描绘:担任网站的前台规划,和后台开发、保护。

离任原因:寻求更大的发展空间

公司名称:广州多迪网络公司起止年月:20xx-03~20xx-08

公司性质:所属工作:计算机业

担任职务:训练、实训

作业描绘:别的在校时期,署理拼装电脑。

离任原因:

教学布景

结业院校:广州铁路工作技能学院

最高学历:大专结业日期:20xx-07-01

所学专业:php程序员|网站修改

受教学训练阅历:开始年月停止年月校园(组织)

专业取得证书证书编号

20xx-09 20xx-07广州铁路工作技能学院计算机使用技能大专139XXXXX06000152

20xx-03 20xx-08广州多迪网络公司php工程师pcti证pctXXXX79

言语才能

外语:英语通常

国语水平:杰出

粤语水平:通常

作业才能及其他特长

1、了解html言语。了解css及javascript,能运用photoshop处理图像,能运用div+css+jquery制造契合规范的页面、了解js+ajax技能使用。

2熟练掌握php+mysql,php+access网站开发和页面制造,数据库的导入导出及保护技能,了解framework结构及phpcms,dedecms,ecshop各种开源商品。

3、运用oop,smarty模板技能,懂得smarty的模板缓存和数据缓存,主动生成静态化页面。了解mvc模式,运用php解说xml。

4、数据库的优化。

5、在校曾学过c,c++,vb多种编程言语。

6、事例:

自己自传

自个性格和顺,责任心强,待人真挚,公私分明,有耐心,有自制力,学习仔细,能刻苦耐劳,在作业中不断学习,剖析自个的缺乏,不辞劳怨地向方针进发,虽然我没有什么格外,但我信任凭着我的热忱与热情,才能,定能胜任贵公司的职位,为贵公司带来更大的收益。我深信“业精于勤”,“一份耕耘,一分收获”,我将会尽我最大的尽力得到贵公司的必定。

****

通讯地址:广州银河车陂

联系电话:

家庭电话:

手机:

qq号码:

电子邮件:

自己主页:>

Mongodb和mysql的区别

1Mongodb简介及优缺点分析

Mongodb是非关系型数据库(nosql ),属于文档型数据库。文档是mongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。

存储方式:虚拟内存+持久化。

查询语句:是独特的Mongodb的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

优点:

快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。高扩展性,存储的数据格式是json格式!

缺点:

① mongodb不支持事务 *** 作。

② mongodb占用空间过大。

③ 开发文档不是很完全,完善。

2MySQL优缺点分析

优点:

在不同的引擎上有不同 的存储方式。

查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

开源数据库的份额在不断增加,mysql的份额页在持续增长。

缺点:

在海量数据处理的时候效率会显著变慢。

3Mongodb和MySQL数据库的对比

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。

MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

4MongoDB常用语句

# 连接Mongo数据库,并设置数据存储地址

mongodexe --dbpath "d:softwareMongoDBServer30data"

#-----------------------#1# 数据库

# 查看所有的数据库

show dbs

# 删除当前使用的数据库

dbdropDatabase()

# 使用这个数据库(只有插入数据后完成创建数据库)

use dbt

# 查看当前使用的数据库

db

dbgetName()

# 查看当前数据库状态

dbstats()

# 修复当前数据库

dbrepairDatabase()

# 从一个数据库复制到另一个数据库

dbcopyDatabase("mydb", "temp", "127001");

#-----------------------#2# 集合

# 查看当前数据库下所有的集合

show collections

show tables

# 创建名称为coll集合

dbcreateCollection('coll')

dbcreateCollection("coll2", {capped:true, autoIndexId:true, size:6142800, max:10000}) # 可选参数

# 查看当前集合状态

dbcollstats()

# 删除名称为coll集合

dbcolldrop()

#-----------------------#3# 集合数据

# 插入空数据并且直接创建名称为coll集合

dbcollinsert({})

# 插入一个或多个数据

dbcollinsert({name:'tom', age:22})

dbcollinsert([{name:'adam', age:10},{name:'john', age:23}])

# 添加数据(save方法可以修改相同id的数据)

dbcollsave({name:'allen'})

# 删除一个或所有的数据

dbcollremove({name:'tom'})

dbcollremove({})

# 删除符合条件的数据中的第一条

dbcollremove({name:'tom'}, 1)

# 更改数据

dbcollupdate({name:'tom', age:22}, {$set:{name:'tom', age:222}})

# 查看数据

dbcollfind()

# 查看一条数据

dbcollfindOne()

dbcollfind({}, {name:1, '_id':0}) # 1表示显示,0表示不显示(find默认显示_id)

# 格式化显示数据,使数据更加清晰明了

dbcollfind()pretty()

# 使用and,or查看数据

dbcollfind({name:'tom', age:22}) # 等同and使用

dbcollfind({$or:[{name:'tom'}, {age:21}]}) # or使用

# *** 作符大于,小于,等于,不等于,大于不等于,小于不等于

dbcollfind({age: {$gt: 22}}) # 大于

dbcollfind({age: {$lt: 22}}) # 大于

dbcollfind({age: 22}) # 等于

dbcollfind({age: {$ne: 22}}) # 不等于

dbcollfind({age: {$gte: 22}}) # 大于等于

dbcollfind({age: {$lte: 22}}) # 小于等于

# 显示从skip之后limit个

dbcollfind()limit(2)skip(1)

#-----------------------# # 用户

# 3x之后版本添加用户

use admin

dbcreateUser({user:'nu', pwd:'nu', roles:[{role:'readWrite',db:'admin'}]})

# 用户认证

dbauth("nu", "nu");

# 显示当前所有用户

show users;

dbsystemusersfind()

3x版本删除用户

dbremoveUser('nu') # 不推荐使用,已经废弃

dbdropUser("nu");

# 当前db版本

dbversion();

# 当前db的链接机器地址和端口

dbgetMongo();

# 备份到备份目录

mongodump

# 从备份目录恢复备份语句。

mongorestore

咱们下期见。

特性 MySQL PostgreSQL

实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。

通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。

数据库 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。

数据缓冲区 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 postgresqlconf 文件中的 shared_buffers 参数来更新缓冲区缓存。

数据库连接 客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。

身份验证 MySQL 在数据库级管理身份验证。 基本只支持密码认证。 PostgreSQL 支持丰富的认证方法:信任认证、口令认证、Kerberos 认证、基于 Ident 的认证、LDAP 认证、PAM 认证

加密 可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。 可以使用 pgcrypto 库中的函数对列进行加密/解密。可以通过 SSL 连接实现网络加密。

审计 可以对 querylog 执行 grep。 可以在表上使用 PL/pgSQL 触发器来进行审计。

查询解释 使用 EXPLAIN 命令查看查询的解释计划。 使用 EXPLAIN 命令查看查询的解释计划。

备份、恢复和日志 InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件才能支持热备份。 在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 可以支持热备份。

JDBC 驱动程序 可以从 参考资料 下载 JDBC 驱动程序。 可以从 参考资料 下载 JDBC 驱动程序。

表类型 取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。

索引类型 取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-树、哈希、R-树和 Gist 索引。

约束 支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 支持主键、外键、惟一、非空和检查约束。

存储过程和用户定义函数 支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。 没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。

触发器 支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。

系统配置文件 myconf Postgresqlconf

数据库配置 myconf Postgresqlconf

客户机连接文件 myconf pg_hbaconf

XML 支持 有限的 XML 支持。 有限的 XML 支持。

数据访问和管理服务器 OPTIMIZE TABLE —— 回收未使用的空间并消除数据文件的碎片

myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎)

mysql —— 命令行工具

MySQL Administrator —— 客户机 GUI 工具 Vacuum —— 回收未使用的空间

Analyze —— 更新查询优化器所使用的统计数据

psql —— 命令行工具

pgAdmin —— 客户机 GUI 工具

并发控制 支持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 支持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。

MySQL相对于PostgreSQL的劣势:

MySQL

PostgreSQL

最重要的引擎InnoDB很早就由Oracle公司控制。目前整个MySQL数据库都由Oracle控制。

BSD协议,没有被大公司垄断。

对复杂查询的处理较弱,查询优化器不够成熟

很强大的查询优化器,支持很复杂的查询处理。

只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。

都支持

性能优化工具与度量信息不足

提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。

InnoDB的表和索引都是按相同的方式存储。也就是说表都是索引组织表。这一般要求主键不能太长而且插入时的主键最好是按顺序递增,否则对性能有很大影响。

不存在这个问题。

大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢。

不存在这个问题

表增加列,基本上是重建表和索引,会花很长时间。

表增加列,只是在数据字典中增加表定义,不会重建表

存储过程与触发器的功能有限。可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱

除支持pl/pgsql写存储过程,还支持perl、python、Tcl类型的存储过程:pl/perl,pl/python,pl/tcl。

也支持用C语言写存储过程。

不支持Sequence。

支持

不支持函数索引,只能在创建基于具体列的索引。

不支持物化视图。

支持函数索引,同时还支持部分数据索引,通过规则系统可以实现物化视图的功能。

执行计划并不是全局共享的, 仅仅在连接内部是共享的。

执行计划共享

MySQL支持的SQL语法(ANSI SQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with 语句)或者窗口函数(分析函数)。

都 支持

不支持用户自定义类型或域(domain)

支持。

对于时间、日期、间隔等时间类型没有秒以下级别的存储类型

可以精确到秒以下。

身份验证功能是完全内置的,不支持 *** 作系统认证、PAM认证,不支持LDAP以及其它类似的外部身份验证功能。

支持OS认证、Kerberos 认证 、Ident 的认证、LDAP 认证、PAM 认证

不支持database link。有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多

有dblink,同时还有一个dbi-link的东西,可以连接到oracle和mysql上。

Mysql Cluster可能与你的想象有较大差异。开源的cluster软件较少。

复制(Replication)功能是异步的,并且有很大的局限性例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master

有丰富的开源cluster软件支持。

explain看执行计划的结果简单。

explain返回丰富的信息。

类似于ALTER TABLE或CREATE TABLE一类的 *** 作都是非事务性的它们会提交未提交的事务,并且不能回滚也不能做灾难恢复

DDL也是有事务的。

PostgreSQL主要优势:

1 PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。

2 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。

3 PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。

4 PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。

目前只想到这些,以后想到再添加,欢迎大家拍砖。

PostgreSQL与oracle或InnoDB的多版本实现的差别

PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引本身没有分开。

PostgreSQL的主要优势在于:

1 PostgreSQL没有回滚段,而oracle与innodb有回滚段,oracle与Innodb都有回滚段。对于oracle与Innodb来说,回滚段是非常重要的,回滚段损坏,会导致数据丢失,甚至数据库无法启动的严重问题。另由于PostgreSQL没有回滚段,旧数据都是记录在原先的文件中,所以当数据库异常crash后,恢复时,不会象oracle与Innodb数据库那样进行那么复杂的恢复,因为oracle与Innodb恢复时同步需要redo和undo。所以PostgreSQL数据库在出现异常crash后,数据库起不来的几率要比oracle和mysql小一些。

2 由于旧的数据是直接记录在数据文件中,而不是回滚段中,所以不会象oracle那样经常报ora-01555错误。

3 回滚可以很快完成,因为回滚并不删除数据,而oracle与Innodb,回滚时很复杂,在事务回滚时必须清理该事务所进行的修改,插入的记录要删除,更新的记录要更新回来(见row_undo函数),同时回滚的过程也会再次产生大量的redo日志。

4 WAL日志要比oracle和Innodb简单,对于oracle不仅需要记录数据文件的变化,还要记录回滚段的变化。

PostgreSQL的多版本的主要劣势在于:

1、最新版本和历史版本不分离存储,导致清理老旧版本需要作更多的扫描,代价比较大,但一般的数据库都有高峰期,如果我们合理安排VACUUM,这也不是很大的问题,而且在PostgreSQL90中VACUUM进一步被加强了。

2、由于索引中完全没有版本信息,不能实现Coverage index scan,即查询只扫描索引,直接从索引中返回所需的属性,还需要访问表。而oracle与Innodb则可以;

进程模式与线程模式的对比

PostgreSQL和oracle是进程模式,MySQL是线程模式。

进程模式对多CPU利用率比较高。

进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。

线程模式对资源消耗比较少。

所以MySQL能支持远比oracle多的更多的连接。

对于PostgreSQL的来说,如果不使用连接池软件,也存在这个问题,但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。

堆表与索引组织表的的对比

Oracle支持堆表,也支持索引组织表

PostgreSQL只支持堆表,不支持索引组织表

Innodb只支持索引组织表

索引组织表的优势:

表内的数据就是按索引的方式组织,数据是有序的,如果数据都是按主键来访问,那么访问数据比较快。而堆表,按主键访问数据时,是需要先按主键索引找到数据的物理位置。

索引组织表的劣势:

索引组织表中上再加其它的索引时,其它的索引记录的数据位置不再是物理位置,而是主键值,所以对于索引组织表来说,主键的值不能太大,否则占用的空间比较大。

对于索引组织表来说,如果每次在中间插入数据,可能会导致索引分裂,索引分裂会大大降低插入的性能。所以对于使用innodb来说,我们一般最好让主键是一个无意义的序列,这样插入每次都发生在最后,以避免这个问题。

由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。

  PostgreSQL90中的特色功能:

PostgreSQL中的Hot Standby功能

也就是standby在应用日志同步时,还可以提供只读服务,这对做读写分离很有用。这个功能是oracle11g才有的功能。

PostgreSQL异步提交(Asynchronous Commit)的功能:

  这个功能oracle中也是到oracle11g R2才有的功能。因为在很多应用场景中,当宕机时是允许丢失少量数据的,这个功能在这样的场景中就特别合适。在PostgreSQL90中把synchronous_commit设置为false就打开了这个功能。需要注意的是,虽然设置为了异步提交,当主机宕机时,PostgreSQL只会丢失少量数据,异步提交并不会导致数据损坏而数据库起不来的情况。MySQL中没有听说过有这个功能。

PostgreSQL中索引的特色功能:

PostgreSQL中可以有部分索引,也就是只能表中的部分数据做索引,create index 可以带where 条件。同时PostgreSQL中的索引可以反向扫描,所以在PostgreSQL中可以不必建专门的降序索引了。

以上就是关于请教有关MySQL全部的内容,包括:请教有关MySQL、php程序员的简历、Mongodb和mysql的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10100309.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存