博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下MySQL的操作(最全)
阅读量:6686 次
发布时间:2019-06-25

本文共 4503 字,大约阅读时间需要 15 分钟。

注意:这里以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 
2 ON
3
JOIN
 第二步和第三步会循环执行4 WHERE
 第四步会循环执行,多个条件的执行顺序是从左往右的。5 GROUP BY
6 HAVING
7 SELECT 分组之后才会执行SELECT8 DISTINCT
9 ORDER BY
10 LIMIT
前9步都是SQL92标准语法。limit是MySQL的独有语法。

 

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

转载于:https://www.cnblogs.com/1906859953Lucas/p/10925511.html

你可能感兴趣的文章
QuickStart OpenvirteX
查看>>
spring- properties 读取的五种方式
查看>>
各种加载(转载)
查看>>
Python Scrapy 自动爬虫注意细节(3)
查看>>
在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
查看>>
3 django系列之Form表单在前端web界面渲染与入库保存
查看>>
Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全
查看>>
linux设备驱动归纳总结(六):1.中断的实现【转】
查看>>
可重入函数与不可重入函数【转】
查看>>
js yield
查看>>
Docker 传奇之 dotCloud
查看>>
迅雷下载精简版
查看>>
ElasticSearch 基础<转载>
查看>>
如何使用SVN协调代源代码,多人同步开发
查看>>
shell脚本练习【转】
查看>>
java集合框架 hashMap 简单使用
查看>>
Web Worker
查看>>
$fn、$extends $fn.extends的用法,jquery的插件开发
查看>>
UDP丢包原因
查看>>
Kafka Consumer 启动测试类
查看>>