注意:这里以mariadb为例

启动mysql服务

systemctl start mariadb

  

登录mysql

mysql -u root -p

  

SQL语言分类

- 数据定义语言:简称【DDL】(Data Definition Language),用来定义数据库对象:数据库,表,列等。
关键字:create,alter,drop等
- 数据操作语言:简称【DML】(Data Manipulation Language),用来对数据库中表的记录进行更新。关键
字:insert,delete,update等
- 数据控制语言:简称【DCL】(Data Control Language),用来定义数据库的访问权限和安全级别,及创建
用户;关键字:grant等
- 数据查询语言:简称【DQL】(Data Query Language),用来查询数据库中表的记录。关键字:select,
from,where等

  

如果要了解标准的内容,比较推荐的方法是【泛读SQL92】(因为它涉及了SQL最基础和最核心的一些内容),然
后增量式的阅读其他标准。

DDL语句

数据库操作:database

创建数据库

create database 数据库名;
create database 数据库名 character set 字符集;

  

查看数据库
查看数据库服务器中的所有的数据库:

show databases;

  

查看某个数据库的定义的信息:

show create database 数据库名;

  

删除数据库(慎用)

drop database 数据库名称;

  

其他数据库操作命令

切换数据库:

use 数据库名;

  

查看正在使用的数据库:

select database();

  

表操作:table

创建表

create table 表名(
 字段名 类型(长度) 约束,
 字段名 类型(长度) 约束
);

  

比如创建一个用户表

单表约束:

主键约束:primary key
- 唯一约束:unique
- 非空约束:not null

  

主键约束 = 唯一约束 + 非空约束

查看表
查看数据库中的所有表:

show tables;

  

查看表结构:

desc 表名;

  

删除表

drop table 表名;

  

修改表

alter table 表名 add 列名 类型(长度) 约束;   --修改表添加列.
alter table 表名 modify 列名 类型(长度) 约束;  --修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束;  --修改表修改列名.
alter table 表名 drop 列名;          --修改表删除列.
rename table 表名 to 新表名;         --修改表名
alter table 表名 character set 字符集;    --修改表的字符集

  

字段类型
常用的类型有:

DML语句

插入记录:insert

insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表

  

注意:
1. 列名数与values后面的值的个数相等
2. 列的顺序与插入的值得顺序一致
3. 列名的类型与插入的值要一致.
4. 插入值得时候不能超过最大长度.
5. 值如果是字符串或者日期需要加引号’’ ,一般是单引号

  

