MySQL的一些常用操作
一、SQL的介绍
1、SQL的含义
SQL是用于操作关系型数据库的语言. (操作某种数据库的规则)
2、SQL的通用语法
A.SQL语句以分号结尾(分号:英文分号)
B.SQL语句不区分大小写(建议大家写关键字的时候,写大写)
C.注释
a.单行注释
方式1: -- 单行注释,注意中间有空格
方式2: #这是注释,MySQL专属的注释
b.多行注释
/*这是多行注释,和Java的一样*/
3、SQL语句的分类
A. DDL 操作数据库和表
B. DML 增,删,改 数据库当中表记录
C. DQL 查询数据库当中表记录
D. DCL 客户端授权数据库的操作(了解)
二、MySQL的DDL
I.数据库的操作:【增,删,改,查,使用】
1、创建数据库的操作
A.基本创建操作
CREATE DATABASE 数据库名称;
B.综合创建操作(判断是否存在,指定字符集"不会出现中文乱码问题")
CREATE DATABASE IF NOT EXISTS 数据库名称 CHARACTER SET 具体的编码;
2、查询数据库的操作
A.显示所有的数据库
SHOW DATABASES;
B.显示数据库的创建语句(隐含的作用:查看数据库的字符集)
SHOW CREATE DATABASE 数据库名称;
3、修改数据库的操作
A.修改数据库的字符集
ALTER DATABASE 数据库名称 CHARACTER SET 具体的编码;
4、删除数据库的操作
A.基本的删除操作
DROP DATABASE 数据库名称;
B.判断是否存在,存在则删除的操作
DROP DATABASE IF EXISTS 数据库名称;
5、使用数据库的操作
A.使用数据库
USE 数据库名称;
B.查询正在使用当中的数据库
SELECT DATABASE();
II.表的操作【增,删,改,查】
1、查询表的操作
A.查询数据库当中所有的表信息
SHOW TABLES;
B.查询某个具体表的结构(每个字段的信息)
DESC 表名称;
2、创建表的操作
A.基本的创建格式
CREATE TABLE 表名称 (列名1 类型1,列名2 类型2,列名3 类型3);
B.复制表的操作
CREATE TABLE 新表名称 LIKE 原始表;
C.常用的数据类型
a.整数类型 int
b.小数类型 double(4,1) 4表示有4个数字,1表示精确小数点后1位
c.字符串类型 varchar(24) 24表示最大容纳24个字符
d.日期类型 datetime 需要手动的插入数据到数据库当中
e.时间戳类型 timestamp 可以自动添加当前的系统时间
3、删除表的操作
A.基本的删除操作
DROP TABLE 表名称;
B.判断是否存在,存在则删除的操作
DROP TABLE IF EXISTS 表名称;
4、修改表的操作
A.修改表名称
ALTER TABLE 原始表名称 RENAME TO 新的表名;
B.修改表的字符集
ALTER TABLE 表名称 CHARACTER SET 字符集编码;
C.修改列名
ALTER TABLE 表名称 CHANGE 旧列名称 新列名称 新列数据类型;
ALTER TABLE 表名称 MODIFY 要修改的列名 新的数据类型;
D.增加一列
ALTER TABLE 表名称 ADD 列名称 数据类型;
E.删除一列
ALTER TABLE 表名称 DROP 列名称;
三、 MySQL的DML
1、表记录的添加语句
A.添加指定列的数据
INSERT INTO 表名称 (列名1,列名2,列名3) VALUES (值1,值2,值3);
B.添加所有列的数据
INSERT INTO 表名称 VALUES (值1,值2,值3,值4,值5);
C.注意事项
除了数字类型(整数和小数)以外,其他的都要采用引号(单引号双引号都可以)引起来
2、表记录的删除语句
A.删除指定的某些条记录
DELETE FROM 表名称 [WHERE 条件];
B.删除整个表的操作
a. DELETE FROM 表名称; -- 删除整个表(逐行删除) 效率低
b. TRUNCATE TABLE 表名称; -- 删除整个表(先删表,再建表) 效率高 【推荐使用】
c. DROP TABLE 表名称; -- 删除整个表,直接删除表结构,从数据库当中直接删除掉.
C.《面试题》请问: TRUNCATE 和 DROP 有什么区别?
回答: TRUNCATE 先删除表当中所有的数据,然后会创建一张一模一样的空表。 DROP 直接从数据库当中删除表,不会创建新的表。
3、表记录的修改语句
A.常见修改语句的操作(带有条件)
UPDATE 表名称 SET 列名1=值1,列名2=值2 [WHERE 条件];
B.不常见的修改语句操作(修改所有的情况)
UPDATE 表名称 SET 列名1=值1,列名2=值2;
四、MySQL的DQL
I.基本的一些查询方式
1、基础查询
A.多个字段的查询操作
a.通用写法
SELECT * FROM 表名称;
b.指定列写法
SELECT 列名1,列名2,列名3 FROM 表名称;
B.去掉重复的查询操作
SELECT DISTINCT 列名 FROM 表名称;
C.四则运算计算列的操作
SELECT IFNULL (列名1,0) + 列名2 FROM 表名称;
D.给查询结果起别名的操作
SELECT 列名1 AS 别名1,列名2 别名2 FROM 表名称;
2、条件查询 WHERE格式
A.与 && (理解)
a.写法1: SELECT * FROM 表名称 WHERE age>20 && age<30;
b.写法2: SELECT * FROM 表名称 WHERE age>20 AND age<30;
c.写法3: SELECT * FROM 表名称 WHERE age BETWEEN 20 AND 30;
B.或 || (理解)
a.写法1: SELECT * FROM 表名称 WHERE age=20 || age=30;
b.写法2: SELECT * FROM 表名称 WHERE age=20 OR age=30;
c.写法3: SELECT * FROM 表名称 WHERE age IN(20,30); -- 年龄是20或者30的才可以
C.非 ! (理解)
a.写法1: SELECT * FROM 表名称 WHERE address IS NULL; -- 居住地是Null
b.写法2: SELECT * FROM 表名称 WHERE address IS NOT NULL; -- 居住地不是Null
3、模糊查询 WHERE LIKE
A.两个占位符
a. '_' 下划线,表示1个字符
b. '%' 百分号,表示0个或多个字符
B.案例
a. 查询姓'武'
SELECT * FROM hero WHERE name LIKE '武%';
b. 查询姓'武'只有两个字
SELECT * FROM hero WHERE name LIKE '武_';
c. 查询第二个字是'文'的
SELECT * FROM hero WHERE name LIKE '_文%';
d. 查询只要带有'李'字的
SELECT * FROM hero WHERE name LIKE '%李%';
II.DQL 数据库表记录的查询
1、排序查询
A.基础语法:
ORDER BY 列名称 排序规则
B.排序规则:
ASC 升序(从小到大) 默认的
DESC 降序
C.案例:
-- 按照数学成绩升序排列
SELECT * FROM 学生表 ORDER BY 数学成绩 ASC ;
-- 先按照数学成绩升序排,数学成绩相同就按英语成绩降序
SELECT * FROM 学生表 ORDER BY 数学成绩 ASC , 英语成绩 DESC;
2、聚合函数
A.常用的聚合函数
a. COUNT(列名) -- 求个数
b. MAX(列名) -- 求最大值
c. MIN(列名) -- 求最小值
d. SUM(列名) -- 求和
e. AVG(列名) -- 求平均值
B.注意事项
聚合函数排除为NULL值的列.解决方案:
a.不采用 为NULL的列
b.函数 IFNULL(列名,0)
C.例如: 统计学生表当中,数学成绩的平均分
SELECT AVG(IFNULL(数学成绩,0)) FROM 学生表;
3、分组查询 GROUP BY
A.基础格式
GROUP BY 分组的字段
B.注意事项
a.分组之后,查询的结果是 分组的字段 或者是 聚合函数
b.两个区别 WHERE 和 HAVING
WHERE 分组之前的条件筛选,不满足条件,不参与分组. 后面不能跟聚合函数
HAVING 分组之后的条件筛选,不满足条件,不会显示出来. 后面直接跟聚合函数
C.案例
-- 根据性别进行分组,查询学生表当中的性别和对应的人数
SELECT 性别,COUNT(主键id) FROM 学生表 GROUP BY 性别;
-- 从学生表当中查询成绩大于80,对性别分组要求人数大于2,显示最后的结果
SELECT COUNT(主键id) FROM 学生表 WHERE 成绩>80 GROUP BY 性别 HAVING COUNT(主键ID)>2;
4、分页查询 LIMIT
A.基础格式
LIMIT 起始位置,每页条数
B.计算公式
起始位置 = (当前页数-1)*每页条数
C.案例: 每页条数显示4条,在第6页的写法
SELECT * FROM 表名称 LIMIT 20,4; -- (6-1)*4 =20
五、约束
约束的作用:(为什么要加上约束)
保证数据的完整性正确性。(可以校验数据是否是"重复的"是否是"不是空值"等)
对于每一种约束而言:
(1) 在创建表的时候,添加约束
(2)在表创建之后,添加约束
(3)删除约束
1、非空约束
A.名称:
NOT NULL
B.效果:
不能添加为空的数据.("姓名","商品编号")
C.三种操作的方式:
a.创建表的时候,添加非空约束
CREATE TABLE 表名称 (列名1 数据类型1,列名2 数据类型2 NOT NULL);
b.表创建完毕之后,再添加非空约束
ALTER TABLE 表名称 MODIFY 列名称 数据类型 NOT NULL;
c.删除非空约束
ALTER TABLE 表名称 MODIFY 列名称 数据类型;
2、唯一约束
A.名称:
UNIQUE
B.效果:
不能添加重复的数据,NULL只能有一个.("手机号码")
C.三种操作的方式:
a.创建表的时候,添加唯一约束
CREATE TABLE 表名称 (列名1 数据类型1,列名2 数据类型2 UNIQUE);
b.表创建完毕之后,再添加唯一约束【条件:不能有重复的】
ALTER TABLE 表名称 MODIFY 列名称 数据类型 UNIQUE;
c.删除唯一约束
ALTER TABLE 表名称 DROP INDEX 列名称;
3、主键约束
A.名称:
PRIMARY KEY 主键的关键字
AUTO_INCREMENT 自动增长的关键字(根据上一行的数据进行自动增长)
B.效果:
主键效果: 非空并且唯一,而且在一张表当中只能有一个主键
自动增长: 在上一行的基础上,自动加上1
C.三种操作的方式:
a.创建表的时候,添加主键约束
CREATE TABLE 表名称 (列名1 数据类型1 PRIMARY KEY AUTO_INCREMENT,列名2 数据类型2);
b.表创建完毕之后,再添加主键约束【条件:不能有重复的】
ALTER TABLE 表名称 MODIFY 列名称 数据类型 PRIMARY KEY AUTO_INCREMENT;
c.删除主键约束
ALTER TABLE 表名称 DROP PRIMARY KEY; -- 删除主键约束
ALTER TABLE 表名称 MODIFY 自动增长的列名称 自动增长的数据类型; -- 删除自动增长的效果
4、外键约束
A.名称:
FOREIGN KEY
B.效果:
让两个表之间产生关联,自己表的"外键"连上别人表的"主键"
C.三种操作的方式:
a.创建表的时候,添加外键约束
CREATE TABLE 表名称(
列名1 数据类型1,
列名2 数据类型2,
CONSTRAINT 外键别名 FOREIGN KEY (外键列名称) REFERENCES 其他表名称(其他表主键)
);
b.表创建完毕之后,再添加外键约束
ALTER TABLE 表名称 ADD CONSTRAINT 外键别名 FOREIGN KEY (外键列名)
REFERENCES 其他表名(其他表主键);
c.删除外键约束
ALTER TABLE 表名称 DROP FOREIGN KEY 外键别名;
D.外键级联操作
a.级联的含义:
多个表主外键关系删除和修改的时候,彼此之间会受到影响
b.两个级联的关键字
级联更新 ON UPDATE CASCADE
级联删除 ON DELETE CASCADE
c.添加级联操作的语法
ALTER TABLE 表名称 ADD CONSTRAINT 外键别名 FOREIGN KEY (外键列名称)
REFERENCES 其他表名称(其他表主键) ON UPDATE CASCADE ON DELETE CASCADE;
六、多表关系
1、一对多
A.生活实例:
部门和员工之间的关系
B.建表原则:
一是主键,多是外键.多的外键指向一的主键
2、多对多
A.生活实例:
学生和课程之间的关系
B.建表原则:
设计一个"中间表",至少包含两个字段(两个表的主键)
3、一对一
A.生活实例:
人和身份证的关系
B.建表原则:
在任意一方添加外键(唯一约束 UNIQUE )指向另一方的主键