1、MySQL基础概念
mysql逻辑架构如下:
每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行。
MySQL是分层的架构。上层是服务器层的服务和查询执行引擎,下层是存储引擎。虽然有很多不同作用的插件API,但存储引擎API还是最重要的。如果能理解MySQL在存储引擎和服务层之间处理查询时如何通过API来回交互,就能抓住MySQL的核心基础架构的精髓。
数据库系统实现了各种死锁检测和死锁超时机制,InnoDB目前处理死锁的机制是,将持有最少行级排它锁的事务进行回滚。MySQL服务层不管理事务,事务是由下层的存储引擎实现的。
注意,SQL语句一般以';'或者'\g'结束。
数据库(database): 保存有组织的数据的容器。
表(table): 某种特定类型数据的结构化清单。
列(column): 表中的一个字段,所有表都是由一个或多个列组成的。
数据类型(datatype): 所容许的数据的类型,每个表列都有相应的数据类型,它限制该类所存储的类型。
行(row): 是表中的一个记录。
主键(primary key): 是一列(或者一组列),其值能够唯一区分表中每个行。
2、使用MySQLmysql -h host -u username -p 与数据库建立连接
use database_name 选择数据库
show databases 显示所有的数据库
show tables 显示当前数据库下所有的表
show columns from table_name 显示表的列信息,作用和desc table_name是一样的
MySQL支持的其他show语句还有:
show status 显示MySQL服务器状态信息
show create database_name和show create table_name 分别显示创建特定数据库和数据表的MySQL语句
show grants 显示授予用户的安全权限
show errors和show warnings 显示服务器错误或警告信息
3、检索数据SQL语句中最常用的就是select语句了,它用来在一个或多个表中检索数据,select使用示例如下:
select column_name from table_name 从table_name数据表中检索column_name列,检索单个列
select column1_name, column2_name from table_name 检索多个列
select * from table_name 检索所有列
注意,select返回所有匹配的行,但是,如果我们不想每个值都每次出现,怎么办呢?例如,想让上图中输出的id唯一,这样可以再select语句中添加distinct关键字,select distinct id from goods,这样显示结果如下:
有时我们想限制输出的结果,比如返回第一行或前几行,可使用limit子句,如下所示:
select * from goods limit 2 返回前2行结果,注意,当行数不够时,只能返回数据表中有限的行数
select * from goods limit 2, 2 返回从行2开始的2行
当然,我们也可以使用完全限制来进行数据检索:
select goods.id, goods.name from goods 输出goods表中所有记录
4、排序检索数据排序检索数据主要使用select语句的order by子句,根据需要排序检索出的数据,select语句默认返回结果是没有特定顺序的,在排序检索数据时也可以指定排序的方向,比如升序或者降序等,order by子句默认为升序排列。
(这个是降序配列)
有时,我们需要对多个列排序怎么办呢?这时可以使用如下sql语句来执行,select * from goods order by id desc, name,注意,这里是对id进行降序排列,如果id相同时,对name进行升序排列。如果想对多个列进行降序排列,需要对每个列指定desc关键字。
使用order by和limit的组合,我们能够找到一个列中最高或者最低的值,比如这里还用goods表做测试,先给goods表增加一个num字段(alter table goods add num int),并添加上对应的值,最后goods表内容为:
找出剩余数量最多的的水果是: