MYSQL数据库管理基本操作

news2024/9/20 16:50:14

一、数据库的基本操作

1、登录数据库

[root@mysql-server ~]#mysql -uroot -p123456     ###直接回车,则进入数据库

[root@mysql-server ~]#mysql -u root -p          ###直接回车
Enter password:                                 ###输入密码

方法一: 

方法二: 

2、查看数据库结构

1.查看数据库信息

mysql> show databases;       ###注意结尾的分号,分号表示结束
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| njzb               |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)


mysql> show databases\G           ###\G来结束命令
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: njzb
*************************** 4. row ***************************
Database: performance_schema
*************************** 5. row ***************************
Database: sys
5 rows in set (0.00 sec)

用两种方式显示数据库的结构

2.查看数据库中包含的表

mysql>  USE mysql;    ###use后面跟数据库名;

show  tables;

show tables in  mysql;

3.显示数据表的结构(字段)

DESCRIBE  [数据库名.]表名

DESC  [数据库名.]表名   ###  desc可以缩写

Field:字段名称
type:数据类型
Null :是否允许为空
Key :主键
Default :默认值
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id:1 3 5 7

3、常用的数据库类型

int整型    用于定义整数类型的数据
float单精度浮点 4字节32位   准确表示到小数点后六位
double双精度浮点 8字节64位
char固定长度的字符类型
varchar可变长度的字符类型
text文本
image图片
decimal(5,2)5个有效长度数字,小数点后面有2位
key主键是唯一的,但是主键可以由多个字段构成

4、char和varchar的区别

  • ​对char来说,最多能存放字符个数255个,char如果存入数据的实际长度比指定长度要小 会补空格至指定长度。如果存入的数据的实际长度大于指定长度 低版本会被截取,高版本会报错
  • char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了​

二、MYSQL数据文件

MysQL数据库的数据文件存放在**/usr/local/mysql/data**目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为".frm"、“.MYD"和”.MYI”。

1、MYD文件

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

2、MYI文件

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

3、MyISAM存储引擎

  • MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件(frm,myd,myi)。每个表都有且仅有这样三个文件做为MyISAM

  • 存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI文件中。

  • 另外还有".ibd"和 ibdata文件,这两种文件都是用来存放Innodb数据的,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用".ibd"文件来存放数据,且每个表一个".ibd"文件,文件存放在和MyISAM数据相同的位置。如果选用共享存储表空间来存放数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata文件。

三、SQL语句

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

SQL语言分类

DDL数据定义语言,用于创建数据库对象,如库、表、索引等
DML数据操纵语言,用于对表中的数据进行管理
DQL数据查询语言,用于从数据表中查找符合条件的数据记录
DCL数据控制语言,用于设置或者更改数据库用户或角色权限

1、DDL数据定义语言

用于创建数据库对象,如库、表、索引等

create    ##创建
drop      ##删除
alter     ##修改

1.创建新的数据库

mysql> create database school;  ###创建数据库

mysql> show databases;          ###查看

2.创建新的表

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);

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

例:create database school;
use school;
create table CLASS1 (id int not null,name char(10) not null,sex char(1),primary key (id));

3.删除指定的数据表

use 数据库名
DROP TABLE 表名;

DROP TABLE [数据库名].表名;

4.删除指定的数据库

DROP DATABASE 数据库名;

2、DML数据操控语言

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

insert
update
delete

格式:

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

1.向数据表中插入新的数据记录

例:
create database school;

show databases;
 
use school;
 
show  table;

create table class (id int not null,name char(10) not null,score decimal(5,2),passwd char(20) default'',primary key(id));

insert into class (id,name,score,passwd) values(1,'zhangsan',59.5,PASSWORD('123456'));

insert into class (id,name,score,passwd) values(2,'lisan',75,PASSWORD('123456'));

insert into class (id,name,score,passwd) values(3,'lisi',82,123456);

insert into class (id,name,score,passwd) values(4,'wangwu',92,PASSWORD('123456'));

insert into class (id,name,score,passwd) values(5,'laoliu',82,123456);
 
#PASSWORD('123456'):查询数据记录时,密码字串以加密形式显示:若不使用PASSWORD(),查询时以明文显示。

