[MySQL]爆肝万字,带你入门MySQL(SQL语句命令大全)

本文详细介绍了MySQL数据库的基本操作,包括连接与退出数据库、创建与删除数据库、切换与查看数据库、操作数据表(创建、删除、修改结构、插入数据)以及备份与还原数据库。此外,还讨论了字符集、校对规则以及SQL语句的使用,是学习MySQL数据库管理的实用教程。
摘要由CSDN通过智能技术生成

什么是MySQL?数据库?

其实简单来说数据库就是一个可以用来存放数据的地方,我们平时一定都是用过文件来存储一些word文档或者图片等等,其实数据库也相当于一个“文件”;那么我们为什么不使用文件,而用创建了数据库来存储数据呢?
主要是 1. 读/写文件需要进行I/O,速度较慢
2. 文件不利于存储海量数据,且不利于数据的管理和查询
3. 在程序中控制文件也不方便
由于上面的缺点,因此出现了数据库;
其实数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
使用数据库,我们可以有效的管理海量数据,并能快速的进行数据的查询。
我们今天涉及到的MySQL也属于数据库中的一种

SQL语句:

SQL 是用于访问和处理数据库的标准的计算机语言。通过编写SQL语句,可以访问和处理数据库,包括数据插入、查询、更新和删除等等

注:

每个SQL语句在结尾,都要输入一个分号(;)或者\g ,表示该语句结束了。

也可以使用\G,这种会每行显示一个值

如下图示例:
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​在这里插入图片描述

连接数据库:

mysql -h [IP] -P [port] -u [用户] -p [密码]
如果没有-h选项,默认连接本地 没有-P选项,默认端口为3306 (mysql的默认端口为3306)

退出数据库:

quit;

查看当前的数据库连接情况:

show processlist;
eg:仅有本地的一个root用户连接到数据库
在这里插入图片描述

关于库的操作

查看所有的数据库 show databases;

eg:在这里插入图片描述

创建数据库: create database [数据库名称];

eg: 创建一个名为person的数据库

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

当然如果我们要创建的数据库名称与原有的数据库名称相同的话,就会产生错误
eg:我们再次执行create database preson;命令的时候,会显示:

create database person;
ERROR 1007 (HY000): Can't create database 'person'; database exists

为了避免出现这种错误,我们可以加上if not exists(如果不存在)
命令: create database if not exists [数据库名称];

mysql> create database if not exists person;
Query OK, 1 row affected, 1 warning (0.01 sec)
会显示一个警告,就是因为我们在创建数据库person之前已经有一个person数据库了,
在实际中并没有创建一个新的数据库
切换数据库: use [数据库名称];

我们使用改名零,就会进入该库,可以对库内的表进行操作
eg: 进入person库内

mysql> use person;
Database changed
删除数据库: drop database [if exists] [数据库];

我们常说的删库跑路,其实就是使用这条命令,我们删除了数据库后,该数据库的全部数据都会丢失;因此,我们删库的时候一定要谨慎,删除任何库之前先进行备份,备份命令一会我们会提到:
eg: 删除数据库person;

mysql> drop database person;
Query OK, 0 rows affected (0.02 sec)

eg:如果存在数据库he,则删除

drop database if exists  he;
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看数据库结构 show create database [数据库名称];

eg:

how create database person;
+----------+-----------------------------------------------------
| Database | Create Database                                                   
+----------+-----------------------------------------------------
| person   | CREATE DATABASE `person` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------
1 row in set (0.00 sec)

我们观察上面的内容其实会发现有CHARCTER SET,这其实是表示数据库所使用的字符集,那什么是字符集呢?
ASCII我们都知道其实可以表示255个字符,ASCII也可以被成为一个字符集;
其实字符集就是一个字符表示的集合,而我们最常用的字符集是utf8,几乎支持所有国家的字符

