Mysql基础

Mysql 基础

进入命令行操作:

1.登录MySQL

登录本机
mysql -u 用户名 -p
# 也可不用空格
mysql -u用户名 -p

# 例如
mysql -u root -p  #先输入,回车
然后提示输入密码,回车即可

登录远程mysql:有主机名和端口号,有时也没有端口号
mysql -h 主机 -P 端口 -u 用户名 -p

#也可不用空格
mysql -h主机 -P端口 -u用户名 -p
然后提示输入密码,回车即可

2.登录docker容器中的mysql

[root@192 ~]# docker exec -it 9325256d2d9b /bin/bash
root@9325256d2d9b:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

mysql> exit







DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select

有些版本是上面这个,但目前我认为主要就是三类
参考oracal https://help.aliyun.com/knowledge_detail/158648.html

1.DDL

DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。

1.1 数据库操作

1.创建数据库

创建数据库
create database [数据库名] character set [字符编码];
create database [if not exists] 库名;

create database testdb character set utf8;
Query OK, 1 row affected (0.02 sec)

在这里插入图片描述

2.删除数据库

删除数据库
drop database [数据库名];
drop databases [if exists] 库名;
mysql> drop database testdb;
Query OK, 0 rows affected (0.14 sec)

3.修改数据库

修改数据库编码
mysql> alter database testdb character set gbk;
Query OK, 1 row affected (0.00 sec)

4.查询数据库

查询数据库创建明细信息 
mysql> show create database testdb;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| testdb   | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------------------------------------+
1 row in set (0.02 sec)

查询数据库总数
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.03 sec)

show databases like ‘javacode2018';列出javacode2018库信息。

5.使用数据库

操作数据库一定要先指定数据库,不然会有问题
use [数据库名];
1046 - No database selected
mysql> use testdb;
Database changed

1.2 表操作

1.创建表

create table 表名(
  字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
  字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
  字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表级别的一些设置];

mysql> create table student (
	pid int(20) primary key auto_increment comment '主键',
	personname varchar(32) comment '名字',
	age int default '0' comment '年龄',
	birth datetime comment '生日',
	phone varchar(32) unique not null comment '手机号'
);
Query OK, 0 rows affected (0.02 sec)

2.查询表

查看表信息,有两种命令:
1
mysql> show create table student;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                                            |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `pid` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `personname` varchar(32) DEFAULT NULL COMMENT '名字',
  `age` int(11) DEFAULT '0' COMMENT '年龄',
  `birth` datetime DEFAULT NULL COMMENT '生日',
  `phone` varchar(32) NOT NULL COMMENT '手机号',
  PRIMARY KEY (`pid`),
  UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.07 sec)

2
mysql> desc student;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| pid        | int(20)     | NO   | PRI | NULL    | auto_increment |
| personname | varchar(32) | YES  |     | NULL    |                |
| age        | int(11)     | YES  |     | 0       |                |
| birth      | datetime    | YES  |     | NULL    |                |
| phone      | varchar(32) | NO   | UNI | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
5 rows in set (0.06 sec)

3.修改表

1.重命名
mysql> alter table student rename to studentdemo;
Query OK, 0 rows affected (0.37 sec)

或者
格式:
RENAME TABLE 原表名 TO 新表名;
mysql> rename table aaa to user;
Query OK, 0 rows affected (0.38 sec)

2.增加字段
mysql> alter table studentdemo add createtime datetime;
Query OK, 0 rows affected (0.46 sec)
Records: 0  Duplicates: 0  Warnings: 0

3.删除字段
mysql> alter table studentdemo drop createtime;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

4.修改字段
ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称(这里可以用和原来列同名即可)】 
mysql> alter table studentdemo change column personname name varchar(64) NOT NULL COMMENT '名字AA';
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

