mysql数据库管理及增删改查

目录

1、数据库管理

1.1、数据库表的文件

1.1.1、MYD”文件:

1.1.2、“.MYI”文件

1.2、日志:

1.3、mysql 数据库管理

1.3.1、数据库管理命令

1.3.2、数据库列的类型

2、SQL语句

2.1、DDL:数据定义语言,用于创建数据库对象,如库、表、索引等

2.1.1、创建新的数据库

2.1.2、 创建新的表

2.1.3、 查看创建之后表的结构

2.1.4、使用DDL语句删除库、表

2.2、DML:据操纵语言,用于对表中的数据进行管理

2.2.1、添加新数据

2.2.2、 查看表的数据:

2.2.3、 修改、更新数据表中的数据记录

2.3、DQL:

2.3.1、查询数据库信息

2.3.2、 查看数据库中的数据表信息

 2.3.3、显示数据表的结构(字段)

2.4、数据库表高级操作

2.4.1、表的清空、临时创建、克隆

2.4.1.1、清空列表

2.4.1. 2、临时表

2.4.1.3、克隆表

2.4.2数据库用户管理

2.4.2.1、新建用户

2.4.2.2、.查询创建的用户信息并且做增删改

2.4.2.3、 忘记用户的密码:

2.4.2.4、数据库用户授权

2.4.2.5权限撤销与刷新

2.5、DCL:数据控制语言,用于设置或者更改数据库用户或角色权限

2.5.1、设置用户权限

2.5.2、查看用户的权限

2.5.3、撤销用户的权限

3、问题:遇到root密码忘了怎么办?

3.1、 在 my.ini 或 my.cnf 的 [mysqld] 下添加 skip-grant-tables

3. 2、重启mysql数据库

3.3、登录数据库

3.4、 修改root密码

3.5、 修改mysql免密码登录配置 然后重启服务

3.6、重启mysql数据库

3. 7、mysql数据库验证


1、数据库管理

数据库文件所在:/usr/local/mysql/data/mysql

每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为“.frm”、“.MYD”和“.MYI”。

1.1、数据库表的文件

1.1.1、MYD”文件:

是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。

1.1.2、“.MYI”文件

也是专属于 MyISAM 存储引擎的,主要存放 MyISAM 表的索引相关信息。对于 MyISAM 存储来说,可以被 cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM 表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。

MyISAM 存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件 (frm,myd,myi)。 每个表都有且仅有这样三个文件做为 MyISAM 存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI 文件中。

1.2、日志:

1mysql 与 oracle 日志有所区别

mysql

数据库日志文件用于备份,恢复,是最 核心的部分,写一条数据,同步到日志中一条

oracle :

重做日志组,一个组中至少3个日志成员,轮流存储日志 还会有另一个组与之同步/备份

1.3、mysql 数据库管理

1.3.1、数据库管理命令

describe user;查看user变得结构

Field:字段名称

Type:数据类型

Null :是否允许为空

Key :主键

Type:数据类型

Null :是否允许为空

key :主键

Default :默认值

Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2

id:1 3 5 7

1.3.2、数据库列的类型

int:整型 用于定义整数类型的数据

float:单精度浮点4字节32位 准确表示到小数点后六位

double:双精度浮点8字节64位

char:固定长度的字符类型 用于定义字符类型数据。

          Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错

varchar:可变长度的字符类型

text:文本

image:图片

decimal(5,2):5个有效长度数字,小数点后面有2位 指定长度数组

主键是唯一的,但主键可以由多个字段构成

2、SQL语句

是Structured Query Language的缩写,即结构化查询语言 是关系型数据库的标准语言 用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能

分类

●DDL:数据定义语言 Data Definition Language

●DML:数据操纵语言 Data Manipulation Language

●DQL:数据查询语言 Data Query Language

●DCL:数据控制语言 Data Control Language

2.1、DDL:数据定义语言,用于创建数据库对象,如库、表、索引等

2.1.1、创建新的数据库

格式:

创建数据库:CREATE DATABASE 数据库名

创建数据表:CREATE TABLE 表名 (字段定义……)

CREATE DATABASE 数据库名;

mysql> create database bdqn;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;

mysql数据库管理及增删改查_第1张图片

2.1.2、 创建新的表

格式:

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,...);

主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

例如:

CREATE TABLE zzz (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'', PRIMARY KEY (id));

释义:

#NOT NULL 不允许为空值

#DEFAULT'' 默认值为空

PRIMARY KEY :主键一般选择没有重复并且不为空值的字段

注意:创建表需要在数据库的其中一个目录中创建,不指定数据库创建的话,否则会报错

 创建表

