一.DDL(数据定义语言:用于定义和管理 SQL 数据库中的所有对象)
1.DDL_数据库
(1)查看所有数据库
show databases;
(2)选择、切换数据库
use 数据库名;
(3)创建数据库
create database (if not exists) 数据库名 (charset=utf8);
(4)删除数据库
drop dabatase (if exists) 数据库名;
(5)修改数据库编码
alter database 数据库名 character set utf8;
2.DDL_表
(1)创建表
create table (if not exists) 表名(
列名 类型 UNSIGNED AUTO_INCREMENT, //定义列为自增的属性,一般用于主键,数值会自动加1
... ...
列名 类型,
PRIMARY KEY (主键1,主键2,...) //可以使用多列来定义主键,列间以逗号分隔
)ENGINE=InnoDB DEFAULT CHARSET=utf8; //ENGINE 设置存储引擎,CHARSET 设置编码
(2)查看所有表
show tables;
(3)查看指定表的创建语句
show create table 表名;
(4)查看表结构
desc 表名;
(5)删除表
drop table 表名;
(5)修改表
(5.1)添加列
alter table 表名 add(
列名 类型,
列名 类型,
... ...
);
(5.2)修改列类型,可能会影响到已经存在的数据
alter table 表名 modify 列名 新类型;
(5.3)修改列名
alter table 表名 change 原列名 新列名 类型;
(5.4)删除列
alter table 表名 drop 列名;
(5.5)修改表名称
alter table 原表名 rename to 新表名;
二.DML(数据操作语言:对表记录的操作(增删改))
(1)插入数据
INSERT INTO 表名称
( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN )
;
【注】
a.如果没有给出要插入的列,那么表示插入所有列
a.值的个数必须等于列的个数,并且顺序必须相同
(2)修改数据
UPDATE table_name SET field1=new-value1, field2=new-value2, ... ...
(where 条件)
;
【注】
如果不写where语句,默认修改所有记录
(3)删除数据
delete from 表名 (where 条件);
【注】
如果不写where语句,默认删除所有记录
Truncate table 表名 与 delete 不同,它是先drop表,再create表,而且无法回滚。
三.DCL(数据控制语言:是一种可对数据访问权进行控制的指令)
(1)创建用户
//用户只能在指定的ip地址上登录
create user 用户名@IP地址 identified by 密码;
//用户可在任意的ip地址上登录
create user 用户名@'%' identified by 密码;
(2)给用户授权(用户 + 权限 + 数据库)
//给用户分派再指定数据库上指定的权限
grant 权限1,...权限n on 数据库.* to 用户名@IP地址;
//给用户分派再指定数据库上的所有权限
grant all on 数据库.* to 用户名@IP地址;
【例】
grant create,alter,drop,insert,update,delete,select on test.* to user@localhost;
(3)撤销授权(用户 + 权限 + 数据库)
//撤销指定用户在指定数据库上的指定权限
revoke 权限1,...权限n on 数据库.* from 用户名@IP地址;
【例】
revoke create,alter,drop on test.* from user@localhost;
(4)查看权限
show grants for 用户名@IP地址;
(5)删除用户
drop user 用户名@IP地址;
四.DQL(数据查询语言:对表中的数据进行查询)
1.DQL_单表查询
(1)标准的select语句
SELECT 列名,...,列名
[ INTO new_table ]
FROM 表名
WHERE 条件
(2)排序 order by
order by 列名 ASC|DESC;
order by 列名1 ASC|DESC, 列名2 ASC|DESC, ... 列名n ASC|DESC;
(3)分组 group by... having ... :HAVING子句可以让我们筛选分组后的各组数据。
SELECT 列名,聚合函数(列名)
FROM table_name
GROUP BY 列名
having 聚合函数(列名) 条件 ;
(4)聚合函数
select count(*)|count(列名) FROM 表名 //求不为null的记录数或者字段数
select max(列名) FROM 表名 //求某列最大值
select min(列名) FROM 表名 //求某列最小值
select avg(列名) FROM 表名 //求某列平均值
select sum(列名) FROM 表名 //求某列总和
select first(列名) FROM 表名 //查询指定列中第一个记录的值。
select last(列名) FROM 表名 //查询指定列中最后一个记录的值
(5)模糊查询like
【通配符】
_ : 匹配单个字符
% : 匹配任意字符
【例如】
SELECT * FROM Websites WHERE url LIKE 'https%';
(6)limit 关键字,常用来做分页处理
limit关键字用来限定查询时的起始行,以及查询的总行数:limit n,m;
n:查询起始下标,从0开始
m:查询的数量
【例如】
一页显示 十 条记录,显示分页后第 三 页的内容:
select *
from 表名
limit 20,10
[公式]:limit (当前页-1)*每页记录数,每页记录数
(7)查询null值
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
(8)IN 操作符
SELECT 列名,...,列名
FROM 表名
WHERE 列名 IN (value1,value2,...valueN);
(9)BETWEEN ... AND ... :选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT 列名,...,列名
FROM 表名
WHERE 列名 BETWEEN value1 AND value2;
(10)别名 as
1.列别名:SELECT 列名 AS 列别名
2.表别名:FROM 表名 AS 表别名
(11)SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中
SELECT 列名,...,列名
INTO 新表
FROM 旧表;
【注】
Mysql不支持SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
mysql> INSERT INTO 新表(runoob_id,runoob_title,runoob_author,submission_date)
-> SELECT runoob_id,runoob_title,runoob_author,submission_date
-> FROM 旧表;
(12)AND & OR 运算符用于基于一个以上的条件对记录进行过滤
AND: 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
OR: 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
(13)SELECT DISTINCT 一个列可能会包含多个重复值,仅仅列出不同(distinct)的值。
SELECT DISTINCT 列名
FROM 表名;
2.DQL_多表查询