MySQL常用操作

本文详细介绍了如何通过命令行连接MySQL,包括本地和远程连接,以及创建、查看数据库,操作表(如创建表、查看表结构、复制表等)。涵盖了基本的数据操作,如插入、查询、修改和删除,以及字段操作,如设置主键、字段类型和默认值。
摘要由CSDN通过智能技术生成

MySQL的基础知识

一、本地连接

连接MySQL包括两方面内容:一方面是连接本地MySQL;另一方面是连接远程MySQL。连接MySQL的命令格式如下:

mysql-h主机地址 -u用户名 -p用户密码

以管理员身份打开DOS(cmd),找到自己MySQL所在位置(我的在D盘)进入D盘后输入我们MySQL的具体信息,然后回车

在这里插入图片描述
在这里插入图片描述
然后输入
(root的默认密码为123456)

//输入密码
mysql -u root -p123456
//不输入密码
mysql -u root -p
//回车

我这里是没有输入密码的
回车(看见Enter password: 后再按一次回车)
在这里插入图片描述
出现mysql>就表示我们以完成本地连接了!

至此我们就完成了本地连接!

二、数据库操作

1、查看数据库

使用SHOW databases;命令可以查看有哪些数据库
在这里插入图片描述
我这里显示的是我自己所有的数据库,大家刚开始使用的时候并不会有怎么多,大家一开始会有以下几个数据库

information_schema
mysql
performance_schema
sys

2、创建数据库

查看了我们的数据库后,那么让我们开始来创建数据库吧!
使用CREATE DATABASE databaseName指令来创建数据库。
我们在这里创建一个名为study的数据库

CREATE DATABASE databaseName

在这里插入图片描述
输入CREATE DATABASE databaseName;后回车下面出现Query OK就说明我们已经创建成功了!

我们再出查看一次数据库,观察是否创建成功吧!
在这里插入图片描述

3、使用数据库

要操作某个数据库或者数据库里的表,首先需要选择使用的数据库,使用USE databaseName命令进入到数据库里。
在这里插入图片描述

4、删除数据库

说完创建数据库和使用数据库,我们随便再说一下删除数据库;
删除数据库使用命令DROP DATABASE databaseName
在这里插入图片描述
输入后按回车即可删除所选择的数据库!!!(我这里就不实际操作了!删除后的数据库就彻底没有了哦,大家谨慎操作!再需要该数据库就要重新创建!)

三、表操作

MySQL表操作是使用频率最高的操作。用户可以创建数据库表,查看数据库表,向数据库表插入数据、更新数据、删除数据等,同时可以修改表结构,复制表、使用临时表。

1、创建表

  1. 在study数据库里新建一个user用户表,包括用户id、姓名、性别、年龄、密码。
  2. 创建数据库表首先要进入到study数据库里,然后使用create table user()命令来创建,括号里面是数据库表的直段,包括用户(id)、姓名(name)、性别(sex)、年龄(age)、密码(password)。
  3. 设置表的用户id作为主键,自动递增并不为空,同时设置字段的数据类型,存储引擎采用Innodb数据库引擎。
    在这里插入图片描述
CREATE TABLE user-> id int(10) unsigned not null auto_increment,
    -> name varchar(25),
    -> sex varchar(5),
    -> age int(10),
    -> password varchar(25),
    -> primary key(id)) engine=innodb;
SHOW tables

2、查看表结构

使用DESC tableName 可以查看表结构

DESC user;

在这里插入图片描述

3、复制表

MySQL可以快速复制表结构及数据,它以要复制表的结构为基础,可以快速创建相同表结构和数据到新的表里,在开发过程中,可以复制一个新表作为测试表,而不是操作正式的表,以保证正在运行的数据不被破坏。复制表提供了两个方式一种方式是可以复制表结构、数据、主键、索引;另一种方式是只能复制表结构、数据、不能复制主键和索引。

1.第一种方式:复制表结构、数据、主键、索引

复制表结构、主键、索引,可执行如下命令。