mysql> use bdqn;
Database changed
mysql> create table q1 (id int NOT NULL,name char(20) NOT NULL,score decimal(5,2),passwd char(50) default'',PRIMARY KEY(id));
Query OK, 0 rows affected (0.02 sec)

 mysql数据库管理及增删改查_第2张图片

2.1.3、 查看创建之后表的结构

mysql> desc q1;

mysql数据库管理及增删改查_第3张图片

2.1.4、使用DDL语句删除库、表

 删除表

mysql> drop tables q1

mysql数据库管理及增删改查_第4张图片

删除指定的数据库

DROP DATABASE 数据库名
mysql> drop database auth;
Query OK, 0 rows affected (0.00 sec)

2.2、DML:据操纵语言,用于对表中的数据进行管理

数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数

insert :插入数据

update :更新数据

delete  : 删除数据

2.2.1、添加新数据

格式:

INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);

insert into users(user_name,user_passwd) values('zhangsan', password('123456'));     ###标准使用方法
insert into users values('lisi', password('123456')); ###如果这条记录包含表中所有字段的值,则插入语句中的制定字段可以省略

示例:

INSERT INTO zzz (id,name,score,passwd) values(1,'zhangsan',70.5,PASSWORD('123456')); #PASSWORD('123456'):查询数据记录时,密码字串以加密形式显示:若不使用PASSWORD(),查询时以明文显示。

mysql> insert into q1(id,name,score,passwd)values(2,'po',82.5,password('123456'));

mysql数据库管理及增删改查_第5张图片

2.2.2、 查看表的数据:

mysql> SELECT * FROM q1;

mysql数据库管理及增删改查_第6张图片

2.2.3、 修改、更新数据表中的数据记录

格式:

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

mysql> update q1 set passwd=password('123456') where name='xo';

mysql数据库管理及增删改查_第7张图片

 修改表名

mysql> show tables;
+--------------+
| Tables_in_da |
+--------------+
| users        |
+--------------+
1 row in set (0.00 sec)

mysql>  alter table users rename ky30;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+--------------+
| Tables_in_da |
+--------------+
| ky30         |
+--------------+

表中 添加字段

alter table ky30 add address varchar(40) default"地址不详'

 #default地址不详': 表示此字段设置默认值为地址不详,可与NOT NULL配合使用

ALTER TABLE yyy ADD address varchar(50) NOT NULL default,地址不详';

 mysql数据库管理及增删改查_第8张图片

 mysql数据库管理及增删改查_第9张图片

 修改字段(列)名,添加唯一键

例如:ALTER TABLE 表名 CHANGE 目列名 新列名 数据类型 [unique kevl;

 unique key:唯一键(特性:唯一,但可以为空,空值只允许出现一次)

Primary key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值 (NULL),一个表只能有一个主键。)

 修改root密码

update mysql.user set authentication_string=PASSWORD('abc123') where User='root';   ####mysql5.7版本修改root的命令

 明文往表中添加数据

mysql> insert into q1 values(3,'x1',97.5,'123456');

mysql数据库管理及增删改查_第10张图片

 

 delete  删除数据

条件删除

delete from 表名 where 条件表达根据需求要删除的哪条记录

 

2.3、DQL:

数据查询语言,用于从数据表中查找符合条件的数据记录

DQL是数据查询语句,只有SELECT,用于从数据表中查找符合条件的数据记录,

数据库中查询时可不指定条件,

2.3.1、查询数据库信息

mysql> show databases;                   #####查看数据库列表信息
+--------------------+

2.3.2、 查看数据库中的数据表信息

格式:

USE 数据库名

SHOW TABLES

mysql> use mysql;                              ####切到mysql 这个库,      解释:拿这本书
mysql> show tables;                           ####查看着个库中有哪些表   解释:看下这本书目录结构
+---------------------------+

 2.3.3、显示数据表的结构(字段)

 格式:

DESCRIBE [数据库名.]表名

mysql> use mysql               ####切到mysql 这个库,      解释:拿这本书
Database changed
mysql> describe user;         ####查看着个user表的结构
select user_name,user_passwd from auth.users where user_name='lisi';

 mysql数据库管理及增删改查_第11张图片

2.3.4、查询显示数据行数:

select * from limit 2   显示 头两行

select * from limit 2,3 显示 头两行后面的三行

mysql数据库管理及增删改查_第12张图片

 

 查询信息,生产中不能用下面的命令进行查询:

select * from users;

 

 

2.4、数据库表高级操作

2.4.1、表的清空、临时创建、克隆

关于数据库表的一些基础操作,比如:创建表、删除表、表的 查询等等。数据表在数据库的使用过程中, 有着很高的使用频率,所以本节会讲解些关于 表的升级用法,包括清空表、使用临时表和克隆表。

