一.相关概念
数据库:存放数据的仓库
数据库管理系统:操作和管理数据库的大型软件,如mysql
SQL:一种操作 关系型数据库管理系统的语言,定义了一套操作关系型数据库管理系统的统一标准。
关系型数据库:有多张相互连接二维表组成的数据库。
二.SQL
语句分类
1.DDL
DDL操作数据库
查询
查询所有数据库 SHOW DATABASES;
可以看到有四个数据库,这些是安装完之后自带的数据库
查询当前数据库 SELECT DATABASE();
创建
[ ]括起来的是可以不写的内容
删除
DROP DATABASE [IF EXISTS] 数据库名;
使用
USE 数据库名;
DDL操作表
查询
查询当前数据库所有表 SHOW TABLES;
查询表结构 DESC 表名;
查询指定表的建表语句 SHOW CREATE TABLE 表名;
创建
创建表时,要注意所在库,切到想要创建表的库。
修改
添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改字段的数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释][约束];
删除字段 ALTER TABLE 表名 DROP 字段名;
修改表名 ALTER TABLE 表名 RENAME TO 新表名;
删除
删除表 DROP TABLE [IF EXISTS] 表名;
删除指定表,并重新创建该表 TRUNCATE TABLE 表名;
数据类型
数值类型
字符串类型
日期类型
2.DML
添加数据
给指定字段添加数据 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);
注意:
- 字段顺序和值的顺序要一致
- 字符串和日期类型要用单引号
- 数据大小要在范围内
修改数据
UPDATA 表名 SET 字段名1=值1,字段名2=值2,...[where 条件];
注意:如果不写where,就会修改该字段的全部内容。
删除数据
DELETE FROM 表名 [WHERE 条件];
注意:
- where不写,删除整张表的所有数据。
- DELETE不能删除某个字段,应使用updata。
3.DQL
基本查询
SELECT 字段1[AS 别名1],字段2[AS 别名2],字段3[AS 别名3]... FROM 表名;
SELECT * FROM 表名;//查询所有字段
SELECT DISTINCT 字段列表 FROM 表名;//去重
WHERE条件
以及AND && OR || ! NOT
聚合函数
将一列数据作为整体,进行纵向计算
SELECT 聚合函数(字段列表) FROM 表名;
常见的聚合函数,count max min avg sum
注意null不参与运算
分组查询(有点晕)
细节
执行顺序
where->分组->聚合函数->having
where为分组前过滤,having则是分组后过滤
where不能对聚合函数进行判断,而having可以
分组后,查询聚合函数或者分组字段,查询其他字段没有意义
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;\
ASC 升序,可省略
DESC 降序
先按字段1排序,后按字段2
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注意:不同的数据库,实现分页查询的方式不一样
4.DCL
管理用户
查询用户 UES mysql;//使用mysql库
SELECT * FROM user;//查询user表中的所有数据
创建用户 CREATE USER '用户名‘@’主机名‘ IDENTIFIED BY '密码';
若主机名为"%",可以在任意主机访问该数据库
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户 DROP USER '用户名'@'主机名';
权限控制
查询权限 SHOW GRANTS FOR '用户名'@'主机名‘;
授予权限 GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM '用户名’@'主机名';
grant all on *.* to '用户名'@'主机名';//超级管理员
学习自黑马程序员,部分插图来源于黑马程序员