CREATE TABLE new_table like old_table;

插入数据,可执行如下命令。

INSERT TABLE new_table SELECT*FROM old_table;

(1)在study数据库的user表里添加一条记录,命令操作如下:

INSERT INTO user VALUES(2,'tom','男','30','123456');

在这里插入图片描述
自己尝试再添加一组数据:id:1;name:kevin;sex:男;age:20;password:123456

INSERT INTO user VALUES(1,'kevin','男','20','123456');

(2)将user表的结构、索引、主键复制到新的uesr_new表里,命令操作如下:

CREATE TABLE user_new like user;
SELECT*FROM user_new;

在这里插入图片描述
(3)创建新的user_new表,只复制了表结构、主键和索引,并没有数据,把旧的表user的数据复制到新的表user_new,命令操作如下:

INSERT 新表名 SELECT*FROM 旧表名; #将旧表的数据输入到新表中 = 复制数据

 INSERT user_new SELECT*FROM user;

在这里插入图片描述

2.第二种方式:复制表结构、数据、不能复制主键、索引

复制表结构、数据。可执行如下命令。

CREATE TABLE new_table SELECT*FROM old_table;

复制表结构,不复制数据,可执行如下命令。

CREATE TABLE new_table SELECT*FROM old_table WHERE 0;

(1)将user表的表结构、索引、主键复制到新的user_new2表里,可以查看到user_new2表里已经复制进来数据了,命令操作如下:

CREATE TABLE user_new2 SELECT*FROM user;

在这里插入图片描述
(2)将user表的结构表、索引、主键复制到新的user_new3表里,可以查看到user_new3表里没有数据,命令操作如下:

CREATE TABLE user_new3 SELECT*FROM user WHERE 0;

在这里插入图片描述

4、临时表和内存表

  • MySQL临时表主要用于对大数据量表做一个临时表,以提高查询速度。临时表见在内存里,数据在内存里,缺省存储引擎为MySQL服务器默认引擎,引擎类型只能是MEMORY(HEAP)、MyISAM、MERGE、InnoDB。
  • MySQL内存表也可以对大数据量做一个临时表,以提高查询速度,会把表结构存放在磁盘上,把数据放在内存,缺省存储引擎为MEMORY。
  • 创建临时表,命令执行如下所示。
CREATE temporary TABLE tmp1(id int not null);
  • 创建内存表,命令执行如下所示。
 CREATE TABLE tmp2(id int not null)ENGINE=MEMORY;

在这里插入图片描述
临时表和内存表的区别如下

  1. 临时表的表结构和数据都保存在内存里;内存表的表结构保存在磁盘里,数据和索引保存在内存里。
  2. 临时表使用的缺省存储引擎为MySQL服务器默认引擎;内存表使用的存储引擎为MEMORY服务器引擎。
  3. 临时表可以通过参数tmp_table_size 来设定临时表的大小
    内存表可以通过参数max_heap_table_size来设定内存表的大小
  4. 临时表到达tmp_table_size设定的内存上限后将在磁盘上创建临时文件;内存表到达max_heap_table_size设定的内存上限后将报错。
  5. 临时表可以包含TEXT、BLOB等字段;内存表不能包含TEXT、BLOB等字段。
  6. 临时表一般比较少用,通常是在应用程序中动态创建或者由MySQL内部根据SQL执行计划自己创建;内存表则大多作为Cache来使用,特别在没有第三方Cache使用时,随着memcache、NoSQL的流行,越来越少选择使用内存表。
  7. 临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间;内存表在MySQL重启后,主键、自增、索引仍然存在,只是数据丢失。
    注意:
    临时表不能使用rename来重命名,但是可以用alter table rename来代替;可以复制临时表得到一个新的临时表,格式为CREATE temporary table new_table SELECT * FROM old.table;在同一个查询语句中,相同的临时表只能出现一次,但不同的临时表可以出现在同一个查询语句中。

四、数据操作

