SQL语句
1、DDL语句 -- 操作数据库以及表的create,drop,alter等
2、DML语句 -- 对表数据进行insert,delete,update
3、DQL语句 -- 对表数据进行各种维度select查询(简单查询、条件查询、模糊查询、分组查询)
4、DCL语句 -- 关于数据库权限设置,这里不介绍
MySQL数据库约束 -- 保证数据的正确性、有效性和完整性
主键约束,唯一约束,非空约束
数据库的安装与使用
- 数据库的卸载
1、打开电脑服务窗口,关闭MySQL服务器并且卸载一切与MySQL相关的服务
window+r -> 输入services.msc -> 找到并停止MySQL相关服务
2、卸载MySQL所有功能模块
3、查找MySQL安装目录(一般在C盘Program File 或x86两个文件夹),删除可能的残余文件夹。C盘的隐藏文件中有一个ProgramData文件夹,里面MySQL的相关文件也需卸载
- 数据库的安装
到官网下载安装包 ,开始点击安装,在之前未安装或完全卸载的情况下一直下一步(注意用户名、密码就行),可在cmd窗口输入mysql -V检测安装是否成功
- 数据库服务的启动
方法一,在服务器窗口找到MySQL80停止或启动
方法二,以管理员身份运行cmd,输入net start mysql80启动服务,
MySQL语句(注意结尾的分号)
DDL语句(关键词:create,drop,alter)
在cmd下演示 ->进入MySQL数据库 -- mysql -u用户名 -p密码
创建数据库
- 直接创建数据库 -- CREATE DATABASE 数据库名;
- 判断是否存在并创建数据库 -- CREATE DATABASE IF NOT EXISTS 数据库名;
- 创建数据库并指定字符集(编码表,例如gdk,utf8) -- CREATE DATABASE 数据库名 CHARACTER SET 字符集;
查找数据库
- 查看所有MySQL数据库 -- SHOW DATABATES;
- 查看某个数据库的定义信息 -- SHOW CREATE DATABASE 数据库名;
修改数据库
-
修改数据库字符集格式 -- ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
删除数据库
- 删除数据库 -- DROP DATABASE 数据库名;
使用数据库
- 查看正在使用的数据库 -- SELECT DATABASE();
- 使用/切换数据库 -- USE 数据库名;
DDL操作表 --> 前提先使用某个数据库
创建表
- 创建表 -- CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);
- 快速创建一个表结构相同的表 -- CREATE TABLE 新表名 LIKE 旧表名;
MySQL中的我们常使用的数据类型如下:
类型 | 描述 |
int | 整型 |
double | 浮点型 |
varchar | 字符串型 |
data | 日期类型:yyyy-MM-dd |
查看表
- 查看某个数据库中的所有表 -- SHOW TABLES;
- 查看表结构 -- DESC 表名;
- 查看创建表的SQL语句 -- SHOW CREATE TABLE 表名;
删除表
- 直接删除表 -- DROP TABLE 表名;
- 判断表是否存在并删除表 -- DROP TABLE IF EXISTS 表名;
修改表结构
- 添加表列 -- ALTER TABLE 表名 ADD 列名 类型;
- 修改列类型 -- ALTER TABLE 表名 MODIFY列名 新的类型;
- 修改列名 -- ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
- 删除列 -- ALTER TABLE 表名 DROP 列名;
- 修改表名 -- RENAME TABLE 表名 TO 新表名;
- 修改字符集 -- ALTER TABLE 表名 character set 字符集;
DML语句 -- 用来对数据库中表的数据进行增删改。关键字:insert, delete, update等
关键字说明
- INSERT INTO 表名 – 表示往哪张表中添加数据
- (字段名1, 字段名2, …) -- 要给哪些字段设置值
- VALUES (值1, 值2, …); -- 设置具体的值
注意
- 值与字段必须对应,个数相同,类型相同
- 值的数据大小必须在字段的长度范围内
- 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
- 如果要插入空值,可以不写字段,或者插入null
插入全部字段
- 所有的字段名都写出来 -- INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
- 不写字段名 -- INSERT INTO 表名 VALUES (值1, 值2, 值3…);
插入部分数据
- 没有添加数据的字段会使用NULL -- INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
蠕虫复制
- 什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
- 语法格式:INSERT INTO 表名1 SELECT * FROM 表名2;
- 作用:将表名2中的数据复制到表名1中
更新表记录
- 不带条件修改数据 -- UPDATE 表名 SET 字段名=值;
- 带条件修改数据 -- UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
关键字说明
- UPDATE: 修改数据
- SET: 修改哪些字段
- WHERE: 指定条件
删除表记录
- 不带条件删除数据 -- DELETE FROM 表名;
- 带条件删除数据 -- DELETE FROM 表名 WHERE 字段名=值;
DQL语句
- 用来查询数据库中表的记录(数据)。关键字:select, where等
- >注意:查询不会对数据库中的数据进行修改.只是一种显示数据的方式
查询表所有数据
- 使用*表示所有列 -- SELECT * FROM 表名;
- 写出查询每列的名称 -- SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
查询指定列
- 查询指定列的数据,多个列之间以逗号分隔 -- SELECT 字段名1, 字段名2... FROM 表名;
别名查询 -- 使用别名的好处是方便观看和处理查询到的数据
- 查询时给列、表指定别名需要使用AS关键字(AS可以省略不写) -- SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
清除重复值
- 查询指定列并且结果不出现重复数据 -- SELECT DISTINCT 字段名 FROM 表名;
查询结果参与运算
- 某列数据和固定值运算 -- SELECT 列名1 + 固定值 FROM 表名;
- 某列数据和其他列数据参与运算 -- SELECT 列名1 + 列名2 FROM 表名;
条件查询
比较运算符
>大于(转义运算符 >)-- SELECT * FROM 表名 WHERE 字段>数值;
<小于(转义运算符 <)-- SELECT * FROM 表名 WHERE 字段<数值;
<=小于等于
>=大于等于
=等于
<>、!=不等于
逻辑运算符
and 与,or 或 ,not 非
in关键字
语法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);
in里面的每个数据都会作为一次条件,只要满足条件的就会显示
范围
BETWEEN 值1 AND 值2 表示从值1到值2范围,包头又包尾
比如:age BETWEEN 35 AND 70
相当于: age>=35 && age<=70
模糊查询 -- LIKE
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
满足通配符字符串规则的数据就会显示出来
MySQL通配符有两个:
%: 表示0个或多个字符(任意个字符)
_: 表示一个字符
例如
- 查询表中(name字段)姓王的 -- SELECT * FROM 表名 name LIKE '王%';
- 查询表中(name字段)名字有‘王’字的 -- SELECT * FROM 表名 name LIKE '%王%';
- 查询表中(name字段)姓王且为三个字的 -- SELECT * FROM 表名 name LIKE '王__';
排序
通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
语法:SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
ASC: 升序, 默认是升序
DESC: 降序
单列排序
- 查询年龄(age字段)小于等于35岁的,按照年龄升序排列
SELECT * FROM 表名 WHERE age<=35 ORDER BY age ASC;
组合排序
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
- 查询年龄小于等于35岁的,按照年龄升序排列,如果年龄相同按照生命的降序
SELECT * FROM 表名 WHERE age<=35 ORDER BY age ASC,life desc;
聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值
五个聚合函数:
count: 统计指定列记录数,记录为NULL的不统计
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0
聚合函数的使用:写在 SQL语句SELECT后 字段名的地方
SELECT 字段名... FROM 表名;
SELECT COUNT(age) FROM 表名;
分组查询
分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组
SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
例如:
SELECT * FROM 表名 GROUP BY sex;
这句话会将sex相同的数据作为一组,但是会返回每组的第一条,没有任何意义
分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
分组后聚合函数的作用?不是操作所有数据,而是操作一组数据。
注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
例如:SELECT SUM(life) , sex FROM hero GROUP BY sex
效果如下:
having与where的区别
- having是在分组后对数据进行过滤.
- where是在分组前对数据进行过滤
- having后面可以使用聚合函数
- where后面不可以使用聚合函数
limit语句
LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数。
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句];
LIMIT语法格式:
LIMIT offset,length; 或者limit length;
offset是指偏移量,可以认为是跳过的记录数量,默认为0(如果是0,可以省略)
length是指需要显示的总记录数
查询hero表中数据,从第三条开始显示,显示6条
我们可以认为跳过前面2条,取6条数据
SELECT * FROM student3 LIMIT 2,6;
数据库约束
对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。
约束种类:
- PRIMARY KEY: 主键
- UNIQUE: 唯一
- NOT NULL: 非空
- DEFAULT: 默认
- FOREIGN KEY: 外键
主键约束
用来唯一标识一条记录,每个表都应该有一个主键,并且每个表只能有一个主键。
哪个字段应该作为表的主键?
通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。
在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY
主键自增:主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
扩展
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
DELETE和TRUNCATE的区别
- DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
- TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1
唯一约束
唯一约束的基本格式 -- 字段名 字段类型 UNIQUE
非空约束
非空约束的基本语法格式 -- 字段名 字段类型 NOT NULL
默认值
默认值格式 -- 字段名 字段类型 DEFAULT 默认值