MySQL基础笔记

简要笔记,方便查找

单表查询

1)基本查询

SELECT stuName,id,age,sex,gradeName FROM t_student;

SELECT * FROM t_student;

SELECT stuName,gradeName FROM t_student;

2)当满足某一条件的查询,主要利用WHERE

  1.基本条件

SELECT * FROM t_student WHERE id=1;

  SELECT * FROM t_student WHERE age>20;

  2.利用IN,也就是在满足()内的情况

 SELECT * FROM t_student WHERE age IN (21,23);

  SELECT * FROM t_student WHERE age NOT IN (21,23);

  3.利用BETWEEN  AND,在两者之间

SELECT * FROM t_student WHERE age BETWEEN 21 AND 23;

  SELECT * FROM t_student WHERE age NOT BETWEEN 21 AND 23;

  4.利用LIKE,进行模糊查询

SELECT * FROM t_student WHERE stuName LIKE '张三';

  SELECT * FROM t_student WHERE stuName LIKE '张三%';#表示名字开头是张三就行

  SELECT * FROM t_student WHERE stuName LIKE '张三_';#名字只有三个字,前两个是张三

  SELECT * FROM t_student WHERE stuName LIKE '张三__';#名字只有四个字,前两个是张三

  5.利用IS,也就是仅在某一条件下才成立

SELECT * FROM t_student WHERE sex IS NULL;

  SELECT * FROM t_student WHERE sex IS NOT NULL;

  6.利用AND以及OR表示且以及或关系查询

SELECT * FROM t_student WHERE gradeName='一年级' AND age=23;

  SELECT * FROM t_student WHERE gradeName='一年级' OR age=23;

3)去重查询,对于重复的删除

SELECT DISTINCT gradeName FROM t_student;

4)利用ORDER BY进行排序查询,ASC从小到大,DESC从大到小

SELECT * FROM t_student ORDER BY age;

SELECT * FROM t_student ORDER BY age ASC;

SELECT * FROM t_student ORDER BY age DESC;

5)利用GROUP BY进行相同类型分组的查询,一般与GROUP_CONCAT,COUNT,以及 HAVING 和 WITH ROLLUP一同使用

SELECT * FROM t_student GROUP BY gradeName;

#相当于找到每个分类的第一个元素,几乎无意义

SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;

#将每个分类的每一个元素都放在一起,隶属于GROUP_CONCAT(stuName) 这个属性

SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;

#将每个分类的每一个元素都放在一起,隶属GROUP_CONCAT(stuName) 这个属性,但注意COUNT(stuName)>3

SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;

#每个属性最下方额外增加一栏,这一栏的内容是该属性下其余元素之和

6)利用LIMIT进行分页查询

SELECT * FROM t_student LIMIT 0,5;#从第0个元素开始(不包括),后面的5个元素列成一张表

SELECT * FROM t_student LIMIT 5,5;

SELECT * FROM t_student LIMIT 10,5;

聚合函数

计数函数

SELECT COUNT(*) AS total FROM t_grade;
SELECT stuName,COUNT(*)FROM t_grade GROUP BY stuName;

和函数 

SELECT stuName,SUM(source) FROM t_grade WHERE stuName = '张三';
SELECT stuName,SUM(source) FROM t_grade GROUP BY stuName;

 平均函数

SELECT stuName,AVG(source) FROM t_grade WHERE stuName = '张三';
SELECT stuName,AVG(source) FROM t_grade GROUP BY stuName;

 最大值函数

SELECT stuName,course,MAX(source) FROM t_grade WHERE stuName = '张三';
SELECT stuName,MAX(source) FROM t_grade GROUP BY stuName;

 最小值函数

SELECT stuName,course,MIN(source) FROM t_grade WHERE stuName = '张三';
SELECT stuName,MIN(source) FROM t_grade GROUP BY stuName;

 

多表查询

链接查询

  1. 此时相当于去重

