结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
SQL语句主要分为三个类别:DDL语句、DML语句和DCL语句。
目录
DDL语句
DDL(Data Definition Languages)语句:数据定义语言,是对数据库内部的对象进行创建、删除、修改等操作的语言。它和DML语句的最大区别是DML只是对表内部数据操作,而不涉及表的定义、结构的修改,更不会涉及其他对象。常用的语句关键字包括create、drop、alter等。
连接到mysql数据库
1
mysql -uroot -p<password>
查看数据库
1
mysql> show databases;
创建数据库
1
mysql> create database <database_name>;
选择数据库
1
mysql> use <databaseName>
删除数据库
1
mysql> drop database <database_name>;
创建表
1
2
3
4
5
6
7mysql> create table <table_name>(
<column_name_1> <column_type_1> <constraints>,
<column_name_2> <column_type_2> <constraints>,
<column_name_3> <column_type_3> <constraints>,
......
<column_name_n> <column_type_n> <constraints>
);查看表定义
1
mysql> desc <table_name>;
查看创建表的SQL语句
1
mysql> show create table <table_name>;
删除表
1
mysql> drop table <table_name>;
修改表
修改表类型
1
mysql> alter table <table_name> modify <column_name> <new_column_type>;
增加表字段
1
mysql> alter table <table_name> add column <new_column_name> <new_column_type>;
删除表字段
1
mysql> alter table <table_name> drop column <column_name>;
字段改名
1
mysql> alter table <table_name> change <column_name> <new_column_name> <new_column_type>;
修改字段排序
1
2
3
4
5mysql> alter table <table_name> modify <column_name> <new_column_type> first | after <another_column_name>;
mysql> alter table <table_name> add column <new_column_name> <new_column_type> first | after <another_column_name>;
mysql> alter table <table_name> change <column_name> <new_column_name> <new_column_type> first | after <another_column_name>;更改表名
1
mysql> alter table <table_name> rename <new_table_name>;
DML语句
DML(Data Manipulation Language)语句:数据操纵语句。用于对数据表中记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)。
插入记录
1
2
3
4
5mysql> insert into <table_name> (column_name_1,column_name_2,...,column_name_n) values
(record_1_value_1,record_1_value_2,...,record_1_value_n),
(record_2_value_1,record_2_value_2,...,record_2_value_n),
......
(record_n_value_1,record_n_value_2,...,record_n_value_n);更新记录
1
mysql> update <table_name> set field_1 = value_1,field_2 = value_2,...,field_n = value_n <where condition>;
删除记录
1
mysql> delete from <table_name> <where condition>;
查询记录
1
mysql> select * from <table_name> <where condition>;
去重(distinct)
1
mysql> select <field> distinct from <table_name> <where condition>;
条件查询(>,<,>=,<=,!=,=,or,and,between…and…)
排序(order by)
1
2
3
4mysql> select * from <table_name> <where condition> order by field_1 <desc|asc>,
field_2 <desc|asc>,
......
field_n <desc|asc>;限制(limit)
1
mysql> select * from <table_name> limit <n,m>;
聚合
1
2
3
4
5mysql> select <field_1,field_2,...,field_n> <fun_name>
from <table_name>
where <where condition>
group by field_1,field_2,...,field_n
having <where condition>group by 表示进行分类聚合的字段。
having 表示对分类后的结果再进行条件过滤。表连接
外连接
左连接(left join)
包含所有左表中的记录甚至是右表中没有和它匹配的记录。右连接(right join)
包含所有右表中的记录甚至是左表中没有和它匹配的记录。
内连接(inner join)最常用
子查询(in,not in,=,!=,exists,not exists)
子查询记录数唯一,还可以用=代替in。
记录联合(union,union all)
1
2
3
4
5
6mysql> select * from t1
union | union
all select * from t2
......
union | union
all select * from tn;
DCL语句
DCL(Data Control Language)语句:数据控制语句。用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句的关键字包括grant、revoke等。
创建用户
1
mysql> create user <user_name>@<localhost | ip> identified by '<password>';
查看所有用户(root 用户下)
1
2mysql> use mysql;
mysql> select user from mysql.user;修改用户密码
1
mysql> alter user <user_name>@<localhost | ip> identified by '<new_password>';
删除用户
1
mysql> drop user <user_name>@<localhost | ip>;
用户授权
1
mysql> grant <insert,delete,alter,select | all> on <database>.<*|table_name> to <user_name>@<localhost | ip>;
查看授权(root 用户下)
1
mysql> show grants for <user_name>@<localhost | ip>;
撤销授权
1
mysql> revoke <insert,delete,alter,select | all> on <database>.<*|table_name> from <user_name>@<localhost | ip>;