基本命令行操作 MySQL 与操作大规模 SQL 文件

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) ;

 

你可能感兴趣的:(数据库)