【Python之路】第十八篇--MySQL(一)

【Python之路】第十八篇--MySQL(一)

一、概述

1、什么是数据库

 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库

2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等

答:他们均是一个软件,都有两个主要的功能:

  • a. 将数据保存到文件或内存
  • b. 接收特定的命令,然后对文件进行相应的操作

    PS:如果有了以上软件,无须自己再去创建文件和文件夹,而是直接传递
    命令
    给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System)

3、什么是SQL ?

答:MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点:

  • MySQL是一种数据库管理系统。
  • MySQL是一种关联数据库管理系统。
  • MySQL软件是一种开放源码软件。
  • MySQL数据库服务器具有快速、可靠和易于使用的特点。
  • MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。
  • 有大量可用的共享MySQL软件。

二、下载安装

想要使用MySQL来存储并操作数据,则需要做几件事情:

  a. 安装MySQL服务端

  b. 安装MySQL客户端

  b. 【客户端】连接【服务端】

  c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)


1

2

3

4

5


下载

http://dev.mysql.com/downloads/mysql/

安装

Linux:

yum install mysql-server

Window版本  (安装版)

1、下载


1

2

3


MySQL Community Server 5.7.16

http://dev.mysql.com/downloads/mysql/

2、解压

如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64

3、初始化

MySQL解压后的 bin 目录下有一大堆的可执行文件,执行如下命令初始化数据:


1

2

3


cd c:\mysql-5.7.16-winx64\bin

mysqld --initialize-insecure

4、启动MySQL服务

执行命令从而启动MySQL服务


1

2

3

4

5


# 进入可执行文件目录

cd c:\mysql-5.7.16-winx64\bin

# 启动MySQL服务

mysqld

5、启动MySQL客户端并连接MySQL服务

由于初始化时使用的【mysqld --initialize-insecure】命令,其默认未给root账户设置密码


1

2

3

4

5

6

7


# 进入可执行文件目录

cd c:\mysql-5.7.16-winx64\bin

# 连接MySQL服务器

mysql -u root -p

# 提示请输入密码,直接回车

输入回车,见下图表示安装成功:

到此为止,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。

但是,在4、5步骤中重复的进入可执行文件目录比较繁琐,如想日后操作简便,可以做如下操作。

a. 添加环境变量

将MySQL可执行文件添加到环境变量中,从而执行执行命令即可

+

如此一来,以后再启动服务并连接时,仅需:

+

b. 将MySQL服务制作成windows服务

上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:

+

注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:


1

2

3

4

5


# 启动MySQL服务

net start mysql

# 关闭MySQL服务

net stop mysql

window版  (免安装版)

1.下载免安装版本:  (帐号:root 默认没有密码 )


1


http://download.csdn.net/detail/whzhaochao/9183163

2.解压到任意目录:

3.修改配置文件 my.ini   注意路径填写\

[mysqld]

# 端口号

port=3307

# 设置mysql的安装目录

basedir="F:\\...\\MySQL Server 5.5 - 3307"

# 设置mysql数据库的数据的存放目录,必须是data,或者是\\xxx-data

datadir="F:\\...\\MySQL Server 5.5 - 3307\\data"

# 设置mysql服务器的字符集,默认编码

default-character-set=utf8

[client]

# 设置mysql客户端的字符集

default-character-set=utf8

[WinMySQLAdmin]

# 指定mysql服务启动启动的文件

Server=F:\\...\\MySQL Server 5.5 - 3307\\bin\\mysqld.exe

user=root

注:如果出现错误 error: Found option without preceding group in config file:....

上述文件保存为AscII格式,否则不需要修改!!

--------------------------------------------------------

Linux版本

安装:


1


yum install mysql-server  

服务端启动


1


mysql.server start

客户端连接


1

2

3

4

5

6

7


连接:

mysql -h host -u user -p

常见错误:

ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.

退出:

QUIT 或者 Control+D

三、数据库操作

1、显示数据库


1


show databases;

默认数据库:

  mysql - 用户权限相关数据

  test - 用于用户测试数据

  information_schema - MySQL本身架构相关数据

2、创建数据库


1

2

3

4

5


# utf-8

CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

# gbk

CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

3、使用数据库


1


use db_name;

显示当前使用的数据库中所有表:


1


show tables;

4、用户管理


1

2

3

4

5

6

7

8

9

10


创建用户

create user ‘用户名‘@‘IP地址‘ identified by ‘密码‘;