和字符集紧密相关的还有一个概念 校对规则,每一个字符集都有一个默认的校对规则:校对规则的不同其实体现在对于大小写的敏感程度
有些校对规则对大小写敏感,后缀通常为_cs , _bin
而有些校对规则对大小写不敏感,后缀通常为_ci;

比如我们在一张数据表中存有数据 Shusheng ,shusheng
如果我们查询数据Shusheng
在后缀为_cs,_bin的校对规则下,我们查询的结果为 Shusheng
在后缀为_ci的校对规则下,查询的结果为Shusheng,shusheng

我们可以使用如下命令来查看系统所支持的字符集与其校对规则:

查看字符集和校对规则

字符集:
show character set;

show charset;
校对规则
show collation ;

创建数据据库(带有字符集和校对规则)

create database [数据库名称] charset=[字符集] collate [校对规则] ;
create database if not exists [数据库名称] charset=[字符集] collate [校对规则];

eg: 创建一个数据库person ,其字符集为utf8 ;

mysql> create database person charset=utf8;
Query OK, 1 row affected (0.00 sec)

创建一个数据库person ,其字符集为utf8 ,校对规则为utf8_general_ci

mysql> create database person 
charset=utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
修改数据库属性

alter database [数据库名称] charset=[字符集] collate [校对规则] ;

eg: 只修改字符集

mysql> alter database person charset=utf8 ;
Query OK, 1 row affected (0.00 sec)

eg:只修改校对规则

mysql> alter database person collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

eg:修改字符集和校对规则

mysql> alter database person charset=utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
备份数据库

mysqldump -P [端口] -u [用户] -p [密码] -B [数据库的名称] > 数据库备份存储的文件路径

注:此命令是在shell环境下运行的,并非在数据库中使用

[root]# mysqldump -P3306 -u root -p[密码] -B pra >./p.sql;
还原备份的数据库

source [数据库备份存储的文件路径]

注:此命令是在数据库中使用的,如果备份数据库的时候没有使用-B选项,我们需要先建立一个新的空数据库,再使用命令还原数据库

关于表的操作:

查看当前数据库中所有的表:show tables;

eg:
在这里插入图片描述
在数据库pra存在的所有数据表(grade,stu)全部会展示出来

创建新的数据表:

关于数据类型,可前往该博客:MySQL第二弹 之 表操作
MySQL第三弹 之 表的一些约束

链接:https://blog.csdn.net/weixin_43519514/article/details/107389579
https://blog.csdn.net/weixin_43519514/article/details/107413228

create table [表名称] ([列名称] [列的数据类型] comment [注释] )charset = [字符集] collate [校对规则] engine=[存储引擎] ;

create table if not exists ([列名称] [列的数据类型] comment [注释] )charset = [字符集] collate [校对规则] engine=[存储引擎] ;

注: if not exists 语句,只要存在同名的表就不会创建新表,即使两个表的结构是不一样的。

如果想一定创建新表,可以在创建表之前使用:drop table if exists [表名称] 将旧表删除;

eg:

mysql> create table student (id int comment '学号' ,
name varchar(27) comment '姓名') charset=utf8;
Query OK, 0 rows affected (0.02 sec)
创建临时性表:

MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接(即于数据库的会话关闭的时候)时,Mysql会自动删除表并释放所有空间.

换而言之,每个客户端只能看见自己创建的临时性表,所以不通的客户端可以创建同名的临时性表。

注: 临时表可以与某个已有的永久表的名字相同,已有的永久表不会因此遭到损坏。对于一个客户端而言,如果创建了一个与已有的永久表名字相同的临时表时,那个永久表将会被隐藏(无法对其访问,临时表被删除或者更改名字后,那个永久表将会再次显现出来)

创建临时性表的命令和创建表的命令差不多,只是加了修饰词temporary
create temporary table [表名称] ([列名称] [列的数据类型] comment [注释] )charset = [字符集] collate [校对规则] engine=[存储引擎] ;

eg:
同名的永久表和临时表可以同时存在

mysql> create table person (name varchar(255));
Query OK, 0 rows affected (0.02 sec)

