DDL-数据库操作
1.查询所有数据库
SHOW DATABASES;
2.查询当前数据库:
SELECT DATABASE();
3.创建数据库:
CREATE DATABASE [IF NOT EXISIS]数据库名
4.删除
DROP DATABASE [IF EXISTS] 数据库名
5.使用
USE 数据库名
DDL-表操作-查询
1.查询当前数据库所有表
SHOW TABLES;
2.查询表结构:
DESC 表名;
3.查询指定表的建表语句:
SHOW CREATE TABLE 表名;
注意:DOUBLE(4,1),4代表总位数,1代表小数位数
DDL-表创建
DDL-表操作-修改
1.追加字段
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束]
2.修改字段
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
3.修改表名
ALTER TABLE 表名 RENAME TO 新表名;
4.删除字段
ALTER TABLE 表名 DROP 字段名;
4.DDL-表操作-删除
DROP TABLE [IF EXISTS] 表名;
TRUNCATE TABLE 表名;
注:TRUNCATE删除表并重新创建,表结构还在,只是里面的数据没了。
DML-添加数据
INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2,...);
INSERT INTO 表名VALUES(值1,值2,...);
INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2,...)(值1,值2,...)...;
INSERT INTO 表名VALUES(值1,值2,...)(值1,值2,...)...;
DML-修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2... (WHERE 条件);
没有WHERE条件会修改整张表所有的数据
DML-删除数据
DELETE FROM 表名(WHERE 条件)
没有WHERE条件会删除整张表所有的数据
DELETE不能删除某一个字段的值
DQL-基本查询
1.查询多个字段
SELETE 字段1,字段2,字段3...FROM 表名;
SELETE * FROM 表名;
2.设置别名
SELETE 字段1 [AS 别名1],字段2 [AS 别名2]... from 表名
AS 可以省略不写
3.去除重复记录
加关键字DISITINCT
SELECT DISTINCT 字段列表FROM 表名
DQL-条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
<>或!= 不等于
BETWEEN…AND… 在某个范围之内,包含最小,最大值
IN(…) 在in之后的列表中的值,多选一
IS NULL 是空
LIKE占位符 模糊匹配(_匹配一个字符,%匹配多个字符)
DQL-聚合函数
将一列数据作为一个整体,进行纵向计算
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
注意NULL不参与所有聚合函数的运算
DQL-分组查询
SELETE 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后条件筛选]
HAVING是分组之后对结果进行过滤。
WHERE 不能对聚合函数判断,HAVING可以。
DQL-排序查询
SELECT 字段列表FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式;
ASC: 升序(默认可不写)
DESC:降序
注:多字段排序时,当第一个字段值相同时,才会根据第二个字段排序。
DQL-分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注:
起始索引从0开始,起始索引=(查询页面-1)*每页显示数。
如果查询的是第一页数据,起始索引可以省略不写
DQL-执行顺序
DCL-管理用户
注:主机名可以使用 % 符号通配
DCL-权限控制
常用权限:
MySQL中字符串函数:
CONCAT(s1,s2,s3…) 字符串拼接,拼成一个新字符串
LOWER(str) 将str字符串全部转为小写
UPPER(str) 将str字符串全部转为大写
LEFT(str,n) 从str字符串左边截取n个字符
RIGHT(str,n) 从str字符串右边截取n个字符
LPAD(str,n,pad) 用pad对str左填充,达到n个字符串长度
RPAD(str,n,pad) 用pad对str左填充,达到n个字符串长度
TRIM(str) 去除字符串左右两边的空格
LTRIM(str) 去除字符串左边的空格
RTRIM(str) 去除字符串右边的空格
SUBSTRING(str,start,len) 返回字符串str从start开始的len个长度的字符串。
注:MySQL中字符串索引是从1开始的。
这些内置可以用在WHERE条件后面或者SELECT显示的字段名中。
MySQL数值函数
CEIL(X) 向上取整
FLOOR(X) 向下取整
MOD(x,y) 返回x/y的值
RAND() 返回0-1内的随机数
ROUND(x,y) 求参数x的四舍五入的值,保留y位小数
注:
ORDER BY RAND() 随机排序
MySQL日期函数
MySQL流程函数
举例:
约束
作用于表中字段上的规则,用于限制存储在表中的数据。
目的是保证数据库中数据的正确,有效性和完整性
注:
主键自增不用插入,数据库自动维护
多个约束用空格隔开
自动增长: auto_increment
如果不指定字段,主键自增长字段的值可以用占位符 0或者NULL
decimal(5,2) 表示共存5位数,小数占2位
内连接
SELECT * from 表1 INNER JOIN 表2 on 表1.字段=表2.字段;
重要的是找对两张表要关联的字段
隐式内连接
SELECT * FROM 表1,表2 WHERE 表1.字段=表2.字段;
带有WHERE条件的内连接先连接两张表再WHERE条件筛选
左连接
SELECT * from 表1 left JOIN 表2 on 表1.字段=表2.字段;
右连接
SELECT * from 表1 RIGHT JOIN 表2 on 表1.字段=表2.字段;
注:如果一条SELECT语句要用到多个表,表中有同名字段,就需要 表名.字段名 加以区分
自关联
子查询
标量子查询:子查询返回的结果只有一个值(一行一列)
select avg(score) from student;
列子查询:子查询返回的结果为一列多行。
表级子查询: 子查询返回的结果为多行多列
存储过程
创建存储过程:
CREATE PROCEDURE stu()
BEGIN
SELECT * FROM students;
END
调用存储过程:
CALL stu();
删除存储过程,删除的时候不需要写存储名后的()
DROP PROCEDURE [IF EXISTS] stu;
视图
对SELECT 表的封装
可以理解为一张只读的表,针对视图只能用SELECT,不能用DELECT 和 UPDATE
事务
索引
1.创建索引
CREATE index 索引名 on 表(字段)
如果字段为字符串,需要写明创建表字段的时候字符串的长度
2.调用索引
3.查找索引
SHOW index FROM 表名;
对于主键,系统会自动建立索引
4.删除索引
DROP index 索引名 on 表名;
5.索引优缺点
基于命令行的MySQL
mysql -h MySQL服务器地址 -u 用户名 -p
如果是使用本机的MySQL,-h可以省略