注意:这里以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. TreeListView排序不对

    winForm控件TreeListView按照一定顺序后添加项,后发觉排序顺序自己变了,解决办法: TreeListViewItem viewItem = new TreeListViewItem() ...

  2. git push error. ! [rejected] master -> master (non-fast-forward)

    错误提示: Cheetah@xxxx MINGW64 /e/Projs/enft/data/cv_key_frame (master) $ git push To github.com:Anthony ...

  3. 如何去把内容分享到whatsapp上?

    使用场景,公司利用whatsapp来推广商品,需要把商品和一些基本信息分享到WhatsApp上; 一:在html的head标签里面通过meta标签加上一些分享的基本网站信息,具体代码如下 <me ...

  4. ReactNative使用 react-navigation 详解

    react-navigation是官方主推的导航组件,致力于解决导航卡顿,数据传递,Tabbar和navigator布局,支持redux. 最新版本为3.x,大多文档介绍的是 1.x 或 2.x 的用 ...

  5. 虹软人脸识别 - Android Camera实时人脸追踪画框适配

    在使用虹软人脸识别Android SDK的过程中 ,预览时一般都需要绘制人脸框,但是和PC平台相机应用不同,在Android平台相机进行应用开发还需要考虑前后置相机切换.设备横竖屏切换等情况,因此在人 ...

  6. mysql主从部署

    一.安装环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 192.168.0.173 master 数据库:主 173  centos6.7 192.168.0.1 ...

  7. [#Linux] CentOS 7 安装微信详细过程

    微信安装 微信安装过程如下: 1,下载最新版本tar.gz压缩包 wget https://github.com/geeeeeeeeek/electronic-wechat/releases/down ...

  8. LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation

    2019-06-26 22:19:57.408642475 java.lang.IllegalArgumentException: LoggerFactory is not a Logback Log ...

  9. python3 excel基本操作及格式设置

    #encoding=utf-8 ''' excel基本操作整理 ''' #openpyxl 版本2.5.4 from openpyxl import * import datetime as dt f ...

  10. 复杂json后端解析出现第二层无数据的问题

    自从使用了lombok之后写代码更加爽了 但是突然遇到前端小姐姐传的对象中的数组后端接收不到,查了好长时间无果后就搁置了. 今天突然想找找什么原因.自己写了一个测试的案例,经过测试过后发现是lombo ...