插入、查询、修改和删除是MySQL数据库的4种最基本的操作,在项目开发过程中也使用得最重要的最频繁。在MySQL里,插入使用INSERT关键字、查询使用SELECT关键字、修改使用UPDATE关键字、删除使用DELETE关键字。

1.插入(INSERT)、查询(SELECT)

将一条数据插入到数据库里,可以用如下命令。

INSERT INTO 表名(字段名,字段名)VALUES(,);

或者不指明表里的字段,但是值按字段的顺序插入,可以使用如下命令。

INSERT INTO 表名 VALUES(,);

查询数据,可以使用如下命令。

SELECT*FROM 表名;

或者查询指定字段,可以使用如下命令。

SELECT id FROM 表名;//id为字段名

使用WHERE条件语句按条件查询,把某一列或者几列作为查询条件,可以使用如下命令。

SELECT*FROM 表名 WHERE id=10;//查询指定表中id=10的数据
SELECT *FROM 表名 WHERE id=10 and name='小明';//查询指定表这id=10并且name=小明的数据

在这里插入图片描述
在这里插入图片描述

2.修改记录(UPDATE)

在MySQL里修改使用关键字UPDATE,命令如下所示。

UPDATE 表名 SET 字段=,字段=WHERE 条件
UPDATE user STE name='小明',sex='男'WHERE id=4;

在这里插入图片描述

3.删除记录(DELETE)

在MySQL中2删除数据可以使用DELETE关键字,命令如下所示

DELETE FROM 表名 WHERE 条件

DELETE FROM user WHERE id=4;//删除user表中id=4的数据

在这里插入图片描述

4.对查询结果排序(ORDER BY)

在MySQL数据库中。使用ORDER BY进行排序,使用关键字 ASC 进行升序排序,使用关键字 DESC 进行降序排序,同时可以按一个字段或者多字段进行排序。如果按多个字段进行排序,先进行一个字段的排序,然后在结果集里面再进行第二个字段的排序,以此类推。

  • (在实操之前,我们首先在我们的user表中添加以下数据)
 INSERT INTO user VALUES(4,'小红','女','27','123456'),(5,'小男','男','10','123456'),(6,'小刚','男','12','123456'),(7,'小王','男','14','111111'),(8,'小绿','女','34','222222'),(9,'晓峰','男','15','333333'),(10,'小影','女','25','444444'),(11,'大梅','女','27','555555');
(1)ORDER BY column ASC; 按某一字段进行升序排序,ASC可以省略不写。
SELECT*FROM user ORDER BY id ASC;

或者

SELECT*FROM user ORDER BY id;
(2)ORDER BY column DESC; 按某一字段进行降序排序,DESC不可以不写。
SELECT*FROM user ORDER BY id DESC;
(3)ORDER BY columnl,column2 DESC; 按多个字段进行降序排序。
SELECT*FROM user ORDER BY sex,age DESC;

在这里插入图片描述
在这里插入图片描述

5.对查询结果分组(GROUP BY)

GROUP BY对查询结果分组是将查询结果按照1个或者多个字段进行分组,字段值相同的为一组,GROUP BY可以用与单个字段和多个字段。

SELECT sex FROM user GROUP BY sex;

group_concat(字段名) 可以作为一个输出字段来使用,表示分组之后,根据分组结果,使用group_concat()来放置每一组的某一段的值的集合。
group_concat(字段名)是一个函数,作用是输出一个指定的值

SELECT sex,group_concat(name)FROM user GROUP BY sex;

在这里插入图片描述
在这里插入图片描述

6.设置分组条件(HAVING)

HAVING 是用来设置分组条件的条件表达式,用来在分组查询后指定一些条件来输出查询结果 WHERE 语句在聚合前先筛选记录,也就是说作用在GROUP BY和HAVING 子句前,而HAVING 子句在聚合后对组记录进行筛选,HAVING只能用于GROUP BY。

SELECT sex,count(sex) FROM user WHERE age > 15 GROUP BY sex HAVING count(sex)>2;
//count也是一种函数,作用是计数(后续会讲到)

