Linux 与 Windows 命令行操作 MySQL
# Linux 下基本操作 MySQL 指令:
# 登录 MySQL
mysql -uroot -p[密码]
# 显示所有数据库
show databases;
# 使用具体哪个数据库
use [database_name]
# 显示所有表
show tables;
# 操作具体表
sql> select * from ...
# 远程Linux到处MySQL数据
# 直接导出
[root@localhost ~]# mysqldump -u root -p [数据库] [表名] > result.txt
# 加筛选条件导出
[root@localhost ~]# mysqldump -u root -p [数据库] [表名] --where='[过滤条件]' > result.txt
# 输入MySQL密码后执行导出操作
# Windows 下基本操作 MySQL 指令:
# 登录 MySQL
# 数据导入本地MySQL
登录 cmd
cd [指定路径] # 可用 tab 提示
dir result.txt
mysql -u[用户名] -p[密码] # 进入数据库
use [database_name] # 选择数据库
source result.txt # 解析从数据库中导出的文件,创建数据库并插入数据
msyql 中导入大规模 sql 文件:
1. 通过命令行,通过 source 命令直接导入 sql 文件或已经导出的文件
命令格式:source "路径名"+/result.sql2. 通过编程
代码操作时,可以拼接操作 SQL 语句,可以一次性执行多条,例如 python 中使用 pymysql,伪代码如下:
conn = pymysql.connect(
host='localhost',
user='root',
passwd='*****',
db='database',
port=3306,
charset='utf8'
)
# 设置自动提交
conn.autocommit(1)
# 获得游标
cur = conn.cursor()
# 构建 SQL 语句
query = 'insert into table (id, name, age) values (%s, %s, %s)'
# 存储所有 values
list = []
# 遍历操作所有数据
for i in range():
values = (form_data, created_time, visitor_id)
# 一次执行单条数据操作
# cur.execute(query, values)
# 优化后,一次执行多条数据操作
list.append(values)
num += 1
if num >= 10000:
# 一次性执行10000条数据
cur.executemany(query, list)
num = 0 # num 计数清零
list.clear() # list 清空
问题集锦:
一、Data truncated for column xxx
可能原因:
1. 对应字段在数据库表格设计中设置的长度为0,导致无法加入数据,显示为空;
2. 字符串格式与数据库表格设置中字段的格式不匹配;
二、pymysql 操作数据库数据插入失败,查询结果为空
结果:数据插入提示完成,SQL 语句正常,但是数据库查询结果为空。
原因:pymysql 在连接数据库的时默认参数 autocommit = False,代表执行 SQL 后是否自动提交到数据库。如果采用默认设置,则执行 sql 后需要显式提交,即 conn.commit(),自动提交对于 innodb 引擎很重要,没有这个设置,innodb 引擎就不会真正执行语句,故查询结果为空。
解决方法:
1. 在 SQL 语句最后附加 commit 提交;
2. 在关闭数据库连接前,显示提交 SQL,conn.commit();
3. 在数据建立连接后,设置提交为自动提交,conn.autocommit(1) ;