SQL
作用:
通过 SQL 语句我们可以方便的操作数据库中的数据、表、数据库。 SQL 是数据库管理系统都需要 遵循的规范。不同的数据库生产厂商都支持 SQL 语句,但都有特有内容。
语句分类:
1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
DDL操作数据库:
创建数据库:
创建数据库 create database 数据库名; 判断数据库是否已经存在,不存在再创建数据库 create database if not exists 数据库名; 创建数据库并指定字符集 create database 数据库名 character set 字符集;
查看数据库
查看所有数据库 show databases; 查看某个数据库的定义信息 show create database 数据库名;
修改数据库
修改数据库字符集格式 alter database 数据库名 default character set 字符集;
删除数据库
删除数据库 drop database 数据库名; 判断数据库是否存在并删除存在的数据库 drop database if exists 数据库名;
使用数据库
查看正在使用的数据库 select database(); -- database()是 mysql 函数 使用/切换数据库 use 数据库名;
DDL操作表:
创建表
创建表的格式 CREATE TABLE 表名 ( 字段名 1 字段类型 1, 字段名 2 字段类型 2 ); 关键字说明: CREATE -- 表示创建 TABLE -- 表示创建一张表 快速创建一个表结构相同的表 CREATE TABLE 新表名 LIKE 旧表名;
(MySQL数据类型:
)
查看表
查看某个数据库中所有的表 SHOW TABLES; 查看表结构 DESC 表名; 查看创建表的SQL语句(以SQL语句返回表结构) SHOW CREATE TABLE 表名;
删除表
直接删除表 drop table 表名; 判断表是否存在并删除表 drop table if exists 表名;
修改表结构
添加表列 alter table 表名 add 列名 类型; 修改列类型 alter table 表名 modify 列名 新类型; 修改列名 alter table 表名 change 旧列名 新列名 类型; 删除列 alter table 表名 drop 列名; 修改字符集 alter table 表名 character set 字符集; 修改表名 rename table 表名 to 新表名;
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
添加表数据
插入全部字段 所有的字段名都写出来 INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3); 不写字段名 INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…); 插入部分数据 INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...); 没有添加数据的字段会使用 NULL 关键字说明 INSERT INTO 表名 – 表示往哪张表中添加数据 (字段名 1, 字段名 2, …) -- 要给哪些字段设置值 VALUES (值 1, 值 2, …); -- 设置具体的值 -- 注意 1.值与字段必须对应,个数相同,类型相同 2.值的数据大小必须在字段的长度范围内 3.除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号) 4.如果要插入空值,可以不写字段,或者插入 null
删除表数据
不带条件删除数据(删除表中所有数据) DELETE FROM 表名; 带条件删除数据(删除指定条件的数据) DELETE FROM 表名 WHERE 字段名=值; 删除表中所有记录 TRUNCATE TABLE 表名; -- truncate 和 delete 的区别: 1.delete 是将表中的数据一条一条删除 2.truncate 是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
DQL基础查询
查询所有列 使用*来表示所有列 select * from 表名; 写出所有字段名来查询 select 字段名1,字段名2,字段名3...from 表名; 查询指定列 列出想要查询的字段名来查询 select 字段名1,字段名2,字段名3...from 表名; 拓展: 别名查询 -- 使用关键字 -- 查询时给列、表指定别名需要使用 AS 关键字 使用别名的好处:是方便观看和处理查询到的数据 select 字段名 1 as别名, 字段名 2 as别名... from表名; select 字段名 1 as别名, 字段名 2 as别名... from 表名 as表别名; 清除重复值 查询指定列并且结果不出现重复数据 select distinct 字段名 from 表名;
DQL条件查询
语法格式:SELECT 字段名 FROM 表名 WHERE 条件; 比较运算符
-- >大于 <小于 <=小于等于 >=大于等于 =等于 <>、!=不等于 语法: select * from 表名 where 字段名 比较运算符 比较条件;
逻辑运算符
-- and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足 语法: select * from 表名 where 满足条件1 逻辑运算符 满足条件2;
in关键字
语法格式:select 字段名 from 表名 where 字段 in (数据 1, 数据 2...); in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
范围查询
select * from 表名 between 值1 and 值2 表示从值 1 到值 2 范围,包头又包尾
like关键字
-- LIKE 表示模糊查询 select * from 表名 where 字段名 like '通配符字符串'; 满足通配符字符串规则的数据就会显示出来 所谓的通配符字符串就是含有通配符的字符串 MySQL 通配符有两个: -- %:表示 0 个或多个字符(任意个字符) -- _: 表示一个字符
DQL排序查询
通过 order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序) select 字段名 from 表名 where 字段=值 order by 字段名 [ASC|DESC]; ASC: 升序, 默认是升序 DESC: 降序 -- ORDER BY 必须放在最后面 单列排序: 使用一个字段排序 select * from 表名 order by 字段名 [asc/desc] 组合排序 先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序 select * from 表名 order by 字段名1 [asc/desc],字段名2 [asc/desc]
DQL聚合函数
count:统计指定列记录数,记录为null的不统计 sun:计算指定列的数值和,如果不是数值类型,那么计算结果为0 max:计算指定列的最大值 min:计算指定列的最小值 avg:计算指定列的平均值,如果不是数据类型,那么计算结果为0 使用: 写在 SQL 语句 select后 select 聚合函数 from 表名;
DQL分组查询
语法: select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]; 注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义 where 和 having 区别: 1.执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。 2.可判断的条件不一样:where不能对聚合函数进行判断,having可以。 (执行顺序:where > 聚合函数 > having)
DQL分页查询
语法: select 字段列表 from 表名 limit 起始索引 , 查询条目数; 起始索引:从0开始 计算公式:起始索引 = (当前页码 - 1)* 每页显示的条数
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
约束
概念:
1.约束是作用于表列上的规则,用于限制加入表的数据
2.约束的存在保证了数据库中数据的正确性,有效性和完整性
分类:
非空约束
概念:非空约束用于保证列中所有数据不能有NULL值 语法: 1.添加约束: -- 创建表时添加非空约束 CREATE TABLE 表名( 列名 数据类型 NOT NULL, .... ); -- 建完表后添加非空约束 ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL; 2.删除约束: ALTER TABLE 表名 MODIFY 字段名 数据类型;
唯一约束
概念:唯一约束用于保证列中所有数据各不相同 语法: 1.添加约束 -- 创建表时添加唯一约束 CREATE TABLE 表名( 列名 数据类型 UNIQUE [AUTO_INCREMENT], -- AUTO_INCREMENT:当不指定值时自动增长 ... ); CREATE TABLE 表名( 列名 数据类型 , ... [CONSTRAINT][约束名称] UNIQUE(列名) ); -- 建完表后添加唯一约束 ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE; 2.删除约束 ALTER TABLE 表名 DROP INDEX 字段名;
主键约束
概念: 1.主键是一行数据的唯一标识,要求非空且唯一 2.一张表只能有一个主键 语法: 1.添加约束 -- 创建表时添加主键约束 CREATE TABLE 表名( 列名 数据类型 PRIMARY KEY [AUTO_INCREMENT], ... ); CREATE TABLE 表名( 列名 数据类型, [CONSTRAINT] [约束名称] PRIMARY KEY(列名) ); -- 建完表后添加主键约束 ALTER TABLE 表名 ADD PRIMARY KEY(字段名); 2.删除约束 ALTER TABLE 表名 DROP PRIMARY KEY;
检查约束
默认约束
概念:保存数据时,未指定值采用默认值 语法: 1.添加约束 --创建表时添加默认约束 CREATE TABLE 表名( 列名 数据类型 DEFAULT 默认值, ... ); --建完表后添加默认约束 ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值; 2.删除约束 ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
外键约束
概念:外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性 语法: 1.添加约束 -- 创建表时添加外键约束
CREATE TABLE 表名( 列名 数据类型 ... [CONSTRAINT][外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) ); --建完表后添加默认约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERNCES 主表名称(主表列名称);
2.删除约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
数据库设计
参考CSDN网页: https://blog.csdn.net/qq_42192693/article/details/109720940?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165768185416782388018189%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165768185416782388018189&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109720940-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1&spm=1018.2226.3001.4187
多表查询
笛卡尔积:取A,B集合所有组合情况
多表查询:从多张表查询数据
连接查询
内连接:相当于查询A B交集数据
-- 隐式内连接 select 字段列表 from 表1,表2...where 条件; -- 显示内连接 select 字段列表 from 表1 [inner] join 表2 on 条件;
外连接:
左外连接:相当于查询A表所有数据和交集部分数据
右外连接:相当于查询B表所有数据和交集部分数据
-- 左外链接 select 字段列表 from 表1 left [outer] join 表2 on 条件; -- 右外连接 select 字段列表 from 表1 right [outer] join 表2 on 条件;
子查询
概念:查询中嵌套查询,称嵌套查询为子查询
分类:
1.单行单列:作为条件值,使用= != > < 等进行判断 select 字段列表 from 表 where 字段名 = (子查询); 2.多行单列:作为条件值,使用in等关键字进行条件判断 select 字段列表 from 表 where 字段名 in (子查询); 3.多行多列:作为虚拟表 select 字段列表 from (子查询) where 条件;
事务
简介:
1.数据库的事务(Transaction)是一种机制、一个操作序列、包含了一组数据库操作命令
2.事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
3.事务是一个不可分割的工作逻辑单元.
-- 开启事务 start transaction; 或者 begin; -- 提交事务 commit; -- 回滚事务 rollback;
事务四大特征
1.原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
2.一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
3.隔离性(lsolation):多个事务之间,操作的可见性
4.持久性(Durability):事务一旦回滚,它对数据库中的数据的改变就是永久的