SQL语句分类
- DDL(Data Definition Language):数据定义语言,定义数据库对象:库、表、列等;创健、删除、修改:库、表结构
- DML(Data Manipulation Language):数据操作语言,定义数据库记录(数据);增、删改、:表记录
- DQL(Data Query Language):数据查询语言、查询记录(数据)
- DCL(Data Control Language):数据控制语言,定义访问权限和安全级别;对用户的创健以及授权
数据库中所有字符串必须使用单引号
DDL
- 查看所有数据库:
SHOW DATABASE
- 切换数据库:
USE 数据库名
- 创健数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8]
- 查看数据库创健语句:
SWHO CREATE DATABASE 库名
- 删除数据库:
DROP DATABASE [IF EXISTS] mydb1
- 修改数据库编码:
ALTER DATABASE mydb1 CHARACTER utf8
- 显示所有表:
SHOW TABLES
- 创健表:
CREATE TABLE [IF NOT EXISTS] 表名 ( 列名 列类型, 列名 列类型, ... 列名 列类型, );
- 查看表的创健语句:
SHOW CREATE TBLE 表名
- 查看表结构:
DESC 表名
- 删除表:
DROP TABLE 表名
- 添加一个列:
ALTER TABLE 表名 ADD (列名,列类型)
- 修改列类型:
ALTER TABLE 表名 MODIFY 列名 列类型
- 删除一个列:
ALTER TABLE 表名 DROP 列名
- 修改表名称:
ALTER TABLE 表名 RENAME TO 新名
- 修改列名称:
ALTER TABLE 表名 CHANGE COLUMN 原列名 新列名 列类型
数据类型
https://dev.mysql.com/doc/refman/5.7/en/data-types.html
int: 整型
double: 浮点型,double(5,2),表示最多5位,其中必须有2位是小数
decimal:浮点型,在表单金额方面使用该类型,因为不会出现精度确实问题
char: 固定长度字符串类型:char(255),最大值255,数据长度不足指定长度时,会补足到指定长度,固长比定长节省空间
varchar:可变长度字符串类型:varchar(65535),会浪费一个字节记录长度
text(clob):mysql独有数据类型,可以存储超长字符串
blob: 二进制数据类型
data:日期类型yyyy-MM-dd
time:时间类型hh:mm:ss
timestamp:时间戳类型
DML
- 插入数据
INSERT INTO 表名(列名1,列名2,....) VALUES(值1,值2,.....)
#给多少插多少
INSERT INTO 表名 values(值1, 值2....)
#默认插入所有列 - 修改数据
UPDATE 表名 SET 列名=列值, 列名=列值...
#全修改
UPDATE 表名 SET 列名=列值 WHERE sname='zhangsan'
#全修改
条件必须是boolean类型的值或表达式
运算符:=、!=、<>、>、<、>=、<=、BETWEEN…数值AND…数值、IN(…集合)、IS NULL、NOT、OR、AND
age=null#永远是False,所以用 IS NULL
- 删除数据
DELETE FROM 表名 where age=50;
TRUNCATE TABLE 表名
:DDL语句,先删除drop该表,然后create该表,无法回滚
DCL
一般一个项目创健一个用户,一个项目对应的数据库只有一个
- 创健用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码' # %表示任意
- 给用户授权
GRANT 权限1,权限n ON 数据库.* TO 用户名@IP地址 #ALL
表示所有权限 - 撤销授权
REVOKE 权限1,权限n ON 数据库.* FROM 用户名@IP地址
- 查看权限
SHOW GRANTS FOR 用户名@IP地址
- 删除用户
DROP USER 用户名@IP地址
DQL
1.字段(列)控制
- 查询所有列
SELECT * FROM 表名
- 查询指定列
SELECT 列1,列n FROM 表名
- 完全重复的记录只查询一次
SELECT DISTINCT * FROM 表名
SELECT DISTINCT sal FROM emp
- 列运算
1.数量类型的列可以做加、减、乘、除:SELECT * ,sal+1.5 FROM emp
2.字符串类型可以做连接运算:SELECT CONCAT('STR', sal) FROM EMP
3.转换NULL值:SELECT IFNULL(comm,0)+100 FROM emp
4.给列起别名:SELECT IFNULL(comm,0)+100 AS 奖金 FROM emp
5.给表起别名:SELECT a.name b.name FROM emp a, detp b
- 条件判断
1.条件查询:与前面DML的条件一样
2.模糊查询:
SELECT * FROM 表名 WHERE LIKE ''
百分号表示若干个任意字符,下划线表示单个任意字符
2.排序
- 升序
SELECT * FROM 表名 ORDER BY 列名 ASC
- 降序
SELECT * FROM 表名 ORDER BY 列名 DESC
- 多列排序
SELECT * FROM emp ORDER BY 列名 ASC,列名 DESC ...
使用升序第一个列名,如果相等,使用第二个列名排序,以此类推
3.聚合函数
- COUNT
SELECT COUNT(*) FROM 表名
计算表中所有列都不为NULL的记录的行数 - MAX
SELECT MAX(列名) FROM 表名
查询表中指定列的最高值 - MIN
SELECT MIN(列名) FROM 表名
查询表中指定列的最低值 - SUM
SELECT SUM(列名) FROM 表名
查询指定列的和 - AVG
SELECT AVF(列名) FROM 表名
查询指定列的平均值
4.分组查询
- 把记录使用某一列进行分组,然后查询组信息
SELECT 分组列, 集合函数 FROM 表 GROUP BY 分组列
#分组列是主信息
SELECT 分组列, 集合函数 FROM 表 WHERE ... GROUP BY 分组列 HAVING count(*) > 2
#分组前条件WHERE 分组后条件HAVING
5.LIMIT子句
- LIMIT用来限定查询结果的起始行,以及总行数
SELECT * FROM emp LIMIT 4,5
#从第四行开始查,查5行 - 分页,设当前页为n,每页显示m
SELECT * FROM emp LIMIT (n-1)*m, m
6.执行顺序
SELECT
FROM
LIMIT
WHERE
GROUP BY
HAVING
ORDER BY