1,sql定义
SQL:Structure Query Language(结构化查询语言)
被国际化标准组织(ISO)采纳为关系型数据库语言的国际标准,也就是说所有关系型数据库都支持SQL。各个数据库厂商都支持SQL标准,但是每个数据库厂商都在标准上做了扩展。被誉为第四代开发语言,你只需要告诉他"做什么",而不必指明"怎么做"。
各个数据库厂商都支持SQL,在此基础上也都有自己的扩展功能。扩展功能是指特定的关键字及语句。
2,sql的分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库,表,列等;
DML(Data Manipulation Language):数据操作语言,用来操作(增删改)表中的记录;
DQL(Data Query Language):数据查询语言,用来查询记录;
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
3,sql通用语法
1,SQL语句可以单行或多行书写,以分号结尾。
2,SQL语句可以使用空格,缩进来增强语句的可读性。
3,MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4,注释:
单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
多行注释: /*注释内容*/
4,mysql常用sql语句
(1)常用DDL语句
查询所有数据库
SHOW DATABASES();
查询当前数据库
SELECT DATABASE();
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
使用数据库
USE 数据库名;
查询当前数据库所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
创建表
CREATE TABLE 表名{
字段1 数据类型 [约束条件] [COMMENT 字段注释],
字段1 数据类型 [约束条件] [COMMENT 字段注释],
}[表注释];
删除表
DROP TABLE [IF EXISTS] 表名;
删除表再重新创建该表
TRUNCATE TABLE 表名;
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改数据类型
ALTER TABLE 表名 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
(2)常用DML语句
添加数据INSERT
给指定字段添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2...);
给全部字段添加数据
INSERT INTO 表名 VALUES (值1,值2,...);
批量添加数据
INSERT INTO 表名 (字段名1,字段名,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
PS:
插入字段顺序应当与值的顺序是对应的。
字符串和日期类型的数据应该包含在单引号中。
插入的数据大小应该在字段的规定范围内。
删除数据DELETE
DELETE FROM 表名 [WHERE 条件];
更新数据UPDATE
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2, ...[where 条件];
(3)常用DQL语句
基本语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
基本查询
查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名;
设置别名
SELECT 字段1 [AS 别名],字段2 [AS 别名] ... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
条件查询
聚合函数
将一列数据作为一个整体,进行纵向计算。
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
注意null值不参与所有的聚合函数运算。
分组查询
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
ASC 升序 (默认);DESC 倒序;
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注意:
起始索引从0开始
分页查询是数据库方言,不同 数据库有不同的实现,Mysql是LIMIT
如果查询第一页的数据,起始索引可以省略,直接简写成 LIMIT 10;
DQL语句的执行顺序
(4)常用DCL语句
查询mysql用户
USE mysql;
SELECT * FROM user;
创建用户
CREATE USER '用户名'@'主机名' identified by '密码';
主机名是控制这个用户从哪个主机才能访问数据库,任意主机都可以访问可以配置为%;
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
DROP USER '用户名'@'主机名';
用户权限项(这里仅包含一部分常用的权限)
ALL 所有权限
SELECT 查询权限
INSERT 插入权限
UPDATE 修改权限
DELETE 删除权限
ALTER 修改表权限
DROP 删除数据库、表、视图权限
CREATE 创建数据库、表权限
查询当前用户的权限
SHOW GRANTS;
查询指定用户的权限
SHOW GRANTS FOR '用户名'@'主机名';
该用户权限为USAGE,只能登录mysql,无法进行任何操作。
授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
赋予wjl用户对于test1数据库所有表的查询权限
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
撤销wjl用户对test1数据库所有表的查询权限
修改用户权限后需要刷新一下权限信息
flush privileges;
PS:
多个权限使用逗号分割
授权时,数据库名和表名可以使用*进行通配,代表所有。
赋予wjl用户所有的表的所有权限
grant all on *.* to 'wjl'@'%';