欢迎光临
我们一起进阶

python数据库基础-MySQL(二)

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章
MYSQ数据库的安装使用
Linux/UNIX上安装Mysql

Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址:

MySQL – MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
MySQL-client – MySQL 客户端程序,用于连接并操作Mysql服务器。
MySQL-devel – 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
MySQL-shared – 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench – MySQL数据库服务器的基准和性能测试工具。

以下安装Mysql RMP的实例是在SuSE Linux系统上进行,当然该安装步骤也适合应用于其他支持RPM的Linux系统,如:Centos。

安装步骤如下:

Linux
  • 安装
    CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。

1.卸载
集成的MySQL 经常有问题,所以最好是卸载重新安装

rpm -qa|grep -i mysql
//查看所有相关mysql的文件

用命令 yum -y remove

yum -y remove mysql-community-client-5.6.38-2.el7.x86_64
卸载不掉的用 rpm -ev
依次卸载 直到没有

2.下载mysql的repo源

cd /usr/local/src/

wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
//下载

rpm -ivh mysql57-community-release-el7-8.noarch.rpm
//升级

3.安装

yum -y install mysql-server

根据提示安装就可以了,不过安装完成后没有密码,需要重置密码

4.重置mysql密码

mysql -u root
登录时有可能报这样的错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:
$ sudo chown -R root:root /var/lib/mysql

重启mysql服务

$ service mysqld restart

接下来登录重置密码:

$ mysql -u root //直接回车进入mysql控制台
mysql > use mysql;

mysql > update user set password=password(‘123456′) where user=’root’;
//如果这里提示ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’ 下面忘记密码有提示怎么操作

mysql > exit;

如果以上操作无法生效,请使用下面忘记mysql密码中的方式。

  • 忘记mysql密码
1、修改MySQL的登录设置:
[root@localhost ~]#vim /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
例如:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
保存并且退出vi。

2、重新启动mysqld 
[root@localhost ~]#service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

3、登录并修改MySQL的root密码 
[root@localhost ~]# mysql 

mysql> USE mysql ; 

mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; 
##如果这里提示ERROR 1054 (42S22): Unknown column 'password' in 'field list'    输入:mysql> describe user;  来查看输出内容下方是否有authentication_string内容,如果有的话就使用下面的命令修改密码:
#mysql> update user set authentication_string=password('123456') where user='root';

mysql> flush privileges ; 

mysql> quit

4、将MySQL的登录设置修改回来
[root@localhost ~]# vim /etc/my.cnf
将刚才在[mysqld]的段中加上的skip-grant-tables删除
保存并且退出vim

5、重新启动mysqld 
[root@localhost ~]# service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
  • 删除mysql

首先查询安装包:

rpm -qa|grep mysql

查询到的一个结果为:mysql-community-libs-5.7.13-1.el6.x86_64

yum 删除

yum -y remove mysql-community-libs-5.7.13-1.el6.x86_64

rpm 删除(仅用 "-e" 判断依赖)

rpm -e mysql-community-libs-5.7.13-1.el6.x86_64
Window上安装Mysql
Window上安装Mysql相对来说会较为简单,你只需要载 MySQL 下载中下载window版本的mysql安装包,并解压安装包。

双击 setup.exe 文件,接下来你只需要安装默认的配置点击"next"即可,默认情况下安装信息会在C:\mysql目录中。

接下来你可以通过"开始" =》在搜索框中输入 " cmd" 命令 =》 在命令提示符上切换到 C:\mysql\bin 目录,并输入一下命令:

mysqld.exe --console

如果安装成功以上命令将输出一些mysql启动及InnoDB信息。

进入mysql并查看
如果登录时出现如下错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
需要通过  alter  user 'root'@'localhost' identified by '111111';  重新设置密码。

但是又可能出现:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 
这说明密码复杂度不够,需要大写、小写、数字、特殊字符
mysql> alter  user 'root'@'localhost' identified by 'QWE!@#qwe123';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

[root@localhost ~]# mysql -uroot -p123qwe

#显示数据库列表
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
#当前有3个数据库

'''
【INFORMATION_SCHEMA 数据库】 是MySQL自带的,它提供了访问数据库 元数据 的方式。什么是 元数据 呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
在MySQL中,把【INFORMATION_SCHEMA】 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
在 【INFORMATION_SCHEMA 】中,有数个 只读 表。它们实际上是 视图 ,而不是基本表,因此,你将无法看到与之相关的任何文件。
'''