2.查询数据记录

SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
 
例:select * from CLASS;
select name,score from CLASS where id=1;

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

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
 
例:
insert into class (id,name,score,passwd) values (6,'qige',77,123456);

insert into class (id,name,score,passwd) values (7,'bajie',88,123456);


select  * from class;

update class set score='99' where name='laoliu';   ###更改老六的成绩为99

##也可以根据id来修改
update class set score='99' where id='2';

4.在数据表中删除指定的数据记录

DELETE FROM 表名 [WHERE 条件表达式];
 
例:delete from CLASS where id=5;
select * from CLASS;

3、DQL数据查询语言

select * from CLASS;              #查看表中所有信息
select * from CLASS limit 2;      #只显示头2行
select * from CLASS limit 2,3;    #显示第2行后的前3行
select * from class\G             #以列表方式竖向显示

4、DCL数据控制语言

1.修改表名

ALTER TABLE 旧表名 RENAME 新表名;
 
例:alter table class rename class35;
show tables;
select * from class35;

2.扩展表结构(增加字段)

ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
 
​#default ‘地址不详’:表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用
 
例:alter table CLASS3 add address varchar(50) default '地址不详';

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

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
 
例:alter table CLASS change name student varchar(20) unique key;
select * from CLASS;
 
例:insert into class (id,student,score,passwd) values (5,'laoliu',89,123456);

insert into class (id,student,score,passwd)values(8,'bajie',91,123456);   ###添加失败

每个表中只能由一个主键 ,但是许多内容都需要唯一性,这就是唯一键的作用

4.删除字段

ALTER TABLE 表名 DROP 字段名;
 
例:alter table CLASS drop score;

四、高级操作

1、清空表

1.Delete from tablename

DELETE清空表后,返回的结果内有删除的记录条目

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

mysql> select *from class;
+----+----------+-------------------------------------------+--------------+
| id | student  | passwd                                    | address      |
+----+----------+-------------------------------------------+--------------+
|  1 | zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 地址不详     |
|  2 | lisan    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 地址不详     |
|  3 | lisi     | 123456                                    | 地址不详     |
|  4 | wangwu   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 地址不详     |
|  5 | laoliu   | 123456                                    | 地址不详     |
|  6 | qige     | 123456                                    | 地址不详     |
|  7 | bajie    | 123456                                    | 地址不详     |
+----+----------+-------------------------------------------+--------------+
7 rows in set (0.00 sec)

mysql> delete from class;
Query OK, 7 rows affected (0.00 sec)

mysql> select *from class;
Empty set (0.00 sec)

insert into class values(1,'zwg',99,123456);

select *from class;

desc  class;

2.Truncate table tablename

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

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

mysql> select * from class;
Empty set (0.00 sec)

mysql> insert into class values(1,'zwg',99,123456);
Query OK, 1 row affected (0.00 sec)

mysql> select * from class;
+----+------+-------+--------+
| id | name | score | passwd |
+----+------+-------+--------+
|  1 | zwg  | 99.00 | 123456 |
+----+------+-------+--------+
1 row in set (0.00 sec)

3.Drop form tablename

mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| class            |
| kysw             |
+------------------+
2 rows in set (0.00 sec)

mysql> drop table kysw;
Query OK, 0 rows affected (0.00 sec)

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

4.对比

区别Drop table tablenameTruncate table tablenameDelete table tablename
所属SQL语句属于DDL属于DDL属于DML
是否可回滚不可回滚(无法恢复)不可回滚(无法恢复)可回滚(可恢复)
是否带Where不可带Where不可带Where可带Where
是否删除表内容和表结构表内容和结构删除表内容删除表结构在,表内容要看where执行情况
删除速度删除速度快删除速度快删除速度慢,需要逐行删除
速度比较最快次之最慢
特别提醒:最好使用Delete

当不再需要一张表的时候使用Drop;想保留部分数据的时候使用Delete,并且带上Where语句;保留表而删除所有数据的时候用Truncate 。

2、临时表

临时建立的表,用于保存一些临时数据,不会长期存在(下次重新进入数据库即不存在)

如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。