5.新增表注释
mysql> alter table user COMMENT='个人信息表';
Query OK, 0 rows affected (2.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

4.删除表

DROP TABLE student;

1.3 索引

1.新增索引

示例:给表person的pid创建唯一
CREATE UNIQUE INDEX ind_person_pid ON person(pid);

----------------------------
UNIQUE为索引类型,可替换索引类型为:
UNIQUE|FULLTEXT|SPATIAL,mysql 支持的其他索引类型分别为primary key,非唯一索引(默认)

2.删除索引

示例:删除表person的ind_person_pid索引
DROP INDEX ind_person_pid ON person;

2.DML

DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。

运算符
= 在set后面是赋值, 在where后面是关系运算

2.1 INSERT

三种方式:
mysql> insert into studentdemo values (2, 'dfsa', 2, '2020-12-26 20:44:34', '778');
Query OK, 1 row affected (0.00 sec)

mysql> insert into studentdemo set name = 'aa' , phone = '1234';
Query OK, 1 row affected (0.00 sec)

mysql> insert into studentdemo values (null, 'dfsa', 2, '2020-12-26 20:44:34', '009'),(null, 'dfsa', 2, '2020-12-26 20:44:34', '89');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

2.2 SELECT

在这里插入图片描述


函数分类
聚合函数(依赖表)  普通函数(不依赖表)
select count(*) 当所有字段都为null,这条记录才不会统计
分页 limit 起始索引 每页显示数量
模糊查询
联合查询 union all
左右连接

1.HAVING和WHERE的差别

1.WHERE过滤行,而HAVING过滤分组。

2.WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。这是一个重要的区别, WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。

在这里插入图片描述

这条语句中,第一行是使用了聚集函数的基本SELECT,它与前面的例子很相像。 WHERE子句过滤所有prod_price至少为10的
行。然后按vend_id分组数据, HAVING子句过滤计数为2或2以上的分组。如果没有WHERE子句,将会多检索出两行(供应商1002,销售的所有产品价格都在10以下;供应商1001,销售3个产品,但只有一个产品的价格大于等于10):

2.子查询

子查询( subquery) ,即嵌套在其他查询中的查询 。在SELECT语句中,子查询总是从内向外处理。

主要用途:

1.利用子查询进行过滤

在这里插入图片描述

虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等

2.作为计算字段使用子查询

在这里插入图片描述

相关子查询(correlated subquery) 涉及外部查询的子查询

任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)

3.组合查询 UNION

多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。 MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并( union) 或复合查询(compound query)。

有两种基本情况,其中需要使用组合查询:
 在单个查询中从不同的表返回类似结构的数据
 对单个表执行多个查询,按单个查询返回数据

组合查询和多个WHERE条件

多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。换句话说,任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出,在以下段落中可以看到这一点。这两种技术在不同的查询中性能也不同。因此,应该试一下这两种技术,以确定对特定的查询哪一种性能更好。

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

在这个简单的例子中,使用UNION可能比使用WHERE子句更为复杂。但对于更复杂的过滤条件,或者从多个表(而不是单个表)中检索数据的情形,使用UNION可能会使处理更简单。

UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个UNION关键字)。
 UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)。
 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
如果遵守了这些基本规则或限制,则可以将并用于任何数据检索任务。

UNION从查询结果集中自动去除了重复的行,使用UNION ALL, MySQL不取消重复的行

SELECT语句的输出用ORDER BY子句排序。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY子句。
4.函数
1)聚合函数:
 avg() 平均值
 count() 行数 括号内可以加*
 max() 最大值
 min() 最小值
 sum() 和
2)字符串函数:
 concat(str1,str2,……,strn) 连接
 insert(str,pos,len,newstr) 替换:将字符串str从pos位置开始,len个字符长的子串替换为字符串newstr
 lower(str)   小写
 upper(str)   大写
 substring(str,num,len)  查找:返回字符串str的第num个位置开始长度为len的子字符串 (注:下标从1开始)
3)时间日期函数:
 curdate() 年-月-日
 curtime() 时:分:秒
 nuw()  年-月-日 时:分:秒
 week(date) 返回日期date为一年中的第几周
 month(date) 返回日期date的月份
 year(date) 返回日期date的年份
 hour(time) 返回时间time的小时值
 minute(time) 返回时间time的分钟值
 datediff(date1,date2) 返回日期参数date1和date2之间相隔的天数
 adddate(date,n)  计算日期参数date加上n天后的日期
4)数学函数:
 ceil(x)  向上取整
 floor(x) 向下取整
 rand()  返回0到1之间的随机数:0.*****……

1.聚合函数

在这里插入图片描述

2.文本处理函数

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

3.日期处理函数
在这里插入图片描述

4.数字处理函数
在这里插入图片描述

2.3 UPDATE

mysql> update studentdemo set name = 'aa',age = 20 where pid = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2.4 DELETE

mysql> delete from studentdemo;
Query OK, 5 rows affected (0.02 sec)

mysql> truncate table studentdemo;
Query OK, 0 rows affected (0.01 sec)

truncate 删除表时,会把主键对应的序号重置为1,删除数据比delete效率更高

3.DCL

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 、commit、rollback等。 DCL 比较简单,主要用于授予或收回访问数据库的权限,以及数据库事务的提交和回滚。

--  显示数据库中各表的状态 引擎 大小 等
show table status from  medchart_context_content; 
show create table medchart_context_content.t_content_data;
use information_schema;

-- 查看数据库总占用空间
select concat(round(sum(data_length/1024/1024/1024),2),'GB') as data from tables;
select * from tables;

show engines;

-- 用户权限管理
show grants for data_team;
GRANT ALL PRIVILEGES ON wordpress.* TO 'username'@'localhost' IDENTIFIED BY 'password';

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

参考

《Mysql 必知必会》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值