1). SQL语句可以单行或多行书写,以分号结尾。
2). SQL语句可以使用空格/缩进来增强语句的可读性。
3). MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4). 注释: 单行注释:-- 注释内容 或 # 注释内容 多行注释:/* 注释内容 */
分类 | 说明 |
---|---|
DDL | 数据定义语言,用来定义或修改(重定义)数据库对象(数据库,表, 字段) |
DML | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | 数据查询语言,用来查询数据库中表的记录 |
DCL | 数据控制语言,用来创建数据库用户、控制数据库的 访问权限 |
-- 显示所有数据库
show databases;
-- 查询当前所在数据库
select database() ;
-- 创建数据库
CREATE DATABASE 数据库名;#使用默认数据集
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
-- 删除数据库
drop database [if exists] 数据库名;
-- 切换到另一个数据库test
use test;
-- 显示当前数据库中的所有表
show tables;
-- 查看数据表结构
-- describe 表名;
desc 表名;
-- 创建数据表
CREATE TABLE pet (
name VARCHAR(20) [COMMENT ‘字段注释’],
owner VARCHAR(20), -- 最大长度为20,也就意味着如果超过20将会报错
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE
)[COMMENT ‘表注释’];
-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
-- 删除表
DROP TABLE [IF EXISTS] 表名;
-- 删除指定表, 并重新创建表(一般不用)
TRUNCATE TABLE 表名;
MySQL数据类型
在MySQL中常用数据类型主要分为以下几类
类型 | 大小 | 描述 |
---|---|---|
tinyint | 1B | 小整数值 |
samllint | 2B | 大整数值 |
mediumint | 3B | 大整数值 |
int | 4B | 大整数值 |
bigint | 8B | 极大整数值 |
float | 4B | 单精度浮点数 |
double | 8B | 双精度浮点数 |
decimmal | 小数–依赖于M(精度)和D(标度)的 值 |
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3B | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3B | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1B | 1901 至 2155 | YYYY | 年份值 |
DATETIME | 8B | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4B | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
-- 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [约束] [COMMENT 注释];
-- 修改字段数据类型(包括增加约束)
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度) [约束];
-- 修改字段名和字段数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [约束] [COMMENT 注释];
-- 删除字段
ALTER TABLE 表名 DROP 字段名;
-- 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
-- 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
-- 批量添加数据
-- 给指定字段批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
-- 给全部字段批量添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
插入数据时,指定的字段顺序需要与值的顺序一一对应
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
update employee set name = '小昭' , gender = '女' where id = 1;
DELETE FROM 表名 [WHERE 条件] ;
delete from employee where gender = '女';
-- 删除数据后,导致自增id不连续,可以调整
SET @auto_id = 0;# 会话用户自定义变量,仅会话期间有效
UPDATE 表名 SET 自增字段名 = (@auto_id := @auto_id + 1);
ALTER TABLE 表名 AUTO_INCREMENT = 1;
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数 据。
DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
当进行删除全部数据操作时,datagrip会提示我们,询问是否确认删除,我们直接点击 Execute即可。
-- 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;
* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)
-- 字段设别名,as可省略
SELECT 字段1 [AS 别名1] , 字段2 [AS 别名2] ... FROM 表名;
SELECT 字段1 [别名1] , 字段2 [别名2] ... FROM 表名;# 可省略as
-- 去除重复记录查询
SELECT DISTINCT 字段列表 FROM 表名;
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
运算符 | 功能 |
---|---|
>、>=、<、<=、=、<>或!= | 比较运算符 |
between…and… | 在某个范围之内(含最小、最大值) |
in(…) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
IS NULL | 是null? |
AND 或 && | 并 |
OR 或 || | 或 |
NOT 或 ! | 非 |
SELECT 聚合函数(字段列表) FROM 表名 ;
NULL值是不参与所有聚合函数运算的。
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件 ];
where与having的区别
1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
2.判断条件不同:where不能对聚合函数进行判断,而having可以。
3.执行顺序: where > 聚合函数 > having
-- 支持多字段分组, 具体语法为 : group by columnA,columnB
select dept_id,count(*) from emp where age>25 group by dept_id;
-- 统计每个部门age>25的人数
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
ASC : 升序(默认值) DESC: 降序
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
-- 查询用户和权限
select * from mysql.user;
-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
-- 删除用户
DROP USER '用户名'@'主机名' ;
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
-- 授予权限
SHOW GRANTS FOR '用户名'@'主机名';
-- 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';