第6天-sql简单数据实操
2016-03-22 21:21
381 查看
为了练习数据库操作,可以使用python3随机生成一个数据表导入mysql中,具体过程如下:
进入mysql,使用
执行脚本创建数据表。
以上代码可以生成一个这样的数据表:
![](http://img.blog.csdn.net/20160322210837284)
其中有几个细节:
这里的’id’是使用index的name属性赋值的
to_csv方法写入csv文件时会将索引列一同写入,即这里的id一列
to_csv方法会将列名一同写入,使用header=false参数可以避免
注意文件路径。
使用普通用户执行以上命令时遇到问题:
提示权限不足,但是之前已经赋予此用户数此数据库的所有权限,网上搜了半天没有解决这个问题,最后直接使用了root用户导入数据。
例如id是一个主键,属性为整数,即使用以下语句创建:
若之前插入过10条数据,主键增到10。
将这10条数据删掉后,按常理主键会随之更新状态,但事实上此时1~10仍被占用,不能再用作主键,插入id为1~10的数据会失败。
当然由如上的语法可以发现,可以使用高级过滤语句从而仅从旧表中复制出部分内容。
后续的联系可以使用dump表,若损坏重新复制一个即可。
注意复制出的表将失去主键信息。
一、创建表
新建一个名为createtable.sql的脚本,内容如下:create table students ( id int unsigned not null primary key, name char(8) not null, sex char(6) not null, age tinyint unsigned not null, score tinyint unsigned not null );
进入mysql,使用
source createtable.sql;
执行脚本创建数据表。
二、pandas生成数据
import pandas as pd import numpy as np students = pd.DataFrame(columns=['name','sex','age','score'],index= np.arange(1000)); students.index.name='id' sex = np.array(['male','female']) students.sex = sex[np.random.randint(0,2,1000)] students.score = np.random.randint(0,101,1000) students.age = np.random.randint(0,101,1000) letters = list(map(chr,range(ord('a'),ord('z')+1)))#能否找到更好的方式 letters = np.array(letters) name = [] for i in range(1000): name.append(''.join(letters[np.random.randint(0,26,8)])) students.name = name students.to_csv('data.csv',header=False)
以上代码可以生成一个这样的数据表:
其中有几个细节:
这里的’id’是使用index的name属性赋值的
to_csv方法写入csv文件时会将索引列一同写入,即这里的id一列
to_csv方法会将列名一同写入,使用header=false参数可以避免
三、将csv导入mysql
使用如下语句:load data infile '/home/zeta/sql/data.csv' into table students fields terminated by ','optionally enclosed by '"' escaped by '"' lines terminated by '\n';
注意文件路径。
使用普通用户执行以上命令时遇到问题:
ERROR 1045 (28000): Access denied for user 'zeta'@'%' (using password: YES)
提示权限不足,但是之前已经赋予此用户数此数据库的所有权限,网上搜了半天没有解决这个问题,最后直接使用了root用户导入数据。
四、经验
1、auto_increment
使用auto_increment的主键在删除数据后仍会存在。例如id是一个主键,属性为整数,即使用以下语句创建:
id int unsigned not null auto_increment primary key
若之前插入过10条数据,主键增到10。
将这10条数据删掉后,按常理主键会随之更新状态,但事实上此时1~10仍被占用,不能再用作主键,插入id为1~10的数据会失败。
2、子句顺序
order by 必须是最后一个子句。3、复制表
在sql中可以直接从旧表复制出新表,例如将students复制为dump,操作为:create dump select * from students
当然由如上的语法可以发现,可以使用高级过滤语句从而仅从旧表中复制出部分内容。
后续的联系可以使用dump表,若损坏重新复制一个即可。
注意复制出的表将失去主键信息。
相关文章推荐
- SQL调优 - Hints指定索引 解决慢查询案例
- oracle 转 mysql 最新有效法(转)
- mysql 安装后报 ERROR 1045 (28000): Access denied for user 'root'@'localhost'
- 爱分享 » 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- 3.22数据库基础知识:①数据类型②基本规则③数据库基本操作,增删改库,表
- Oracle数据仓库创建教程
- Oracle数据仓库创建教程
- 如何实现在Oracle中应用存储过程调用MatLab函数(3)
- 关于oracle数据库(7)查询1
- mysql设置远程IP地址访问数据库
- MySQL数据引擎及索引介绍
- Hive官方手册学习(三)Hive数据操作语言
- mysql
- 送Vcenter数据库导出虚拟机主要信息报表
- MySQL之创建与操作数据表
- mysql多实例的配置(转)
- Oracle Day05 集合与数据处理
- Mysql 命令行快速导入数据
- mysql 删除前几天记录
- MySQL 存储过程和函数(转)