欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据库管理的常规操作命令

程序员文章站 2024-02-23 19:35:28
...

前言

  • MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
  • MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

一:数据库基本操作命令

1.1:查看数据库列表信息的命令

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

1.2:查看数据库中的数据表信息的命令

首先确定查看那个表的信息,use 数据库名
再show tables

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               |
...省略内容

1.3:显示数据表的结构

describe【数据库名.】表名(describe可简写为desc)

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       | 

1.4:SQL语言概述

  • SQL语言
    • 是Structured Query Language的缩写,及结构化查询语言
    • 是关系型数据库的标准语言
    • 用于维护管理数据库,如数据查询,数据更新,访问控制,对象管理等功能
  • SQL分类
    • DDL:数据定义语言:(create drop alter)

    • DML:数据操纵语言:(insert update delete )

    • DQL:数据查询语言:(select)

    • DCL:数据控制语言:(grant revoke)

二:SQL操作管理命令

2.1DDL语句的作用

DDL语句用于创建数据库对象,如库,表,索引等

  • 创建数据库:create database 数据库名
mysql> create database xiyou;  ###创建库
Query OK, 1 row affected (0.00 sec)
  • 创建数据表:create table 表名(字段定义…)
mysql> use xiyou;
Database changed
mysql> create table tangseng ( 
id int(4) not null primary key auto_increment,
name varchar(10) not null,
score decimal(5,2),
address varchar(50) default '未知');
Query OK, 0 rows affected (0.01 sec)

  • 删除指定的数据表:drop table [数据库名.]表名
mysql> drop table xiyou.tangseng;	'//删除表'
Query OK, 0 rows affected (0.00 sec)
  • 删除指定的数据库:drop database 数据库名
mysql> drop database xiyou;	'//删除库'
Query OK, 0 rows affected (0.00 sec)

2.2DML语句的作用

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

  • 向指定库插入数据
mysql> insert into tangseng (name,score,address) values ('悟空',59,'东胜神州'),('八戒',69,'高老庄'),('悟净',79,'流沙河');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from tangseng;
+----+--------+-------+--------------+
| id | name   | score | address      |
+----+--------+-------+--------------+
|  1 | 悟空   | 59.00 | 东胜神州     |
|  2 | 八戒   | 69.00 | 高老庄       |
|  3 | 悟净   | 79.00 | 流沙河       |
+----+--------+-------+--------------+
3 rows in set (0.00 sec)
  • update 表名 set 字段名 1=值1[,字段名2=值2] where条件表达式
mysql> update tangseng set score=60 where score < 60; ###修改表中‘score’小于60的为60
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from tangseng;
+----+--------+-------+--------------+
| id | name   | score | address      |
+----+--------+-------+--------------+
|  1 | 悟空   | 60.00 | 东胜神州     |
|  2 | 八戒   | 69.00 | 高老庄       |
|  3 | 悟净   | 79.00 | 流沙河       |
+----+--------+-------+--------------+
3 rows in set (0.00 sec)
  • 在数据表中删除指定的数据记录命令
mysql> delete from tangseng where id=2;  ###删除表中id=2的记录
Query OK, 1 row affected (0.00 sec)

mysql> select * from tangseng;
+----+--------+-------+--------------+
| id | name   | score | address      |
+----+--------+-------+--------------+
|  1 | 悟空   | 60.00 | 东胜神州     |
|  3 | 悟净   | 79.00 | 流沙河       |
+----+--------+-------+--------------+
2 rows in set (0.00 sec)

2.3DQL语句的作用

DQL是数据查询语句,只有一条:SELECT

  • 不指定条件查询命令
mysql> select name from tangseng;
+-----------+
| name      |
+-----------+
| 悟空      |
| 八戒      |
| 悟净      |
| 小白龙    |
+-----------+
4 rows in set (0.00 sec)

  • 指定条件查询的命令
mysql> select name,address from tangseng where id=1 or id=4; ###查询表中记录id=1或id=4的name和address字段
+-----------+--------------+
| name      | address      |
+-----------+--------------+
| 悟空      | 东胜神州     |
| 小白龙    | 西海龙宫     |
+-----------+--------------+
2 rows in set (0.00 sec)

2.4DCL语句的作用

设置或查看用户的权限,无用户时创建这个用户

  • 设置用户权限的命令
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123' with grant option;
'//all privileges:所有权限,%:所有终端'
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 查看用户权限的命令
    SHOW GRANTS FOR 用户名@来源地址
mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for [email protected]%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
  • 撤销用户权限的命令
    REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
mysql> revoke all privileges on *.* from 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

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

三:克隆表的操作

  • 创建一个和tangseng一样的表test
mysql> create table test like tangseng;
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(4)       | NO   | PRI | NULL    | auto_increment |
| name    | varchar(10)  | NO   |     | NULL    |                |
| score   | decimal(5,2) | YES  |     | NULL    |                |
| address | varchar(50)  | YES  |     | 未知    |                |
+---------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)


此时表中数据没有克隆,只是克隆了表的结构,可以往test表中插入筛选过的数据

mysql> insert into test select * from tangseng where score > 70; ###向test表插入tangseng表中score大于70的记录
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+-----------+-------+--------------+
| id | name      | score | address      |
+----+-----------+-------+--------------+
|  3 | 悟净      | 79.00 | 流沙河       |
|  4 | 小白龙    | 89.00 | 西海龙宫     |
+----+-----------+-------+--------------+
2 rows in set (0.00 sec)

mysql> 

四:多表关联

先创建一个wuqi表

mysql> select * from wuqi;
+----+--------+--------------+
| id | name   | wuqi         |
+----+--------+--------------+
|  1 | 悟空   | 金箍棒       |
|  2 | 八戒   | 九齿钉耙     |
+----+--------+--------------+
2 rows in set (0.00 sec)

多表关联最重要的是表中有相匹配的字段

mysql> select tangseng.name,tangseng.address,wuqi.wuqi from tangseng inner join wuqi on tangseng.name=wuqi.name;
+--------+--------------+--------------+
| name   | address      | wuqi         |
+--------+--------------+--------------+
| 悟空   | 东胜神州     | 金箍棒       |
| 八戒   | 高老庄       | 九齿钉耙     |
+--------+--------------+--------------+
2 rows in set (0.01 sec)