Mysql数据库命令大集合:增删改查,过滤删除表信息,临时表,原样拷贝你都会吗?

话不多说直接上命令

查看数据库结构

查看所有数据库信息

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| auth               |
| bdqn               |
| mysql              |
| performance_schema |
| sys                |
| zzt                |
+--------------------+
7 rows in set (0.00 sec)

查看数据库中的表的信息

#首先进入mysql数据库
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> show tables;

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| 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                      |
| users                     |
+---------------------------+
32 rows in set (0.00 sec)

查看数据库表的结构

mysql> describe users;

+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name   | char(16) | NO   | PRI | NULL    |       |
| user_passwd | char(48) | YES  |     |         |       |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

SQL语言(增,删,改,查)

SQL语言
●Structured Query Language的缩写,即结构化查询语言

●关系型数据库的标准语言

●用于维护管理数据库
包括数据查询、数据更新、访问控制、对象管理等功能

SQL分类
●DDL:数据定义语言

●DML:数据操纵语言

●DQL:数据查询语言

●DCL:数据控制语言

DDL创建与删除库,表

●可以用于创建数据库对象(如库,表,索引等)

●使用DDL语言新建库,表

创建数据库

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

创建数据表

mysql> use auth;

Database changed


mysql> create table users(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',PRIMARY KEY (user_name));

Query OK, 0 rows affected (0.02 sec)

删除指定的数据表

mysql> drop table auth.users;

Query OK, 0 rows affected (0.01 sec)

删除指定的数据库

mysql> drop database auth;

Query OK, 0 rows affected (0.00 sec)

DML管理表中数据

DML语句用于对表中的数据进行管理

●INSERT:插入新数据

●UPDATE:更新原有数据

●DELETE:删除不需要的数据

(1)向数据库表中插入新的数据记录
首先我们创建auth库,再创建users表

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

mysql> use auth;
Database changed
mysql> create table users(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',PRIMARY KEY (user_name));
Query OK, 0 rows affected (0.01 sec)

接下来插入新的数据记录
insert into 表明 (字段1,字段2,…) values (字段1的值,字段2的值,…)

##第一种方法

mysql> insert into users(user_name,user_passwd) values('zhangsan',password('123456'));
Query OK, 1 row affected, 1 warning (0.00 sec)


#第二种方法

mysql> insert into users values('zhangsan',password('123456'));
#注释:如果这条记录包含表中所有字段的值,则插入语句中的指定字段可以省略

(2)修改更新数据表中的数据记录
update 表明 set 字段名1=值1,字段名2=值2 where 条件表达式

#将auth库中users表里lisi的user_password改成123321

mysql> update auth.users set user_passwd=password('123321')  where user_name='zhangsan';   
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql>flush privileges;                 ####刷新下

(3)MYSQL 5.7版本修改root的命令

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

mysql>flush privileges;                 ####刷新下

(4)在数据表中删除指定数据记录
delete from 表明 where 条件表达式

##在users表中插入数据lisi

mysql> insert into users(user_name,user_passwd) values('lisi',password('123456'));
Query OK, 1 row affected, 1 warning (0.01 sec)

在这里插入图片描述

#删除lisi数据
mysql> delete from auth.users where user_name='lisi'
    -> ;
Query OK, 1 row affected (0.01 sec)

在这里插入图片描述

DQL数据查询

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

SELECT 字段名1,字段名2… FROM 表名

##查看数据库auth中users表中所有的数据,这边用通配符*表示所有

mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

(1)从数据表中查找符合条件的数据记录

#查看数据库auth的users表中zhangsan数据

mysql> select user_name,user_passwd from auth.users where user_name='zhangsan';
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

DCL设置用户权限

DCL语句设置用户权限(用户不存在时,则新建用户)

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY ‘密码’ ]

(1)给小齐授权可查看auth库的所有内容,登录密码为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> exit
Bye

[root@localhost ~]# mysql -u xiaoqi -p
Enter password: 
Welcome to the MySQL monitor.

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

mysql> select * from auth.users
    -> ;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

可以看到

接下来使用未授权的删除试试


mysql> mysql> delete from auth.users where user_name='zhangsan';
ERROR 1142 (42000): DELETE command denied to user 'xiaoqi'@'localhost' for table 'users'

#可以看到系统提示没有权限

(2)用root登录,创建qhdx数据库,授权20.0.0.1的主机连接,用户名为qq,密码为123456,并允许在qhdx库中做任何操作

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

mysql> grant all on qhdx.* to 'qq'@'20.0.0.1' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

查看用户授权

mysql> show grants for 'qq'@'20.0.0.1';
+-----------------------------------------------------+
| Grants for qq@20.0.0.1                              |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'qq'@'20.0.0.1'               |
| GRANT ALL PRIVILEGES ON "qhdx".* TO 'qq'@'20.0.0.1' |
+-----------------------------------------------------+
2 rows in set (0.00 sec)

(3)撤销用户的权限
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址

mysql> revoke all on qhdx.* from 'qq'@'20.0.0.1';
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'qq'@'20.0.0.1';     查看用户的权限
+---------------------------------------+
| Grants for qq@20.0.0.1                |
+---------------------------------------+
| GRANT USAGE ON *.* TO 'qq'@'20.0.0.1' |
+---------------------------------------+
1 row in set (0.00 sec)

#这里我们看到没有权限操作了

MYSQL高级操作:偏开发

清空表

●清空一个数据表就是删除这个表内的所有数据。前面的小节已经学习过DELETE FROM语句,可以删除表内的数据,

●除此之外还可以使用TRUNCATE TABLE语句实现清空表内记录。DELETE FROM语句可以使用WHERE子句对删除的结果集进行过滤选择,这样更方便、更灵活。TRUNCATE TABLE 语句是删除表中所有记录数据,没法定制,灵活性上稍差

首先准备以下操作需要用的表

#首先进入qhdx库中建立一个ky表
mysql> use qhdx

mysql> create table ky(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',level CHAR(16) NOT NULL,PRIMARY KEY(user_name));
Query OK, 0 rows affected (0.01 sec)


#然后在ky表中写入数据
mysql> insert into ky values('lisi', password('123456'),10);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> insert into ky values('lisi2', password('123456'),20);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> insert into ky values('lisi3', password('123456'),46);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into ky values('lisi4', password('123456'),45);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into ky values('lisi5', password('123456'),49);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into ky values('lisi6', password('123456'),72);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into ky values('lisi7', password('123456'),83);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into ky values('lisi8', password('123456'),99);


为了方便理解,看一下图形界面
在这里插入图片描述
记住level的数字

(1)使用DELETE FROM语句过滤删除


mysql> delete from qhdx.ky where level>=45;
Query OK, 5 rows affected (0.01 sec)

mysql> select * from qhdx.ky;   查看ky的数据
+-----------+-------------------------------------------+-------+
| user_name | user_passwd                               | level |
+-----------+-------------------------------------------+-------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10    |
| lisi2     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 20    |
+-----------+-------------------------------------------+-------+
2 rows in set (0.00 sec)



#这里看到level大于等于45的数据全都被删除了

(2)TRUNCATE TABLE语句实现清空表内记录


mysql> truncate table ky;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from qhdx.ky;
Empty set (0.00 sec)              ###信息提示无数据

查看一下图形界面
在这里插入图片描述

临时表

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

(1)创建临时表mytmp,插入数据,之后退出数据库,重新登录,查看一下是否存在

#查看你一下你要创建的表是否存在
mysql> select * from mytmp;
ERROR 1146 (42S02): Table 'qhdx.mytmp' doesn't exist

#这里显示不存在,接下来我们开始创建
#创建表的结构
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;

Query OK, 0 rows affected (0.00 sec)


##############解释############

AUTO_INCREMENT:自增 比如1 2 3 
varchar(32)32指的是给32个空间
NOT NULL             :不能为空
PRIMARY KEY        :主键连接指id
ENGINE=InnoDB   :使用InnoDB引擎

####################################

#往表中写入数据
mysql> insert into mytmp(name,level) values('aa',10);
Query OK, 1 row affected (0.00 sec)


#查看表的数据,看到已经写入了
mysql> select * from mytmp;    
+----+------+-------+
| id | NAME | level |
+----+------+-------+
|  1 | aa   |    10 |
+----+------+-------+
1 row in set (0.01 sec)

接下来退出重新登录查看

mysql> exit
Bye
[root@localhost ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.

mysql> use qhdx;
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> show tables;
+----------------+
| Tables_in_qhdx |
+----------------+
| ky             |
+----------------+
1 row in set (0.00 sec)

我们创建的mytmp表消失了,实验结束

克隆表:生产环境必备技能

●在MYSQL开发和维护过程中,经常会有原样拷贝某个数据表的需求,怎样能快速完整的拷贝数据呢?

(1)使用like克隆
like可以一摸一样复制,包括表备注,索引,存储,引擎等,但不会复制源表内数据记录

#首先我们查看源表数据与结构
mysql> use qhdx

#先查看表信息
mysql> show tables;
+----------------+
| Tables_in_qhdx |
+----------------+
| ky             |
| tmp            |
| zz             |
+----------------+
3 rows in set (0.00 sec)

#查看我们要克隆表的数据
mysql> select * from zz;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)


#查看我们要克隆表的结构
mysql> show create table zz \G;
*************************** 1. row ***************************
       Table: zz
Create Table: CREATE TABLE "zz" (
  "user_name" char(16) NOT NULL,
  "user_passwd" char(48) DEFAULT '',
  PRIMARY KEY ("user_name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

接下来开始克隆

#用like,复制zz表生成test表
mysql> create table test like zz;
Query OK, 0 rows affected (0.01 sec)

#生成后查看test表结构,与zz表对比,一摸一样
mysql> show create table test \G;
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE "test" (
  "user_name" char(16) NOT NULL,
  "user_passwd" char(48) DEFAULT '',
  PRIMARY KEY ("user_name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)



#查看一下test表数据为空
mysql> select * from test;
Empty set (0.00 sec)

#这条命令相对与管道符号,查看zz表数据,添加给test表
mysql> insert into test select * from zz;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0


#添加完后再查看test表数据,一摸一样都过来了
mysql> select * from test;               
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

最后我们看一下图形界面对比
在这里插入图片描述
在这里插入图片描述
这样就完整克隆了

猜你喜欢

转载自blog.csdn.net/weixin_48190891/article/details/108504716