mysql> show tables;
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
+-----------------+
1 rows in set (0.00 sec


mysql> create temporary table kysw(id int(6) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,hobby varchar(60));
#创建临时表 数据表名为class3 id 整型为6字节 zerofill数值不满6位时,前面位数用0补充(00001)
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
#建立的临时表是看不到的                                                           
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
+-----------------+
1 rows in set (0.00 sec)

mysql> select * from kysw;
Empty set (0.00 sec)

mysql> insert into kysw values(1,'cxk',12345678,'ctrl');
Query OK, 1 row affected (0.00 sec)

mysql> select * from kysq;
+--------+------+----------+-------+
| id     | name | cardid   | hobby |
+--------+------+----------+-------+
| 000001 | cxk  | 12345678 | ctrl  |
+--------+------+----------+-------+
1 row in set (0.00 sec)

如果数据库退出在重新登录,那么临时表就不存在了

mysql> select * from kysw;
ERROR 1146 (42S02): Table 'school.kysw' doesn't exist
#临时表找不到了

3、克隆表

1.Like方法

mysql> show tables;
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
+-----------------+
2 rows in set (0.00 sec)
 
mysql> create table class2 like class;
#克隆数据表的结构
Query OK, 0 rows affected (0.01 sec)
 
mysql> show tables;
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
| class2          |
+-----------------+
3 rows in set (0.00 sec)
mysql> select * from class3;
Empty set (0.00 sec)
 
mysql> insert into class2 select * from class;
#克隆数据表class2的数据内容
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql> select * from class3;
+----+------+-------+-------------------------------------------+
| id | name | grate | passwd                                    |
+----+------+-------+-------------------------------------------+
|  1 | cxk  | 88.00 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
|  2 | wyb  | 96.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
|  3 | xzq  | 95.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
|  4 | lyf  | 95.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+----+------+-------+-------------------------------------------+
4 rows in set (0.00 sec)

2.show create table方法

mysql> show tables;
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
| class2          |
| class3          |
+-----------------+
3 rows in set (0.00 sec)
 
mysql> show create table class2\G
*************************** 1. row ***************************
       Table: class2
Create Table: CREATE TABLE "class2" (
  "id" int(11) NOT NULL,
  "name" char(15) NOT NULL,
  "grate" decimal(4,2) DEFAULT NULL,
  "passwd" char(45) DEFAULT '',
  PRIMARY KEY ("id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
 
mysql> create table class4(select * from class3);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql> show tables;
+-----------------+
| Tables_in_class |
+-----------------+
| class           |
| class2          |
| class3          |
| class4          |
+-----------------+
4 rows in set (0.00 sec)
 
mysql> select * from class4;
+----+------+-------+-------------------------------------------+
| id | name | grate | passwd                                    |
+----+------+-------+-------------------------------------------+
|  1 | cxk  | 88.00 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
|  2 | wyb  | 96.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
|  3 | xzq  | 95.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
|  4 | lyf  | 95.00 | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+----+------+-------+-------------------------------------------+
4 rows in set (0.00 sec)
如果想将数据迁移到其他地方使用Like备份方法;

如果想只备份数据的内容可以使用第二种方法。

五、数据库用户管理

总结:

1.查看数据库、数据表和表结构的操作

  • 查看数据库show databases
  • 查看数据表show tables
  • 查看表结构describe tablename或desc tablename

2.创建库和表的操作及删除库和表的操作

  • 创建库create database databasename
  • 创建表create table tablename
  • 删除库drop database databasename
  • 删除表drop table tablename

3.数据表的增、删、改、查等操作

  • 数据表增:Insert into tablename
  • 数据表改:update tablename set 指定内容
  • 数据表删:delete from tablename
  • 数据表查:select(*、where、limit、\G)
  • 数据表结构名称改:alter table tablename rename 新名称
  • 数据表扩展结构增:alter table tablename add 扩展名
  • 数据表字段内容改:alter table tablename change 原结构字段名称 新结构字段名称
  • 数据表字段内容删:alter table tablename drop 指定结构字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenGL学习笔记【2】——开发环境配置(GLFW,VS,Cmake),创建第一个项目

学OpenGL的都会知道,OpenGL只提供了绘图功能,创建窗口是需要自己完成的。这就需要学习相应操作系统的创建窗口方法,为简化创建窗口的过程,可以使用专门的窗口库,例如GLFW。使用GLFW之前需要先进行配置,那怎…

SQLiteC/C++接口详细介绍sqlite3_stmt类(四)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(三) 下一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(五) 7. sqlite3_bind_parameter_count函数 sqlite3_bind_param…

章节10实验--Ubuntu18.04 Qt MySQL libqsqlmysql.so

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…

软考高级:结构化需求分析概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了? 我的博客的图片是放在github上的,众所周知的原因,github访问不是很快,尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…

构建一个前端智能停车可视化系统

引言 随着城市化进程的加速,停车难问题日益突出。智能停车可视化系统通过实时展示停车场的车位信息,帮助用户快速找到空闲车位,提高停车效率。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 2. 安装依赖 3. 创建停车场组件 4. 集…

时序预测 | Matlab实现BiTCN-BiLSTM双向时间卷积神经网络结合双向长短期记忆神经网络时间序列预测

时序预测 | Matlab实现BiTCN-BiLSTM双向时间卷积神经网络结合双向长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现BiTCN-BiLSTM双向时间卷积神经网络结合双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现BiTCN…

本地主机连接Linux虚拟机中的mongodb,并使用studio 3T连接,同时项目启动连接mongodb刷新数据库

本部分只做个人纪录 ** 1.安装mongodb ** 本部分为尚硅谷的电影推荐系统的文档,具体以实际存放位置为准 // 通过WGET下载Linux版本的MongoDB [bigdatalinux ~]$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.3.tgz// 将压缩包解压到…

Python 深度学习第二版(GPT 重译)(二)

四、入门神经网络:分类和回归 本章涵盖 您的第一个真实世界机器学习工作流示例 处理矢量数据上的分类问题 处理矢量数据上的连续回归问题 本章旨在帮助您开始使用神经网络解决实际问题。您将巩固从第二章和第三章中获得的知识,并将所学应用于三个新…

Java newInstance方法学习

用newInstance与用new是有区别的,区别在于创建对象的方式不一样,前者是使用类加载机制; newInstance方法要求该 Class 对应类有无参构造方法; 执行 newInstance()方法实际上就是使用对应类的无参构造方法来创建该类的实例&#x…

Golang 异步(bsd/linux)io

Golang 异步(bsd/linux)io 在日常开发中,读写文件的底层调用函数是syscall.Read/Write。一切都是围绕这两个函数展开的,不过有时候需要或者就是单纯想异步执行。liburing是linux上一个很好的原生异步io库,这里需要适配bsd派系的系统&#xf…

Redis面试题以及答案

1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并…

00. 认识 Java 语言与安装教程

认识 Java Java 在 20 多年发展过程中,与时俱进,为了适应时代的需要,经历过两次重大的版本升级,一个是 Java 5,它提供了泛型等重要的功能。另一个是提供了 Lambda 表达式等重要的功能的 Java 8。 一些重要的 Java 的…

GitHub配置SSH Key(详细版本)

GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。比如新建的仓库可以下载, 但是提交需要账号密码。 步骤 一、设置git的user name和email 如果你是第一次使用,或者还没有配置过的话需要操作…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书,你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…

Java与Go:指针

在计算机内存中,每个变量都有一个唯一的地址,指针就是用来保存这个地址的变量。通过指针,我们可以间接地访问和修改存储在该地址处的数据。今天我们来聊一聊Java和Go指针,预告一下,我们需要借助C语言做一些小小的比较。…

Jmeter Ultimate Thread Group 和 Stepping Thread Group

线程组:使用复杂场景的性能测试 有时候我们做性能测试时,只依靠自带的线程组,显示满足不了性能测试中比较复杂的场景,下面这两种线程组可以帮助你很好的完成复杂的场景 第一种:Stepping Thread Group 在取样器错误后…

详解ThreadLocal

为什么出现ThreadLocal ? 在多线程环境下,如果多个线程同时修改一个公共变量,可能会出现线程安全问题,即该变量的最终结果可能出现异常。为了解决线程安全问题,JDK提供了很多技术手段,比如使用synchronize…

软考高级:软件架构风格-虚拟机风格概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…