SELECT * FROM t_book,t_booktypr WHERE t_book.bookTypeId=t_bookTypr.id;

SELECT bookNqme,author,bookTypeName FROM t_book,t_kookType WHERE t_book.bookTypeId=t_bookTypr.id;

SELECT tb.bookNqme,tb.author,tby.bookTypeName FROM t_book tb,t_kookType tby WHERE tb.bookTypeId=tby.id;#红色代码表明使表有了别称

  2.选择一个为主表,将另一个表附上去(左为尊

  SELECT * FROM t_book LEFT JOIN t_bookType WHERE t_book.bookTypeId=t_bookTypr.id;

  SELECT * FROM t_book RIGHT JOIN t_bookType WHERE t_book.bookTypeId=t_bookTypr.id;

  SELECT * FROM t_book RIGHT JOIN t_bookType WHERE t_book.bookTypeId=t_bookTypr.id AND t_book.price>70;


子查询(以一个查询的结果为条件进行下一轮查询,有继承性,即可以多次子查询)

IN 查询的条件在另一个SELECT语句的结果中

带比较符:子查询可以带比较符
ANY:满足任一条件
ALL:满足所有条件
EXISTS:若子查询到了记录,则进行外层查询

合并查询结果

 UNION 将过结果合并,去掉相同的记录
UNION ALL 不会去掉相同的记录
 

为表与字段取名字

格式:表名 表的别名
格式:属性[AS]别名    #即AS加不加都可以


插入数据

1.给表格所有字段插入数据
格式:INSERT INTO 表名 VALUES(值1,值2,...,值n);
2.插入指定的数据
格式:INSERT INTO表名(属性1,属性2,属性n,)VALUES(值1,值2,...,值n);
3.同时插入多条数据
格式:INSERT INTO表名[属性列表]VALUES(取值列表1),...,(取值列表n);


数据变更 

UPDATE 表名 SET 属性名1=取值1, 属性名2=取值2,...,属性名n=取值n WHERE 条件表达式

删除数据

DELETE FROM 表名 [WHERE 条件表达式]

 

索引:查询速度变快——对应数据结构中的索引存储结构

索引分类
1.普通索引
2.唯一性索引
3.全文索引    #提高查询较大字符串类型的速度,MYSQL默认引擎不支持只有MsISAM引擎支持

4.单列索引 单字段
5.多列索引 多字段
7,空间索引 SPATIAL #  默认也是不支持

创建索引
1.建表时创建索引
CREATE TABLE (
属性名 数据类型[完整性约束条件]
...
数据名 数据类型
[UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY
[别名](属性名1[(长度)][ASC|DESC])
]
)
2.在已存在的表上创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL]INDEX 索引名 ON 表名[别名](属性名[(长度)][ASC|DESC])]
例如:CREATE INDEX index_username_password ON t_student(userName,PASSWORD);

3.用ALTER TABLE 语句来创建索引
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL]INDEX 索引名 [别名](属性名[(长度)][ASC|DESC])]
例如:ALTER TABLE t_student ADD INDEX index_userName(userName);

 

删除索引
DROP INDEX 索引名 ON 表名


视图

创建视图
CREATE[ALGORITHM = {UNDEFIEND|MERGE|TEMPTABLE}]
VIEW 视图名[(属性清单)]
AS SELECT语句
[WITH[CASCADED|LOCAL]CHECK OPTION];

ALGORITHM是可选参数,表示试图选择的算法;
’视图名‘即创建的视图的名称
’属性清单‘是可选参数,指定了视图中各种属性的名词,默认SELECT语句中查询的属性相同
SELECT 语句参数是一个完整的查询语句
WITH CHECK OPTION 是可选参数,表示更新视图时要保证在该视图的权限范围之内;

 

单表视图
多表视图

查看视图
1. DESC 表名
2. SHOW TABLE statue LIKE '表名'
3. SHOW CREATE VIEW 表名
4. 在views表中查看视图详情

