您的位置:首页 > 数据库

第6天-sql简单数据实操

2016-03-22 21:21 381 查看
为了练习数据库操作,可以使用python3随机生成一个数据表导入mysql中,具体过程如下:

一、创建表

新建一个名为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表,若损坏重新复制一个即可。

注意复制出的表将失去主键信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: