第6天-sql简单数据实操

来源:互联网 发布:jquery怎么渲染数据 编辑:程序博客网 时间:2024/06/05 10:46

为了练习数据库操作,可以使用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 pdimport numpy as npstudents = 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 = namestudents.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表,若损坏重新复制一个即可。

注意复制出的表将失去主键信息。

0 0
原创粉丝点击