2.4.1.1、清空列表

请列表的方法:

方法一:
delete from yyy3;

#DELETE清空表后,返回的结果内有删除的记录条目;DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE EROM 删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。

方法二:
truncate table test01:

#TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后,ID会从1开始重新记录

创建库(表),添加数据】删除数据

 例如:

create table ky (user_name CHAR(16) NOT NULL, user_passwd CHAR(48) DEFAULT '', level CHAR(16) NOT NULL, PRIMARY KEY (user_name));
insert into ky values('lisi', password('123456'),'10');
insert into ky  values('lisi1', password('123456'),'45');
insert into ky  values('lisi2', password('123456'),'46');
insert into ky  values('lisi3', password('123456'),'47');
insert into ky  values('lisi4', password('123456'),'48');
insert into ky  values('lisi5', password('123456'),'49');
insert into ky  values('lisi6', password('123456'),'50');
insert into ky  values('lisi7', password('123456'),'1');


mysql> show tables;
+----------------+
| Tables_in_auth |
+----------------+
| ky             |
| ky05           |
| tmp            |
| tmp1           |
| tmp3           |
| users          |
+----------------+
6 rows in set (0.00 sec)

mysql> select * from ky;
+-----------+-------------------------------------------+-------+
| user_name | user_passwd                               | level |
+-----------+-------------------------------------------+-------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10    |
| lisi1     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 45    |
| lisi2     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 46    |
| lisi3     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 47    |
| lisi4     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 48    |
| lisi5     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 49    |
| lisi6     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 50    |
| lisi7     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1     |
+-----------+-------------------------------------------+-------+
8 rows in set (0.00 sec)

mysql> delete from ky where level >=45;
Query OK, 6 rows affected (0.00 sec)

mysql> select * from ky;
+-----------+-------------------------------------------+-------+
| user_name | user_passwd                               | level |
+-----------+-------------------------------------------+-------+
| lisi      | *6BB4837EB743

 创建库(表)

create table ky (user_name CHAR(16) NOT NULL, user_passwd CHAR(48) DEFAULT '', level CHAR(16) NOT NULL, PRIMARY KEY (user_name));

添加数据

insert into ky values('lisi', password('123456'),'10');
insert into ky  values('lisi1', password('123456'),'45');
insert into ky  values('lisi2', password('123456'),'46');
insert into ky  values('lisi3', password('123456'),'47');
insert into ky  values('lisi4', password('123456'),'48');
insert into ky  values('lisi5', password('123456'),'49');
insert into ky  values('lisi6', password('123456'),'50');
insert into ky  values('lisi7', password('123456'),'1');.

 查看创建的表

show tables;

 查看表中的数据

mysql> select * from ky;

 根据条件来清除数据

 delete from ky where level >=45;

2.4.1. 2、临时表

临时建立的表,用于保存一些临时数据,不会长期存在,

MySQL 的临时表,顾名思义,就是临时建立的表,并不会长期存在,主要用于保存一 些临时数据。临时表有个特性,
就是只在当前连接可见,当前连接下可执行增删改查等操作, 当连接被关闭后,临时表就会被 MySQL 删除,相关的资源也会被释放。 
下面创建临时表 mytmp,然后插入数据,之后断开当前连接,最后重新连到 MySQL 查看临时是否还存在,具体操作如下