mysql> create temporary table person (name varchar(255));
Query OK, 0 rows affected (0.01 sec)
查看表结构:

查看数据表的列属性:
describe [表名称]; 可简写为 desc [表名称];
explain [表名称];
show columns from [表名称];
show fields from [表名称];
eg:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看建表时的一些属性:
show create table [表名称];
eg:
在这里插入图片描述

删除数据表: drop table [数据表名称];

eg:

mysql> drop table stu;
Query OK, 0 rows affected (0.01 sec)

注: 如果其他表利用外键于本表相关,则不能使用此命令直接删除表;
需先将设置外键的表删除,在删除此表;

//grade利用外键于stu表相关,需先删除grade才可以删除stu
mysql> drop table stu;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql> drop table grade;
Query OK, 0 rows affected (0.01 sec)

mysql> drop table stu;
Query OK, 0 rows affected (0.01 sec)
删除临时表: drop temporary table
mysql> drop temporary table person;
Query OK, 0 rows affected (0.00 sec)

注: 使用drop table [表名称] 也可以删除临时表,但是可能存在误操作:将同名的永久表也删除了
但是使用下面的命令,无法删除永久表

mysql> drop temporary table person;
ERROR 1051 (42S02): Unknown table 'pra.person'
修改表名称:

alter table [原表名称] rename to [新表名称];

alter table [原表名称] rename [新表名称];

mysql> alter table person rename to per;
Query OK, 0 rows affected (0.01 sec)

rename table [原表名称] to [新表名称] ;

mysql> rename table per to person;
Query OK, 0 rows affected (0.01 sec)
更改表结构:
修改表的存储引擎

alter table [表名称] engine = [存储引擎];

mysql> alter table person engine=MyISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
修改表的字符集

alter table [表名称] charset=[字符集];

mysql> alter table person charset=utf8;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
更改列的数据类型

alter table [表名称] modify [列名称] [新的数据类型];

mysql> alter table person modify name int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
更改列名称以及数据类型

alter table [表名称] change [列名称] [列名称] [数据类型] ;

//仅修改列的数据类型,也一定要将列名称写两次
mysql> alter table person change name name int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
//将name列改成id,且数据类型更改为int
mysql> alter table person change name id int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
添加列:

alter table [表名称] add [列名称] [列的数据类型] after [列名称]

删除列:

alter table [表名称] drop [列名称]

表的备份及其还原:

备份:mysqldump -P3306 -u [用户名] -p[密码] [库名称] [表名称] >数据库文件的存储路径;

还原:source 数据库文件的存储路径;

往表中插入数据:

数据表:

CREATE TABLE `student` (
  `id` int(11) DEFAULT NULL COMMENT '学号',
  `name` varchar(27) DEFAULT NULL COMMENT '姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

insert into [表名称] values (数据,需要和列对应);

如果数据和列数据类型不匹配会报错,数据类型匹配不会报错,但会出现意外的结果.

mysql> insert into student values ('书生',1);
ERROR 1366 (HY000): Incorrect integer value: '书生' 
for column 'id' at row 1
mysql> insert into student values (1,'书生');
Query OK, 1 row affected (0.00 sec)

insert into [表名称] values (数据1 ) ,(数据2) , … ; 可以插入多行数据
eg:

mysql> insert into student values (1,'书生'),(2,'qq');
Query OK, 2 rows affected (0.00 sec)

insert into [表名称] (列名称) vaues (数据1),(数据2) , … ;
往指定的列插入相应的数据,未指定的列采用默认值

mysql> insert into student (name) values ('书生'),('qq');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

insert into [表名称] set [列名称] = [该列的值] , [列名称] = [该列的值];
eg:

mysql> insert into student set id=7,name='qqqq';
Query OK, 1 row affected (0.01 sec)
查看表中的数据
查看整张表的所有数据

select * from [表名称];
注: *表示全部内容
在这里插入图片描述

指定列查询:

select [列名称] from [表名称];
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值