修改视图
CREATE OR REPLACE VIEW 语句
ALTER语句

更新视图
将视图中数据通过 插入 更新 删除 来自表中的数据完成视图更新 也就是说数据的操作范围仅限于表中的数据
INSERT
UPDATE SET
DELETE

删除视图
DROP VIEW [IF EXISTS]视图名称 [RESTRICT|CASCADE]

 

常用函数

时间和日期函数
1. CURDATE()返回当前日期
2. CURTIME()返回当前时间
3. MONTH(d)返回日期d中的月份,范围1~12

字符串函数
1. CHAR_LENGTH(s) 计算s中的字符数
2. UPPER(s) 把s中的字母都变成小写
3. LOWER(s)把s中的字母都变成大写

数学函数
1. ABS(X) 求绝对值
2. SQRT(X) 求平方根
3. MOD(X,Y)求余

加密函数
1. PASSWORD(str) 一般对用户加密, 不可逆
2. MD5(str) 普通加密,不可逆
3. ENCODE(str, pswd_str)加密函数,结果是个二进制数,必须使用BLOB类型的字段来保存
4. DECODE(crypt_str,pswd_str) 解密函数

存储过程与函数

创建存储过程和函数

创建存储过程
 CREATE PROCEDURE sp_name([proc_parameter[...]])
[characteristic...]
routine_body
创建存储函数
 CREATE FUNCTION sp_name([dunc_parameter[...]])
RETURNS TYPE
[characteristic...]routine_body


变量的使用

1. 定义变量
DECLARE var_name TYPE
2. 为变量赋值
SET vaer_name = expr
SELECT col_name INTO var_name FROM TABLE t_name WHERE 条件

游标的使用

1. 声明游标
DECLARE cursor_name CURSOR FOR select_statement;
2. 打开游标
OPEN cursor_name;
3. FETCH cursor_name INTO var_name ;
4, CLOSE sursor_name;

流程控制的使用

1. IF 语句
IF 条件 THEN
ELSEIF 条件
ELSE
END IF

2. CASE 语句
CASE case_value
WHEN 条件 THEN
ELSE
END CASE

3. LOOP LEAVE语句
[label:]LOOP

END LOOP
LEAVE label 用于跳出label循环

4. ITERATE 语句
ITERATE label 跳出本次label循环

5. REPEAT 语句
[label:]REPEAT

UNTIL 条件

END REPEAT [label]


调用存储过程与函数

1. 调用存储过程
call sp_name()
2. 调用存储函数
func_name()

查看存储过程和函数
1. 查看状态 SHOW {PROCEDURE |FUNCTION}STATUS
2. 查看定义 SHOW CREATE {PROCEDURE |FUNCTION} sp_name;
3.从ininformation_schema.ROUTINES 表中查看存储和函数信息

修改存储过程和函数
ALTER {PROCEDURE |FUNCTION}sp_name[characteristic..]
characteristic:
{CONTAINS SQL|NO SQL |READS SQL DATA |MODIFIE SQL DATA}
SQL SECURITY {DEFINER| INVOKER}
COMMENT'string'

删除存储过程和函数
DROP {PROCEDURE|FUNCTION}sp_name;


数据的备份与还原

数据的备份
1. musqldump
mysqldump -u username -p dbname table1 table2 ...>BackName.sql
dbname 表示要备份的数据库的名称 table1 table2表示表的名称,没有的话备份整个数据库
BackName.sql表示备份文件名称,可以在前面加一个绝对路径
2,使用sqlyog备份

数据的还原
1. mysql -u root -p [daname]<backup.sql
daname参数表示数据库名称,可以指定,也可以不指定,不指定时,备份文件中有创建数据库的语句,会创建特定的数据库
2. 利用sqlyog

只待江流汲海,万木朝东
原文地址:https://www.cnblogs.com/wanmudong/p/8093366.html