mysql>CREATE TEMPORARY TABLE `mytmp` (`id` int(10) NOT NULL AUTO_INCREMENT,`NAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`level` int(10) NOT NULL,PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into mytmp(name,level) values('aa',10);

select * from mytmp;

退出数据库

mysql -uroot -p

mysql> use auth;
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> select * from mytmp;
ERROR 1146 (42S02): Table 'auth.mytmp' doesn't exist

2.4.1.3、克隆表

 在 MySQL 的开发和维护过程中,会有原样拷贝某个数据表的需求。怎么样才能够快速、 完整的拷贝数据表呢? 先来看一下 CREATE TABLE new_tablename AS SELECT 这个语 句,

克隆ky的结构

第一种 先复制 表结构 再备份内容

create table 新表名 like 旧表名 复制格式     #通过like 方法 复制旧表名的表结构生成新的表名的结构

insert into 新表名 select * from 旧表名 备份内容 

第二种 直接复制

create table 新表名 (select * from 日表名) 复制旧表 数据到新表中

create table test like ky;

 mysql数据库管理及增删改查_第13张图片


mysql> create table test like ky;

mysql> select * from test;

mysql> insert into test select * from ky;

 mysql数据库管理及增删改查_第14张图片

2.4.2数据库用户管理

2.4.2.1、新建用户
create user '用户名'@'来源地址' 设置用户密码 identified by '密码'(PASSWORD'密码');
来源地址:主机名、IP地址、网段、所有
%  通配符
密码:     可以使用select PASSWORD('密码') 来设置我们用户的密文密码
2.4.2.2、.查询创建的用户信息并且做增删改

mysql 创建的用户 mysql数据库下面的userb

查询select user
删除用户 drop
修改用户密码 set password = password ('密码') 当前
修改其他用户密码 set password for '用户名'@'localhost' = password ('密码')
2.4.2.3、 忘记用户的密码:

修改my.cnf 配置 跳过密码认证

[mysald]
skip-grant-tables

2.4.2.4、数据库用户授权

grant提权

grant 权限列表ON 数据库.表名 TO用户名 @来源地址  identified by '密码'
* (所有表)

 例如:

grant select on nizb,* to 'ginf'@'192.168.10.2' identified by'abc123'

 

grant all prvileges on njzh,* to 'ginf'@'192.168.10.2' identified by'abc1231'

 all prvileges :代表所有

2.4.2.5权限撤销与刷新
flush prvileges    刷新权限
撤销权限
revoke 权限列表 on 数据库.表名 from '用户名' @'来源地址'
show grant for '用户名' @'来源地址'

2.5、DCL:数据控制语言,用于设置或者更改数据库用户或角色权限

设置用户权限(用户不存在时,则新建用户

2.5.1、设置用户权限

格式:.

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址[IDENTIFIED BY密码]
mysql> GRANT select ON auth.t TO xiaogi'@localhost' IDENTIFIEDBY123456Query OK, 0 rows affected (0.00 sec)

grant select on auth.* to 'xiaoqi'@'localhost' identified by '123456';
######列子####
mysql> grant select on auth.* to 'xiaoqi'@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;                         
Query OK, 0 rows affected (0.00 sec)


######退出mysql用xiaoqi账户登录####
[root@localhost ~]# mysql -u xiaoqi -p                  ##登录
Enter password:                                                        ##输入密码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>                                                                     ###已经登录

#######验证xiaoqi#####
mysql> select * from auth.users;                              ###验证授权的访问操作
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> drop table auth.users;                                ####验证非授权的访问操作
ERROR 1142 (42000): DROP command denied to user 'xiaoqi'@'localhost' for table 'users'

########创建bdqn数据库,授权192.168.100.1的主机连接,用户名为dbuser 密码为pwd@123允许bdqn库中操作###
create database bdqn;
grant all on auth.* to 'dbuser'@'192.168.100.%' identified by 'pwd@123';
grant create on bdqn.* to 'dbuser'@'192.168.100.1' identified by 'pwd@123';
#######列子####3
mysql> create database bdqn;         

2.5.2、查看用户的权限

SHOW GRANTS FOR 用户名@来源地址
mysql> show grants for 'dbuser'@'192.168.100.1';                            ####查看用户的权限
+--------------------------------------------------------------+
| Grants for [email protected]                              |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'192.168.100.1'               |
| GRANT ALL PRIVILEGES ON "bdqn".* TO 'dbuser'@'192.168.100.1' |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)


revoke all on bdqn.* from 'xiaoqi'@'localhost';

2.5.3、撤销用户的权限

格式:

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
revoke all on bdqn.* from 'dbuser'@'192.168.100.1';
mysql> revoke all on bdqn.* from 'dbuser'@'192.168.32.2';
Query OK, 0 rows affected (0.00 sec)


mysql> show grants for 'dbuser'@'192.168.100.1';
+------------------------------------------------+
| Grants for [email protected]                |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'192.168.100.1' |
+------------------------------------------------+
1 row in set (0.00 sec)

3、问题:遇到root密码忘了怎么办?

3.1、 在 my.ini 或 my.cnf 的 [mysqld] 下添加 skip-grant-tables

[root@localhost mysql]# vi /etc/my.cnf
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
skip-grant-tables                     ####此处添加###

3. 2、重启mysql数据库

[root@localhost mysql]# systemctl restart mysqld    

3.3、登录数据库

[root@localhost mysql]# mysql -uroot -p
Enter password:               ###回车直接登录
mysql> 

3.4、 修改root密码

mysql> update mysql.user set authentication_string=PASSWORD('abc123') where User='root'; 
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3.5、 修改mysql免密码登录配置 然后重启服务

[root@localhost mysql]# vi /etc/my.cnf
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
#skip-grant-tables

3.6、重启mysql数据库

[root@localhost mysql]# systemctl restart mysqld

3. 7、mysql数据库验证

[root@localhost mysql]# mysql -uroot -p
Enter password:                                ####输入abc123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

你可能感兴趣的:(数据库,mysql)