注意插入的时候如果没有申明列,那么需要插入每一列,不然会报错:column count doesn`t match value count at row xx.

更新记录:update

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;

  

注意:
1. 列名的类型与修改的值要一致.
2. 修改值得时候不能超过最大长度.
3. 值如果是字符串或者日期需要加’’

删除记录:delete

delete from 表名 [where 条件];

  

删除表中所有记录使用【delete from 表名】,还是用【truncate table 表名】?

删除方式:
- delete :一条一条删除,不清空auto_increment记录数。
- truncate :直接将表删除,重新建表,auto_increment将置为零,从新开始。

  

DQL语句

DQL语法顺序
完整DQL语法顺序

SELECT DISTINCT
 < select_list >
FROM
 < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
 < where_condition >
GROUP BY
 < group_by_list >
HAVING
 < having_condition >
ORDER BY
 < order_by_condition >
LIMIT < limit_number >

  

简单查询

查询所有的商品

select * from product;

  

* 表示表的所有字段,也可以指定具体字段,甚至可以给字段取别名

select pname ,price from product;

  

别名查询,使用的as关键字,as可以省略的

select * from product as p;

  

去掉重复值

select distinct price from product;

  

运算查询

select pname,price+10 from product;

  

数据库的运算查询是很消耗时间的,不建议在数据库这样操作,应该将数据在后台程序进行操作,数据库只处理数据,不应该处理逻辑。

条件查询

查询商品价格>60元的所有的商品信息

select * from product where price > 60;

  

符号说明

> ,<,=,>=,<=,<>
like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
  select * from product where pname like '%新%';
in在某个范围中获得值(exists).
  select * from product where pid in (2,5,8);

  

排序

查询所有的商品,按价格进行排序.(asc-升序,desc-降序)

默认就是asc

select * from product order by price;

  

聚合函数(组函数)

特点:只对单列进行操作

常用的聚合函数

sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数

  

获得所有商品的价格的总和:

select sum(price) from product;

  

获得所有商品的个数

select count(*) from product;

  

分组

根据cid字段分组,分组后统计商品的个数

select cid,count(*) from product group by cid;

  

根据cid分组,分组统计每组商品的平均价格,并且平均价格> 60;

select cid,avg(price) from product group by cid having avg(price)>60;

  

注意事项

select语句中的列(非聚合函数列),必须出现在group by子句中
group by子句中的列,不一定要出现在select语句中
聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。

  

分页查询

分页分为逻辑分页和物理分页

逻辑分页:将数据库中的数据查询到内存之后再进行分页。
物理分页:通过LIMIT关键字,直接在数据库中进行分页,最终返回的数据,只是分页后的数据。

  

lIMIT 关键字不是 SQL92 标准提出的关键字,它是 MySQL 独有的语法。
通过 limit 关键字, MySQL 实现了物理分页

SELECT * FROM table LIMIT [offset,] rows

  

子查询

子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和
union等;
但是对应的外部查询必须是以下语句之一:select、insert、update、delete

  

其他查询语句

union 集合的并集(不包含重复记录)
unionall 集合的并集(包含重复记录

  

SQL解析顺序

SELECT DISTINCT
 < select_list >
FROM
 < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
 < where_condition >
GROUP BY
 < group_by_list >
HAVING
 < having_condition >
ORDER BY
 < order_by_condition >
LIMIT < limit_number >

  

然而它的执行顺序是这样的

1 FROM <left_table>
2 ON <join_condition>
3 <join_type> JOIN <right_table>  第二步和第三步会循环执行
4 WHERE <where_condition>  第四步会循环执行,多个条件的执行顺序是从左往右的。
5 GROUP BY <group_by_list>
6 HAVING <having_condition>
7 SELECT 分组之后才会执行SELECT
8 DISTINCT <select_list>
9 ORDER BY <order_by_condition>
10 LIMIT <limit_number> 前9步都是SQL92标准语法。limit是MySQL的独有语法。

 

关于sql解析还有很多,另开一个篇章专门介绍吧

Linux下MySQL的操作(最全)的更多相关文章

  1. Linux下mysql相关操作

    Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...

  2. linux下MySQL安装登录及操作

    linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...

  3. linux下mysql数据库的操作

    本文主要针对linux下mysql数据库的安装,以及数据库的创建和简单的数据库操作进行说明. ①.Mysql数据库的安装: 数据库的安装分为源码安装和rpm安装. 当然对于老手来说需要进行一些自定义的 ...

  4. Linux下mysql的常用操作

    Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; ...

  5. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

  6. linux下的shell操作mysql

    (1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...

  7. Linux下mysql操作

    1.linux下MYSQL的启动与访问 http://www.cnblogs.com/hunter007/articles/2251795.html 2.linux下mysql基本的操作 http:/ ...

  8. Linux下MySQL数据库的备份与恢复

    Linux下MySQL数据库的备份与恢复 作者:Grey 原文地址: Github 语雀 博客园 基于版本 MySQL5.7 Deepin Linux 15.11 xtrabackup-2.4.18 ...

  9. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

随机推荐

  1. solr的命令

    Start the Server If you didn’t start Solr after installing it, you can start it by running bin/solr  ...

  2. python 循环结构(for-in)

    循环结构(for-in) 说明:也是循环结构的一种,经常用于遍历字符串.列表,元组,字典等 格式: for x in y: 循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束 示例1: ...

  3. extjs6 创建工程和打包发布

    准备工作: 下载extjs6的开发包,我这里是试验版:ext-6.6.0-trial.zip.解压到某个目录,我这里解压到:D:\tools\about-ext\ext-6.6.0-trial 目录下 ...

  4. SQL SERVER-Job中Operators搬迁脚本

    选中operators按F7,然后选中对象,生成脚本 USE [msdb] GO /****** Object: Operator [DB_ITDESK] Script Date: 5/30/2019 ...

  5. VMnet、VMnet1和 VMnet8的区别是什么

    1.经常使用虚拟机的人在配置网络的时候在疑惑 虚拟的 网卡 VMnet1 和 VMnet8的差别是什么 如上面的图, 是安装了一台虚拟机,下图是安装了多个网卡以及虚拟机产生的虚拟网卡 VMware N ...

  6. Python读excel——xlrd

    Python读excel——xlrd Python读取Excel表格,相比xlwt来说,xlrd提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: ...

  7. JDBC课程1-实现Driver接口连接mysql数据库、通用的数据库连接方法(使用文件jdbc.properties)

    package day_18; import jdk.internal.util.xml.impl.Input; import org.junit.Test; import java.io.Input ...

  8. el-input maxlength 不限制长度

    背景: 小鱼最近使用 input输入框时想限制输入的长度, type = "number" 时,限制的长度无效,代码如下 <el-input v-model="fo ...

  9. mac下解决中文乱码的问题

    最近在做自己的博客项目,需要在公司和家代码同步,当然代码托管到了码云上面,但是公司是win系统,家里是mac系统,奇怪的是在公司.....算了不废话了,直接正题吧. 就是代码在公司中文显示没毛病,然后 ...

  10. Maven dependencies說明

    一.今天搭建了一个maven项目,在pom.xml文件引入依赖后,发现项目结构中没有Maven Dependencies文件(下图),但是在java Build Path中又可以找到Maven Dep ...