mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法。python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/
有下载和文档。
由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码:
#
-*- encoding: gb2312 -*-
import
os, sys, string
import
MySQLdb
#
连接数据库
try
:
conn
=
MySQLdb.connect(host
=
'
localhost
'
,user
=
'
root
'
,passwd
=
'
xxxx
'
,db
=
'
test1
'
)
except
Exception, e:
print
e
sys.exit()
#
获取cursor对象来进行操作
cursor
=
conn.cursor()
#
创建表
sql
=
"
create table if not exists test1(name varchar(128) primary key, age int ......
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法。python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/
有下载和文档。
由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码:
#
-*- encoding: gb2312 -*-
import
os, sys, string
import
MySQLdb
#
连接数据库
try
:
conn
=
MySQLdb.connect(host
=
'
localhost
'
,user
=
'
root
'
,passwd
=
'
xxxx
'
,db
=
'
test1
'
)
except
Exception, e:
print
e
sys.exit()
#
获取cursor对象来进行操作
cursor
=
conn.cursor()
#
创建表
sql
=
"
create table if not exists test1(name varchar(128) primary key, age int ......
1.MySQL创建视图的简单语句为:CREATE VIEW view_name AS SELECT * from TABLE_NAME;
不能对触发器创建视图(VIEW)。但是在5.1.4中是这样描述的,A view can be created from many kinds of SELECT statements. It can refer to base tables or other views. It can use joins, UNION, and subqueries。大致意思是视图可以由大多数SELECT语句组成,可以是参考基础表或其他的视图。能使用连接,合并和子查询。
2.游标(CURSOR),游标在存储过程中的使用。
游标是一种在数据库服务器端操作结果集的方式,如果没有游标我们要对查询的结果集进行处理就要使用高级语言编程实现,这样增加了不必要的网络传输。MySQL在5.0.3支持了游标。
学习的代码如下:
DELIMITER /
/**
*1.修改表列
*1.1增加表列,1.2
*/
ALTER TABLE t ADD COLUMN ii INT;
ALTER TABLE t
/**
*2.MD5函数,现在的加密工作都交给数据库了,不用在应用中加密了。
**/
SELECT MD5('LEST');
/**
*3.视图VIEW,这样我们只要查询视图就可以看到我们要查看的数据,当然前提是我们的SELECT 语句包括了他们。
*/
CREATE OR REPLACE VIEW v_t AS SELECT i from t;
SELECT * from v_t;
DESC v_t ......
http://www.mysql.cn/
事务,参数,嵌套调用,游标,循环, 触发器,视图,约束, 索引,。。。
1. 创建实例数据库
create database db5;
use db5;
2.创建一个简单的工作表,并插入数据
create table t(s1 int);
insert into t values(5);
3.创建程序实例 create procedure Example
create procedure p1() select * from t;
SQL语句存储过程的第一部分是 create procedure
第二部分是过程名:上面新存储过程的名字是p1。
第三部分书参数列表(),第四部分是程序的主体,“select * from t”
*****什么样的MySQL语句在存储过程体中是合法的?
在存储过程体中可以包含所有的合法SQL数据库定义语言,insert,update,delete,drop,create,replace等等语句
包括(set,commit,rollback)但是,在代码中如果包含MYSQL的扩充功能,那么代码将不能移植。
4. 调用存储过程,所需要输入的就是call和你过程名以及一个括号。
&n ......
package com.qll.operate;
import java.sql.*;
public class OperateUser {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String name = "root";
String password = "123456";
static Connection conn = null;
Statement st = null;
ResultSet rs = null;
String sql = null;
public void add() {
try {
sql = "insert into tuser values(60024054,'全磊磊','男',24,'广东省深圳市')";
Class.forName(driver);
conn = DriverManager.getConnection(url, name, password);
st = conn.createStatement();
st.executeUpdate(sql);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void delete() {
try {
sql = "delete from tuser where id=60024054 ";
Class.forName(driver);
......
ERROR 1005 (HY000): Can't create table ' ****.frm' (errno: 150)
我是从以下几个方面解决了此问题:
1、确保参照的表和字段是存在的;
2、组成外键的字段要求被索引(主要是外键那个字段要求在其他表中是主键);
3、外键关联的两表或多表要求都是INNODB类型的表;
4、字段类型(说明)要一样`itemId` varchar(36) collate utf8_bin NOT NULL default '',
5、确保以上声明的句法是正确的。 ......
导出是,没有指定编码
方法一 phpmyadmin处理方式
检查php-mbstring是否有可装,没有安装上 yum -y install php-mbstring
打开phpmyadmin 中导出,再从phpmyadmin 导入是选取二制进(binary)
如果还不行,在my.cnf mysqld中加入 default-character=你的编码, 重启mysql 再试
方法二 mysqldump 处理方式
导出方式
mysqldump -u root -p --default-character-set=编码 数据名称> file.sql
例
mysqldump -u root -p --default-character-set=big5 discuss_chi> dis.sql
---------------------
导入方式
mysqldump -u root -p --default-character-set=编码 数据名称< file.sql
例
mysql -u root -p --default-character-set=binary -f discuss_chi<file.sql
也可以
mysql -u root -p --default-character-set=big5 -f discuss_chi<dis.sql
但是建议使用二进制,安全D!
方法三:
以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf
第一步:导出旧数据
mysqldump --default-character-set=lati ......