MySQL笔记

接上一篇python笔记在做爬虫项目的时候免不了使用数据库存储数据,这篇笔记同样记得比较杂乱,数据库工具有很多,我之所以选择mysql其实只因为资料多啦。

一、mysql笔记

1 简介

每个数据库database由一张张表table构成 。将数据按一定的规律存储在表格里,有利于后期的调用。一个数据库里有很多张表格,表格由行和列构成并且每一行都有一个唯一的id,称为key。

sql是一种计算机语言
mysql是以这种语言运行的程序
处理数据库还可以用许多其他的程序 mysql很优秀而且是免费的

有很多公司出售mysql服务器,提供接口就能访问数据库 利用phpmyadmin也可以随时随地访问数据库

我在学习过程中用的是 MySQL Workbench

2 开始步骤

  1. 创建一个数据库
  2. 新增用户
  3. 为数据库添加这个用户
  4. 为这个用户设置数据库访问权限
  5. 进入这个database -- 数据库
  6. 创建table -- 表格

3 SHOW语句

sql语句都是大写的,名字除外

SHOW DATABASES  
SHOW TABLES  
SHOW COLUMNS FROM table # 会显示这个表格中的所有列,会显示所有列的名称  

KEY 显示PRI 表示这一列是 主键

4 选择语句 SELECT

SELECT xxx FROM tablename;  
SELECT xxx,xx,xxx FROM tablename;   #选择指定列  
SELECT * FROM tablename;  #选择所有列  

多行语句后必须加分号

SELECT DISTINCT xxx FROM tablename #选择xxx列的不重复项 -- 每个值只出现一次

SELECT xxx FROM tablename LIMIT 5
限制最多显示结果中的五行 LIMIT 5,10 显示6到15行,从6开始显示一共10行。计算机中序列是从0开始的,所以命令中的5表示第6行。

SELECT databasename.xxx FROM table 选择全名 使用这种方法可以指定从哪个表格选择

SELECT xxx FROM table ORDER BY zzz,yyy 列出xxx,并先按照zzz的值排序,在zzz有同类项的时候按yyy排序

SELECT xxx FROM table ORDER BY zzz DESC DESC 逆向排序 -- 从大到小排序 ASC正向排序,默认排序,无需特别设置

SELECT xxx FROM table ORDER BY uuu DESC LIMIT 1 #选出uuu值最高的一个

5 过滤选择结果

  • 用WHERE语句进行过滤

SELECT xxx FROM table WHERE id !=mmm 选出id不等于mmm的项,可以>或<=,AND和OR或 ...WHERE xxx ='abc'字符串要用单引号 ...WHERE (xxx=1 OR xxx=2 )AND eee=3 出现多个逻辑关系的时候要用括号区分执行顺序

  • 用IN语句进行过滤选择结果

SELECT xxx FROM table WHERE xxx NOT IN ('a','b')

选出xxx,并且xxx的值不是a和b

6 搜索

SELECT xxx FROM table WHERE xxx LIKE 'new%' 找出xxx项中 包含有以new开头接任意字符串的项 --正则表达式


二、杂记

1. 创建列的时候要选择属性

autoincrement
auto
increment能为新插入的行赋一个唯一的整数标识符。为列赋此属性将为每个新插入的行赋值为上一次插入的ID+1。
MySQL要求将autoincrement属性用于作为主键的列。此外,每个表只允许有一个autoincrement列。

2. 导入数据,追加数据

MySQL Workbench -- server --Data Improt
直接覆盖数据库可以 Dump Structure and Data 追加 选择 Dump Data Only

3. 删除所有行

DELETE FROM table_name

4. 复制表

CREATE TABLE 新表 SELECT * FROM 旧表 例如CREATE TABLE comment_excel.comments_no_dup SELECT * FROM comment.comments

5. 重复项处理

例如:

id name value

1

a

pp

2

a

pp

3

b

iii

4

b

pp

5

b

pp

6

c

pp

7

c

pp

8

c

iii

id是主键
要求得到这样的结果 :

id name value

1

a

pp

3

b

iii

4

b

pp

6

c

pp

8

c

iii

找出中重复,项然后删除 SELECT * FROM YourTable WHERE [id] NOT IN (SELECT MAX([id]) FROM YourTable GROUP BY (name + value))

实例: SELECT * FROM comment.negative_comments WHERE id NOT IN (SELECT MAX(id) FROM comment.negative_comments GROUP BY (content) ) LIMIT 1,20000

5. 导出选择数据

使用 SELECT XXXX INTO OUTFILE 'XXXXX'语句 例如:选择26和27号两天的数据导出至桌面 SELECT * FROM allprice.price where (date = '2015-12-26')or (date = '2015-12-27') into outfile 'C:\\Users\\Administrator\\Desktop\\allprice_price2627.txt' * 注1:该文件以文本形式,非sql文件,要写入这些数据到另一个表格只需要复制粘贴行即可 * 注2:输出文件的路径写两个斜杠,消除转义符号


三、异常处理

mysql 运行出现3534错误

MySQL 服务正在启动 .  
MySQL 服务无法启动。  
服务没有报告任何错误。
请键入 NET HELPMSG 3534 以获得更多的帮助。
  1. 执行命令初始化mysql命令如下
    mysqld --initialize-insecure --user=mysql
  2. 第一次启动mysqld --console
    当看到类似下面的语句证明启动没问题: mysqld: ready for connections Version: '5.7.9' socket: '' port: 3306
  3. 添加系统服务mysqld --install

mysql 运行出现1366错误

mysql insert入库的时候,由于插入数据编码与数据库字段字符集不一致
在mysql数据库中执行show character set,可以看到不同的字符集的最大长度不同。
如果执插入utf8编码数据,数据库表中字段字符集是latin。
查询字段字符集方法:show full columns from user;
如果最大长度为3的utf8字符集存储到最大长度为1的latin数据库字段中,数据会被截断,无法正常插入,导致异常。
修改数据库的字符集编码即可解决问题

  1. 编辑mysql数据库的配置文件my.ini ,添加character-set-server=utf8
  2. 重新创建表格内的列

python输出mysql结果中文乱码

参考

  1. Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
  2. MySQL数据库charset=utf-8
  3. Python连接MySQL是加上参数 charset=utf8 有效
  4. 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)

对于非string类型, print输出的是用 _repr_() 表达后的。 因此你不能直接用它,需要遍历输出

leeway

继续阅读此作者的更多文章

comments powered by Disqus