'''
【mysql数据库】
mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
'''

'''
【PERFORMANCE_SCHEMA数据库】
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
'''

#进入数据库并显示库中的数据表
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
28 rows in set (0.00 sec)

mysql> desc user;

查看表结构如下:
Field相当于excel中第一行的标题
Type是数据的类型(数字、字符串等等。。。)
char表示字符串,括号中的数字表示定义这个字符串的长度
enum表示枚举
Null表示是否可以为空;NO的话就是必须要赋值,不能为空
Key中的PRI表示 primary key(主键),之前说过主键代表唯一的值(相当于×××)。
default 表示可以填写默认值
extra 可以填写额外的内容,没有要求

select * from user;

查看表内容:
内容较多,显示的比较乱

select * from user\G;

查看表内容,通过\G来整理内容的显示格式,以竖着的方式来显示。

设置linux系统启动时 启动mysql

/etc/init.d/mysqld start

需要将mysqld二进制文件添加到/etc/init.d/目录中

查看mysql进程

查看所有进程

ps -ef

查看mysql进程

ps -ef | grep mysql

创建新mysql账号

之前通过desc user; 看到过user中的字段,其中就有User字段,这里包含了当前已有的账号。

mysql> select User from user;
image_1ch2hvsci1fur190b1uffci118lh2d.png-6.7kB

当前的用户只有root
下面是mysql的常用增删改查命令:
SELECT查找
INSERT插入
UPDATE修改
DELETE删除
CREATE创建
DROP删除
#授予查找与插入权限
mysql> grant select,insert

#创建账号授予全部权限
grant all on test.* to 'aubrey'@'%' identified by '123qwe';
'''授予aubrey全部权限访问test这个数据库;
@表示指定访问源,%表示所有,也就是指定所有源都可以访问。
访问的密码为:123qwe。'''

Query OK:表示查询,因为这里并没有进行查询,所有没有异常,就是OK。
0 rows affected:因为是新建,没有插入,所以显示有0行收到影响。

select * from user\G

查看user字段的内容,可以看到有关user:aubrey的账户信息;
不过这里权限都为N

show grants for aubrey;

查看账号信息

我们通过新账号进入mysql,但是提示被localhost拒绝,%虽然是可以指定访问源,但不包括localhost。

指定访问源为localhost

]

指定localhost后可以访问mysql了。

在root下是可以看到3个的,这里当前只能看到information_schema 是默认就可以看到的,但是这里没有看到test数据库,是因为还没有建立test数据库

#创建test数据库 
create database test;
'''
我们在xshell中回到root登录的mysql来创建test数据库。
'''

回到aubrey用户登录的mysql,再次查看,就可以看到test数据库了。

使用test数据库,并查看表项,表项为空。
/etc/my.cnf 文件配置

一般情况下,你不需要修改该配置文件,该文件默认配置如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
管理MySQL的命令

以下列出了使用Mysql数据库过程中常用的命令:

USE 数据库名 :选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。

SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表。

SHOW TABLES: #显示指定数据库的所有表,使用该命令前需要使用 use命令来选择要操作的数据库。

SHOW COLUMNS FROM 数据表: #显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

create database testdb charset "utf8"; #创建一个叫testdb的数据库,且让其支持中文 

drop database testdb; #删除数据库

SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

与desc user;一样

show create database test;

DEFAULT CHARACTER SET latin1表示默认字符集为拉丁语系,只支持英文,所以默认mysql只支持英文的。
但是修改语系,必须在创建数据库的时候指定,所以下面需要先删掉数据库。(注意:现实环境中不要随意删除数据库,因为里面的数据也会被删掉)

create database test charset utf8;

这次在show就可以看到是utf8,这样以后test数据库中的表就可以写中文数据了。

#MySQL数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

常用的是INT、SMALLINT、FLOAT

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

TINYBLOB可以存二进制,图片也可以通过二进制来存储,不过一般不会再数据库中存储图片,通常是存储图片的连接。

MySQL中char、varchar和text的区别

它们的存储方式和数据的检索方式都不一样。
数据的检索效率是:char > varchar > text
空间占用方面,就要具体情况具体分析了。

char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。
varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。

总结起来,有几点:

经常变化的字段用varchar
知道固定长度的用char
尽量用varchar
超过255字符的只能用varchar或者text
能用varchar的地方不用text
赞(0) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