执行顺序:from——(where)——group by—— order by——having——select
在这里插入图片描述

7.限制查询数量(LIMIT)

LIMIT 用于限制查询的数量,常用于分页语句。LIMIT 子句可以被用于强制SELECT 语句返回指定的记录数。LIMIT接收一个或两个数字参数,参数必须是一个整数常量。
(1)如果只给定一个参数,则它表示返回最大的记录行数目。

#检索前六行记录
SELECT*FROM user LIMIT 6;

(2)如果给定两个参数,则第一个参数指定第一个第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是0(而表示1)。

#从第2条数据开始,检索出5条数据
SELECT*FROM user LIMIT 2.5;

在这里插入图片描述

五、字段操作

针对数据库表的字段,可以对字段进行设置为主键、设置为复合主题、添加字段、改变字段类型、字段重命名、字段设置默认值以及设置自增字段的操作。

1.设置为主键

主键是一个表的唯一约束,是不可以为空、不可以重复的字段,如在外卖订单中,填写的手机号码是可以作为主题。根据这个手机号,就可以找到相应的人,它起到唯一标识的作用。
创建表的时候,使用PRIMARY KEY添加主键

CREATE TABLE tbl_name([字段描述省略...],PRIMARY KEY(index_col_name);

在这里插入图片描述
在这里插入图片描述

#创建表
 CREATE TABLE student(
    ->  id int not null,
    -> name varchar(255)not null,
    -> no int not null,
    -> primary key(id))
    -> ENGINE=innodb DEFAULT CHARSET=utf8;
#查看表结构,查看主键
 SHOW CREATE TABLE student;
#删除表主键
 ALTER TABLE student DROP primary key;
#设置no为主键
 ALTER TABLE student add primary key(no);

2.设置为复合主键

复合主键就是由多个字段组成的主键,它就像开启宝藏的钥匙,往往会分成两把或者更多把,当同时插入两把或者多把钥匙时,才能开启宝藏的大门,复合主键也是这样,以多个字段作为复合主键来确定唯一标识。

  • 创建一个人员表person,包含3个字段:id、name、job,将id和name作为复合主键。
#创建person表
 CREATE TABLE person(
    -> id int not null,
    -> name varchar(255)not null,
    -> job varchar(255)not null,
    -> primary key(id,name))
    -> ENGINE=innodb DEFAULT CHARSET=utf8;
 #查看表主键
 SHOW CREATE TABLE person;

在这里插入图片描述

3.添加字段

添加一个手机号码(phone)新字段到user表里面,数据类型为字符串类型。

 ALTER TABLE user add phone varchar(25)not Null;

在这里插入图片描述

4.改变字段类型

可以修改表字段的数据类型,将手机号码(phone) varchar型修改为 char。

ALTER TABLE user modify phone char(25)not NULL;

在这里插入图片描述

5.字段重命名

对已经存在的表结构,如果想对表里的字段名重命名,则需要使用alter table来修改表里的字段,格式为:

ALTER TABLE<表名>change<字段名><字段新名称><字段的类型>

下面将user表里的phone字段改为telephone字段
在这里插入图片描述

6.字段设置默认值

MySQL数据库字段在创建的时候可以设置默认值,也可以修改它的默认值,如果有默认值,也可以将默认值删除。
设置默认值的命令如下所示。

ALTER TABLE 表名 ALTER 字段名 SET default 默认值;

删除默认值的命令如下所示。

ALTER TABLE 表名 ALTER 字段名 DROP default

实际操作:创建一个部门表dept,包含3三个字段:id、deptName、userName,部门名称默认值为软件事业部。
在这里插入图片描述
在这里插入图片描述

7.设置自增字段

MySO1数据库表经常会接主续设置为自增字段。从设计的角度来说,表的主键应尽量设计成一个与务无关的手段,如果将它设计成自馆,则应有索就在开发的时候不用关心这个主键的设定,由数据库自己准护,但是有在高并发下成为瓶颈的风险,当然如果并发并不是非常高的话,一般不会成为瓶颈。如果己控制这个主键值,则更需要付出一点代价来生成这个值,并发问题可以通过扩展应用集群来解决。
在MySQL中定义字段列为自增的属性:AUTO_INCREMENT。

  1. 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个颜编号,编号从1开始,并以1为基数递增。
  2. 当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同于插入NULL值。
  3. 当插入记录时,如果为AUTO_INCREMENT字段明确指定了一个数值,则会出现两种情况:一种如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;一种是如果插入的值大于已编号的值,则会把该值插入到数据列中,下一个编号将从这个新值开始递增
  4. 对于使用MyISAM存储引擎,如果用UPDATE命令更新自增列,若列值与已有值重复,则会出错若列值大于已有值,则下一个编号从该值开始递增;但是对于Inodb存储引擎,UPDATE
    autojneremen段会导致发生报错。
  5. 被DELETE语句册除的ad值,除非在501.中将心重新插入,否则前面空余的id不会复用。
#创建t_zizeng表,设置id为自增字段,但是没有设置成主键,会报错
mysql> CREATE TABLE t_zizeng(id int auto_increment,name varchar(255));
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

#创建t_zizeng表,设置id为自增字段,并且把它设置为主键
mysql>  CREATE TABLE t_zizeng(id int auto_increment,name varchar(255),primary key(id));
Query OK, 0 rows affected (0.01 sec)

#插入一条数据,自增字段的值为null,它会自动生成
mysql> INSERT INTO t_zizeng(id,name)VALUES(null,'小明');
Query OK, 1 row affected (0.01 sec)

#查询t_zizeng表,可以看到id值自动生成为1
mysql> SELECT*FROM t_zizeng;
+----+--------+
| id | name   |
+----+--------+
|  1 | 小明   |
+----+--------+
1 row in set (0.00 sec)

#插入一条数据,自增字段可以不用赋值,它会自动增加
mysql> INSERT INTO t_zizeng(name) VALUES('小刚');
Query OK, 1 row affected (0.01 sec)

#查询t_zizeng表,可以看到id值自动生成为2
mysql> SELECT*FROM t_zizeng;
+----+--------+
| id | name   |
+----+--------+
|  1 | 小明   |
|  2 | 小刚   |
+----+--------+
2 rows in set (0.00 sec)

#插入重复的主键id值,它会报错
mysql> INSERT INTO t_zizeng(id,name)VALUES(1,'小王');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

#手动插入主键id值100,下次自动生成id时会以100为基数
mysql> INSERT INTO t_zizeng(id,name)VALUES(100,'小王');
Query OK, 1 row affected (0.00 sec)

#插入一条数据,自增字段可以不用赋值,它会自动增加
mysql> INSERT INTO t_zizeng(name)VALUES('小红');
Query OK, 1 row affected (0.01 sec)

#查询t_zizeng表,可以看到id值自动生成为101
mysql> SELECT*FROM t_zizeng;
+-----+--------+
| id  | name   |
+-----+--------+
|   1 | 小明   |
|   2 | 小刚   |
| 100 | 小王   |
| 101 | 小红   |
+-----+--------+
4 rows in set (0.00 sec)

#用DELETE语句删除的id值,除非在SQL中将id重新输入,否则前面空余的id不会复用
mysql> DELETE FROM t_zizeng WHERE id=101;
Query OK, 1 row affected (0.01 sec)

#插入一条数据,自增字段可以不用赋值,它会自动增加
mysql>  INSERT INTO t_zizeng(name)VALUES('小张');
Query OK, 1 row affected (0.00 sec)

#可以看到删除的101没有再次使用,而是使用102
mysql> SELECT*FROM t_zizeng;
+-----+--------+
| id  | name   |
+-----+--------+
|   1 | 小明   |
|   2 | 小刚   |
| 100 | 小王   |
| 102 | 小张   |
+-----+--------+
4 rows in set (0.00 sec)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值