SQL是结构化查询语言(Structure Query Language)的缩写,主要分为三个类别:DDL(Data Definition Languages)、DML(Data Manipulation Language)、DCL(Data Control Language)
DDL
数据定义语言,定义了不同的数据段、数据库、表、列、索引等数据库对象。
1. 创建数据库
使用如下命令创建数据库:
create database dbname
![](https://img.haomeiwen.com/i15393961/bece5174baa4fce8.jpg)
如果想知道有哪些数据库,则可以使用如下的命令
show databases;
![](https://img.haomeiwen.com/i15393961/abdc607a803acf3c.jpg)
除了自己创建的数据库之外,有一些数据库是MySQL自己原生提供的:
- information_schema:主要存储系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息
- mysql:存储了系统的用户权限信息
- test:测试数据库
定义好数据之后,使用如下的命令来切换数据库
use dbname;
使用如下数据库来查看数据库中的数据表
show tables
![](https://img.haomeiwen.com/i15393961/c9a94307493f7b55.jpg)
2. 删除数据库
删除数据库使用如下语法
drop database;
3. 创建表
创建数据表的语法如下:
create table my_table (
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
...
column_name_n column_type_n constraints,
)
![](https://img.haomeiwen.com/i15393961/f43ddbc6ecfe01a9.jpg)
表创建完毕后,如果需要查看表的定义,可以使用如下命令
desc tablename
![](https://img.haomeiwen.com/i15393961/84d23d1d86aae9c2.jpg)
desc语句不够清晰,如果想查看更清晰的语句可以使用如下命令
show create table account \G;
\G可以使记录按照字段竖向排列
![](https://img.haomeiwen.com/i15393961/ccad178249aca7c4.jpg)
4. 删除表
使用如下命令删除表
drop table tablename;
5. 修改表
表结构的更改需要使用alter table 语句
修改表字段类型
alter table tablename modify [column] column_definition [first | after column_name]
![](https://img.haomeiwen.com/i15393961/de35886545b79492.jpg)
增加字段
alter table tablename add [column] colulmn_definition [first|after column_name]
![](https://img.haomeiwen.com/i15393961/ff7f1bcd1c4deff3.jpg)
删除字段
alter table tablename drop [column] column_name;
![](https://img.haomeiwen.com/i15393961/6dc680aeacabe51b.jpg)
字段改名
alter table tablename change [column] old_column new_cloumn column_definition [first | after column]
![](https://img.haomeiwen.com/i15393961/0bb5cb186d8c2305.jpg)
修改字段排列顺序
新增加的字段默认是在表的最后位置
![](https://img.haomeiwen.com/i15393961/5598314f470c4372.jpg)
更改表名
alter table table rename new_name;
![](https://img.haomeiwen.com/i15393961/09107271e4847c01.jpg)
DML
数据操纵语言,用于添加、删除、更新、查询数据库记录,并检查数据完整性。
插入记录
insert into table (field1, field2, field3,...) values (value1, value2, value3, ...);
![](https://img.haomeiwen.com/i15393961/1c3556f0d8a143cd.jpg)
可以一次性插入多条记录
更新记录
update table set field1=value1,field2=value2,... [where condition]
![](https://img.haomeiwen.com/i15393961/bf9b239ef9949f96.jpg)
删除记录
delete from table [where condition]
![](https://img.haomeiwen.com/i15393961/e3273dd1ea4cd433.jpg)
查询记录
(1)查询
select * from table [where condition];
![](https://img.haomeiwen.com/i15393961/a3a2b58ba5dcbc49.jpg)
这里的*表示所有的字段,也可以显式的指明字段
select field1, field2, field3,... from table [where condition]
(2) 查询去重
select distincrt field1,field2,field3,.... from table [where condition]
(3)条件查询
sql中支持这些条件表达式
>,>=,<,<=,=,!=
此外,多个条件之间可以使用and,or等逻辑运算符进行连接
(4)排序和限制
select field1,field2,field3,.... from table order by field1 [desc|asc],field2 [desc|asc],...
其中desc和asc是排序顺序关键字,desc表示按照字段进行降序,asc表示按照字段进行升序。
如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序
如果只希望结果显示一部分,可以使用如下语法
select * from table limit offset_start,row_count
offset_start表示记录的起始偏移量,row_count表示显示的行数。默认情况下起始偏移量为0,只需要给出row_count即可。
(5)聚合
select [field1, field2,...,fieldn] fun_name from table [where condition] [group by field1, field2,...] [with rollup] [having condition]
fun_name表示聚合函数,常见的有sum,count,max,min,group by表示分组聚合,with rollup表示是否对分类聚合后的结果进行再汇总,having表示对分类后的结果再进行条件过滤。(注意,having是对聚合后的结果进行过滤,where是对聚合前的结果进行过滤)
![](https://img.haomeiwen.com/i15393961/2c4d37495fe854cb.jpg)
(6)表连接
当同时需要显示多个表中的字段时,就需要用到表连接。表连接分为内连接和外连接。
![](https://img.haomeiwen.com/i15393961/f19ec340289ab659.jpg)
外连接又分为左连接和右连接:
左连接:包含内连接的数据以及左表中不与右表匹配的记录
右连接:包含内连接的数据以及右表中不与左表匹配的记录
![](https://img.haomeiwen.com/i15393961/6f96219412977af9.jpg)
![](https://img.haomeiwen.com/i15393961/7eecf5613e614fd0.jpg)
右连接可以和左连接相互转化。
(7)子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询。用于子查询的关键字主要包括in、not in、=、!=、exists、not exists。
![](https://img.haomeiwen.com/i15393961/7d656661ae7dacac.jpg)
![](https://img.haomeiwen.com/i15393961/9b4cbf121e7e409c.jpg)
如果子查询记录数唯一,也可以用=代替in。
某些情况下,子连接也可以转化为表连接。
(8)联合查询
可以使用如下语法进行联合查询
select * from t1 union | union all select * from t2
![](https://img.haomeiwen.com/i15393961/f90f4035a5972803.jpg)
DCL
数据控制语言,用于控制不同数据段直接的许可和访问级别的语句,主要用于定义数据库、表、字段、用户的访问权限和安全级别。
比如,创建一个用户,具有某数据库下所有表的插入/删除权限
![](https://img.haomeiwen.com/i15393961/827babf4ef9bbbc8.jpg)
如果想更改用户权限
![](https://img.haomeiwen.com/i15393961/0cbc1c16656e10c6.jpg)
使用帮助
可以使用如下命令显示帮助文档
![](https://img.haomeiwen.com/i15393961/2f7dfd1623eb0a8d.jpg)
![](https://img.haomeiwen.com/i15393961/a7af688cf3c08be6.jpg)
![](https://img.haomeiwen.com/i15393961/5e7597e81c5f5a26.jpg)
如果想要快速查询某项语法,可以使用如下命令
![](https://img.haomeiwen.com/i15393961/075aadbe4576fde9.jpg)
![](https://img.haomeiwen.com/i15393961/63df088d57e35c38.jpg)
查询元数据信息
在Mysql5.0之后,提供了一个数据库information_schema,用来记录MySQL的元数据信息,元数据指的是数据的数据,比如表名、列名、列索引、索引名等各种属性名称。这个库是一个虚拟数据库,库里显示的表也不是实际存在的物理表,而是视图。
![](https://img.haomeiwen.com/i15393961/1fa46b0e15849d82.jpg)
下面是一些常用的视图
SCHEMATA:该表提供了当前MySQL实例中所有数据库的信息
TABLES:该表提供了关于数据库中的表的信息,表类型,表引擎
COLUMNS:该表提供了表中的列信息
STATISTICS:该表提供了关于表索引的信息
网友评论