删除用户

drop user ‘用户名‘@‘IP地址‘;

修改用户

rename user ‘用户名‘@‘IP地址‘; to ‘新用户名‘@‘IP地址‘;;

修改密码

set password for ‘用户名‘@‘IP地址‘ = Password(‘新密码‘)

PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

5、授权管理


1

2

3


how grants for ‘用户‘@‘IP地址‘                  -- 查看权限

grant  权限 on 数据库.表 to   ‘用户‘@‘IP地址‘      -- 授权

revoke 权限 on 数据库.表 from ‘用户‘@‘IP地址‘      -- 取消权限

对于权限:

 

对于数据库:

对于目标数据库以及内部其他:

数据库名.* 数据库中的所有

数据库名.表 指定数据库中的某张表

数据库名.存储过程 指定数据库中的存储过程

*.* 所有数据库

对于用户和ip地址

用户名@IP地址 用户只能在改IP下才能访问

用户名@192.168.1.% 用户只能在改IP段下才能访问(通配符%表示任意)

用户名@% 用户可以再任意IP下访问(默认IP地址为%)

实例:

grant
all
privileges
on db1.tb1 TO
‘用户名‘@‘IP‘

grant
select
on db1.*
TO
‘用户名‘@‘IP‘

grant
select,insert
on
*.*
TO
‘用户名‘@‘IP‘

revoke
select
on db1.tb1 from
‘用户名‘@‘IP‘

特殊的:


1


flush privileges,将数据读取到内存中,从而实现不重启即可生效。

四、数据表基本

1、创建表


1

2

3

4


create table 表名(

列名  类型  是否可以为空,

列名  类型  是否可以为空

)ENGINE=InnoDB DEFAULT CHARSET=utf8

是否可以为空:

是否可空,null表示空,非字符串

not
null
- 不可空

null
- 可空

默认值:

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create
table tb1(

nid int
not
null defalut 2,

num int
not
null

)

自增:

自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

  create
table tb1(

    nid int
not
null auto_increment primary
key,

    num int
null

  )

  或

  reate
table tb1(

    nid int
not
null auto_increment,

    num int
null,

    index(nid)

  )

  注意:1、对于自增列,必须是索引(含主键)。

     2、对于自增可以设置步长和起始值

      show session variables like
‘auto_inc%‘;

      set session auto_increment_increment=2;

      set session auto_increment_offset=10;

      shwo global variables like
‘auto_inc%‘;

      set global auto_increment_increment=2;

      set global auto_increment_offset=10;

主键:

主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

  create
table tb1(

    nid int
not
null auto_increment primary
key,

    num int
null

  )

  或

  create
table tb1(

    nid int
not
null,

    num int
not
null,

    primary
key(nid,num)

  )

外键:

外键,一个特殊的索引,只能是指定内容

  creat table color(

    nid int
not
null
primary
key,

    name char(16) not
null

  )

  create
table fruit(

    nid int
not
null
primary
key,

    smt char(32) null ,

    color_id int
not
null,

    constraint fk_cc foreign
key (color_id) references color(nid)

)

2、删除表


1


drop table 表名

3、清空表


1

2


delete from 表名

truncate table 表名   索引值重置,

4、修改表


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


添加列:alter table 表名 add 列名 类型

删除列:alter table 表名 drop column 列名

修改列:

alter table 表名 modify column 列名 类型;  -- 类型

alter table 表名 change 原列名 新列名 类型; -- 列名,类型

添加主键:

alter table 表名 add primary key(列名);

删除主键:

alter table 表名 drop primary key;

alter table 表名  modify  列名 int, drop primary key;

添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);

删除外键:alter table 表名 drop foreign key 外键名称

修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

5、基本数据类型

MySQL的数据类型大致分为:数值、时间和字符串

 

二进制数据:TinyBlob、Blob、MediumBlob、LongBlob

更多参考:

  • http://www.runoob.com/mysql/mysql-data-types.html
  • http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html

五、表内容操作

1、增


1

2

3


insert into 表 (列名,列名...) values (值,值,值...)

insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)

insert into 表 (列名,列名...) select (列名,列名...) from 表

2、删


1

2


delete from 表

delete from 表 where id=1 and name=‘alex‘

3、改


1


update 表 set name = ‘alex‘ where id>1

4、查


1

2

3


select * from 表       (少用* 效率低!)

select * from 表 where id > 1

select nid,name,gender as xxoo from 表 where id > 1    ( as 设置别名为xxoo )

5、其他


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69


a、条件

select * from 表 where id > 1 and name != ‘alex‘ and num = 12;

select * from 表 where id between 5 and 16;

select * from 表 where id in (11,22,33)

select * from 表 where id not in (11,22,33)

select * from 表 where id in (select nid from 表)

b、通配符

select * from 表 where name like ‘ale%‘  - ale开头的所有(多个字符串)

select * from 表 where name like ‘%alex%‘  - 中间含有alex的

select * from 表 where name like ‘ale_‘  - ale开头的所有(一个字符)

c、限制

select * from 表 limit 5;            - 前5行

select * from 表 limit 4,3;          - 从第4行开始,后面取3行数据

select * from 表 limit 3 offset 4    - 同上

d、排序

select * from 表 order by 列 asc              - 根据 "列" 从小到大排列

select * from 表 order by 列 desc             - 根据 "列" 从大到小排列

select * from 表 order by 列1 desc,列2 asc    - 根据 "列1" 从大到小排列,如果相同则按列2从小到大排序

e、分组

select department,count(department) from user group by department

select num,nid from 表 group by num,nid

select num,nid from 表  where nid > 10 group by num,nid order nid desc

select max(nid),min(nid),sum(nid),avg(nid),department,count(department) from user group by department

聚合条件下做判断    想利用group by计算出的结果进行筛选!!!

select max(nid),sum(nid),department,count(department) from user group by department having sum(nid) > 10

特别的:group by 必须在where之后,order by之前

f、连表

无对应关系则不显示

select A.num, A.name, B.name

from A,B

Where A.nid = B.nid

无对应关系则不显示

select A.num, A.name, B.name

from A inner join B

on A.nid = B.nid

A表所有显示,如果B中无对应关系,则值为null

select A.num, A.name, B.name

from A left join B

on A.nid = B.nid

B表所有显示,如果B中无对应关系,则值为null

select A.num, A.name, B.name

from A right join B

on A.nid = B.nid

g、组合

组合,自动处理重合   默认去除重复数据!!!

select nickname

from A

union

select name

from B

组合,不处理重合

select nickname

from A

union all

select name

from B

时间: 2024-10-29 19:07:44

【Python之路】第十八篇--MySQL(一)的相关文章

Python之路(第十八篇)shutil 模块、zipfile模块、configparser模块

一.shutil 模块 1.shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中,需要打开文件 import shutil shutil.copyfileobj(open("old_test.txt","r"),open("new_test.txt","w")) 输出结果 2.shutil.copyfile(src,dst) 复制文件内容到另外一个文件,不需要打开文件,

Python开发【第十八篇】:MySQL(二)

Python开发[第十八篇]:MySQL(二) 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 临时表搜索 1.创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh

Python之路【第八篇】:Python基础(24)——面向对象进阶

参考连接: Python 面向对象(初级篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象(进阶篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象及相关 http://www.cnblogs.com/wupeiqi/articles/5017742.html 面向对象进阶: 类成员之字段.方法.属性: 类成员修饰符: 类成员之特殊成员 1.类方法 普通的方法

Python之路【第八篇】:堡垒机实例以及数据库操作(paramiko)

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

Python之路【第八篇】python实现线程池

线程池概念 什么是线程池?诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务.但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大.所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这样就引入了“池”的概念,“池”的概念使得人们可以定制一定量的资源,然后对这些资源

Python之路(第十四篇)os模块

一.os模块 1.os.getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) import os print(os.getcwd()) 2.os.chdir(path) 改变当前工作目录,os.chdir()参数为路径 import os print(os.getcwd()) print(os.chdir(r"d:\python\exercise\test_package\a")) print(os.getcwd()) 输出结果 D:\06python\exe

Python之路(第二十六篇) 面向对象进阶:内置方法

一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常) class Foo: ? def __init__(self,x): self.x = x ? def __getattr__(self, item): print("执行__getattr__") ?

Python之路(十八):进程,线程,协程

python基础之进程.线程.协程 引子 进程 线程(优先阅读) 协程 进程 概念:就是一个程序在一个数据集上的一次动态执行过程(本质上来讲,就是运行中的程序(代指运行过程),程序不运行就不是进程)    抽象概念 组成:  1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成  2.数据集:数据集则是程序在执行过程中所需要使用的资源  3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 阐释:进程