做聚会的网站,巩义网站优化技巧,今天国际大事新闻,怎么做外贸网站seo文章目录 1. 介绍2. 数据库相关概念3. 启动4. 数据模型5. SQL6. DDL数据库DDL-表操作DDL-表操作-数据类型DDL-表操作-修改DDL-表操作-删除 7. 图形化界面工具DataGrip8. DML(数据操作语言)DML-添加数据DML-修改数据 9. DQL#xff08;数据查询语言#xff09;基本查询条件查询… 文章目录 1. 介绍2. 数据库相关概念3. 启动4. 数据模型5. SQL6. DDL数据库DDL-表操作DDL-表操作-数据类型DDL-表操作-修改DDL-表操作-删除 7. 图形化界面工具DataGrip8. DML(数据操作语言)DML-添加数据DML-修改数据 9. DQL数据查询语言基本查询条件查询聚合函数分组查询排序查询分页查询DQL执行顺序 10. DCL数据控制语言DCL-管理用户DCL-权限控制 11. 函数字符串函数数值函数日期函数流程控制函数 12. 约束约束演示外键约束 13. 多表查询多表关系多表查询概述内连接外连接自连接联合插叙-unionunion all子查询 14. 事务简介事务操作四大特性ACID并发事务问题复习事务隔离级别 参考链接 正好最近学习完了MySQL的基础篇就发出来给大家参考一下 平常使用软件navicat可以在网上学习下载一下
1. 介绍
基础篇MySql概述SQL函数约束多表查询事务 进阶篇存储引擎索引SQL优化视图/存储过程/触发器锁innioDB核心MySQL管理 运维篇日志主从复制分库分表读写分离
2. 数据库相关概念
名称全称简称数据库存储数据的仓库数据是有组织的进行存储DatBase(DB)数据库管理系统操作和管理数据库的大型软件SQL操作关系型数据库的编程语言是一套标准
主流的关系型数据库管理系统 Oracle、MySQL、Microsoft SQL Server、PostgreSQL
3. 启动
net start mysql net stop mysql
客户端连接 mysql [-h 127.0.0.1] [-P 3306] -u root -p
另类方法打开服务进行启动配合相关软件
4. 数据模型
关系型数据库RDBMS 概念建立在关系模型基础上由多张相互连接的二维表组成的数据库特点 使用表存储数据格式统一便于维护 使用SQL语言操作标准统一使用方便 数据模型 数据库表
5. SQL
SQL通用语法
SQL语句可以单行或多行书写以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性MySQL数据库的SQL语句不区分大小写关键字建议使用大写注释 单行注释-- 注释内容 # 注释内容多行注释 /* 注释内容*/
DDL数据定义语言用来定义数据库对象数据库表字段 DML数据操作语言用来对数据库表中的数据进行增删改 DQL数据查询语言用来查询数据库中表的记录 DCL数据控制语言用来创建数据库用户、控制数据库的访问权限
6. DDL
数据库
查询
查询所有数据库SHOW DATABASES;查询当前数据库SELECT DATABASE();
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排列顺序] 删除DROP DATABASE [IF EXISTS] 数据库名 使用USE 数据库名
create database itcast default charset utf8mb4;DDL-表操作
查询
查询当前数据库所有表SHOW TABLES;查询表结构DESC 表名;查询指定表的建表语句SHOW CREATE TABLE 表名;
创建
CREATE TABLE 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释], 字段3 字段3类型[COMMENT 字段3注释], … )[COMMENT 表注释];
DDL-表操作-数据类型
根据需求创建表 设计一张员工信息表
编号int员工工号varchar(10)员工姓名varchar(10)性别char(1)年龄tinyint unsigned身份证号char(18)入职时间entrydata data
DDL-表操作-修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; 修改数据类型ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); 修改字段名和字段类型ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段
ALTER TABLE 表名 DROP 字段名; 修改表名ALTER TABLE 表名 RENAME TO 新表名;
DDL-表操作-删除
删除表
DROP TABLE [IF EXISTS] 表名; 删除指定表并重新创建该表(类似于格式化)TRUNCATE TABLE 表名;
7. 图形化界面工具DataGrip
Sqlyog Navicat DataGrip 使用vscode也可以
8. DML(数据操作语言)
添加数据INSERT 修改数据UPDATE 删除数据DELETE
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,…),…
注意
插入数据时指定的字段顺序需要与值的顺序时一一对应的字符串和日期数据应该包含在引号中插入的数据大小应该在字段的规定范围内
insert into user(id, name, age) VALUES (2, Itcast2, 30);DML-修改数据
UPDATE 表名 SET 字段名1值1, 字段名2值2,…[WHERE 条件]; 注意修改语句的条件可以有也可以没有如果没有条件则会修改整张表的所有数据。
删除数据
DELETE FROM 表名 [WHERE 条件];
注意
DELETE 语句的条件可以有也可以没有如果没有条件则会删除整张表的所有数据DELETE语句不能删除某一个字段的值可以使用UPDATE
9. DQL数据查询语言
查询关键字SELECT 语法
SELECT 字段列表FROM 表名列表WHERE 条件列表GROUP BY 分组字段列表HAVING 分组后条件列表ORDER BY 排序字段列表LIMIT 分页参数
接下来
基本查询条件查询WHERE聚合函数count、max、min、avg、sum分组查询GROUP BY排序查询ORDER BY分页查询LIMIT
基本查询
查询多个字段 SELECT 字段1,字段2,… FROM 表名; SELECT * FROM 表名;设置别名 SELECT 字段1[AS 别名1], 字段2[AS 别名2]… FROM 表名;去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;
条件查询
语法 SELECT 字段列表 FROM 表名 WHERE 条件列表条件 比较运算符 大于 小于 或 ! BETWEEN … AND… 在某个范围之内含最小最大 IN(…) 在in之后的列表中的值多选一 LIKE 占位符 模糊匹配匹配单个字符%匹配任意个字符 IS NULL 是NULL
逻辑运算符 AND 或 OR 或 || NOT 或 ! 非
三个字的名字 select * from user where name like ‘___’; 最后一位为X select * from user where idCard like ‘%X’;
聚合函数
将一列数据作为一个整体进行纵向计算
常见聚合函数
count 统计数量max 最大值min 最小值avg 平均值sum 求和 注意null值不计入聚合函数
SELECT 聚合函数(字段列表) FROM 表名;
分组查询
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件] where 与 having 的区别
执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤判断条件不同where 不能对聚合函数进行判断而having 可以
一些小例子
-- Active: 1713283367775127.0.0.13306testinsert into user(id, name, age, entrydate) VALUES (3, Itcast2, 29, 2024-5-4),(4, Itcast2, 19, 2024-7-4),(5, Itcast2, 60, 1994-7-4) ;select * from user;-- 更新数据update user set name qcby where id 1;-- 添加入职时间ALTER table user add entrydate date comment 入职时间;-- 修改类型ALTER table user MODIFY age TINYINT UNSIGNED;-- 更新数据UPDATE user set entrydate 2024-07-04 where id 2;-- 查看部分select id, name from user;-- 起别名select entrydate as 工作地址 from user;-- 不要重复select DISTINCT entrydate from user;-- 查询select * from user where id ! 4;select * from user where name itcast2;select count(*) as 数量 from user;select min(age) from user;-- 根据名字判断计算个数select name, count(*) from user group by name;-- 根据名字分组查询然后获取分组后个数大于2的人数select name, count(*) from user where age 40 group by name having count(*) 2;select * from user;排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
ASC升序默认值DESC降序
注意如果是多字段排序当第一个字段相同时才会根据第二个字段进行排序
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数; 注意
起始索引从0开始起始索引 查询页码 - 1* 每页显示记录数分页查询是数据库的方言不同的数据库有不同的实现MySQL是LIMIT如果查询的是第一页数据起始索引可以省略直接简写为limit 10。
DQL执行顺序
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY - LIMIT
fwgsol
10. DCL数据控制语言
用来管理数据库用户、控制数据库的访问权限
DCL-管理用户
查询用户 USE mysql; SELECT * FROM user;创建用户 CREATE USER ‘用户名’‘主机名’ IDENTIFIED BY ‘密码’;修改用户密码 ALTER USER ‘用户名’‘主机名’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;删除用户 DROP USER ‘用户名’‘主机名’;
DCL-权限控制
常见几种
ALL, ALL PRIVILEGES 所有权限SELECT 查询数据INSERT 插入数据UPDATE 修改数据DELECT 删除数据ALTER 修改表DROP 删除数据库/表/视图CREATE 创建数据库/表
查询权限 SHOW GRANTS FOR ‘用户名’‘主机名’; 授予权限 GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’‘主机名’; 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’‘主机名’;
11. 函数
函数是一段可以直接被另一段程序调用的程序或代码
字符串函数
常用的
CONCAT(S1,S2,…,Sn) 字符串拼接LOWER(str) 将字符串str全部转化为小写UPPER(str) 将字符串str全部转化为大写LPAD(str, n, pad) 左填充用字符串pad对str的左边进行填充达到n个字符串长度RPAD(str, n, pad) 右填充用字符串pad对str的右边进行填充达到n个字符串长度TRIM(str) 去除两端空格SUBSTRING(str, start, len) 返回字符串str从start位置起的len个长度的字符串
-- 拼接字符串select concat(hello, MySQL);-- 将名字变成长度为8左填充Y
update user set name lpad(name, 8, Y);数值函数
常用
CELL(x) 向上取整FLOOR(x) 向下取整MOD(x, y) 返回x/y的模RAND() 返回0~1内的随机数ROUND(x, y) 求参数x的四舍五入的值保留y位小数
-- 向上取整select ceil(1.1);-- 向下取整select floor(1.9);-- 取模select mod(5,4);-- 随机数select rand();-- 保留小数select round(2.23445, 2);生成6位验证码
select lpad(round(rand() * 1000000, 0), 6, 0);日期函数
常用
CUEDATE() 返回当前日期CURTIME() 返回当前时间NOW() 返回当前日期和时间YEAR(date) 获取指定date的年份MONTH(date) 获取指定date的月份DAY(date) 获取指定date的日期DATE_ADD(data, INTERVAL expr type) 返回一个日期/时间值加上一个时间间隔expr后的时间值DATEDIFF(date1, date2) 返回起始时间date1和结束时间date之间的天数
-- 日期函数select curdate();select now();select YEAR(now());select day(now());select date_add(now(), INTERVAL 70 day);-- datediffselect datediff(2021-12-01, 2021-11-01);入职时间
select name, datediff(curdate(), entrydate) as entrydays from user order by entrydays desc;流程控制函数
常用的可以在SQL语句中实现条件筛选从而提高语句的效率
IF(value, t, f) 如果value为true则返回t否则返回fIFNULL(value1, value2) 如果value不为空返回value1,否则返回value2CASE WHEN [val1] THEN [res1] … ELSE [default] END 如果val1为true,返回res1,…否则返回default默认值CASE [expr] WHEN [val1] THEN … ELSE [default] END 如果expr的值等于val1返回res1…否则返回default默认值
-- 流程函数select if(true, ok, Error);select if(false, ok, Error);-- ifNULLselect ifNULL(okX, Default);select ifNULL(null, Default);SELECTname,(case YEAR(entrydate) when 2024 then 今年 when 2020 then 1 else 3 end) as 时间FROMuser;12. 约束
概念约束是作用于表中字段上的规则用于限制存储在表中的数据 目的保证数据库中数据的正确、有效性和完整性 分类
非空约束——限制该字段的数据不能为null——NOT NULL唯一约束——保证该字段的所有数据都是唯一的、不重复的——UNIQUE主键约束——主键是一行数据的唯一标识要求非空且唯一——PRIMARY KEY默认约束——保存数据时如果未指定该字段的值则采用默认值——DEFAULT检查约束(8.0.16以上)——保证字段值满足某一个条件——CHECK外键约束——用来让两张表的数据之间建立连接保证数据的一致性和完整性——FOREIGN KEY
注意约束是作用于表中字段的可以在创建表/修改表的时候添加约束
约束演示
案例完成表结构的创建
字段名字段含义字段类型约束条件约束关键字idID唯一标识int主键并且自动增长PRIMARY,AUTO_INCREMENTname姓名varchar(10)不为空并且唯一NOT NULL, UNIQUEage年龄int大于0并且小于等于120CHECKstatus状态char(1)如果没有指定该值默认为1DEFAULTgender性别char(1)无
-- 建表create table penple(id int primary key auto_increment comment 主键,name varchar(10) not null unique comment 姓名,age int comment 年龄,status char(1) default 1 comment 状态,gender char(1) comment 性别) comment 用户表;-- 修改名字alter table penple rename to people;-- 插入数据insert into people(name, age, status, gender) value (Tom, 19, 1, ),(Jenny, 18, 0, 女);-- 因为中文不显示直接修改一下update people set gender M where id 1;update people set gender W where id 2;select * from people;外键约束
外键用来让两张表的数据之间建立连接从而保证数据的一致性和完整性
添加外键 CREATE TABLE 表名({ 字段名 数据类型, … [CONSTRAINT] [外键名称] FOREING KEY(外键字段名) REFERENCES 主表(主表列名) }); ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FORMING KEY(外键字段名) REFERENCES 主表(主表列名);
删除外键 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 添加约束
alter table user add constraint fk_user_dept_id foreign key(dept_id) references dept(id);-- 修改类型
ALTER table user MODIFY dept_id INT;select * from user;-- 删除外键
alter table user drop foreign key fk_user_dept_id;注意保证数据类型一样还有数据范围一致
删除/更新行为
ALTER TABLE 表名 ADD CONSTRANT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
alter table user add constraint fk_user_dept_id foreign key(dept_id) references dept(id) on update cascade on delete cascade;cascade:关联的一起修改一起删除
13. 多表查询
项目开发中在进行数据表结构设计时会根据业务需求及业务模块之间的关系分析并设计表结构由于业务之间相互关联所以各个表结构之间也存在着各种联系基本上分为三种
一对多多对一多对多一对一
多表关系
一对多多对一 案例部门与员工的关系关系一个部门对应多个员工一个员工对应一个部门实现在多的一方建立外键指向一的一方的主键 多对多 案例学生与课程的关系关系多个学生对应多个课程实现建立第三张中间表中间表这至少包含两个外键分别关联两方主键
create table user_course(id int auto_increment comment 主键 primary key,studentid int not null comment 学生ID,courseid int not null comment 课程ID,constraint fk_courseid foreign key(courseid) references course(id),constraint fk_studentid foreign key(studentid) references user(id))comment 用户课程中间表;注意自增也算属性也要一致
一对一 案例用户与用户详情的关系关系一对一关系多用于单表拆分将一张表的基础字段放在一张表里其他详情字段放在另一种表里以提升操作效率实现在任意一方加入外键关联另一方的主键并且设置外键为唯一的UNIQUE
多表查询概述
笛卡尔积数学中两个集合的所有组合情况。
select * from user, course;多表查询分类
连接查询 内连接相当于查询AB交集部分数据外连接 左外连接查询左表所有数据以及两张表交集部分数据右外连接查询右表所有数据以及两张表交集部分数据 自连接当前表与自身的连接查询自连接必须使用表的别名 子查询
select * from user,dept where user.dept_id dept.id;内连接
查询语法
隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 条件…;显示内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件…;
内连接是查询两个表的交集部分
起了别名就不能使用表名
-- 内连接演示select user.name, dept.name from user, dept where user.dept_id dept.id;-- inner 可以省略
select user.name, dept.name from user inner join dept on user.dept_id dept.id;外连接
语法
左外连接相当于查询表1的所有数据包含交集部分 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件…;右外连接相当于查询表2的所有数据包含交集部分 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 连接条件…;
自连接
语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件…;
联合插叙-unionunion all
对于union查询就是把多次查询的结果合并起来形成一个新的查询结果集
SELECT 字段列表 FROM 表A UNION [ALL] SELECT 字段列表 FROM 表B…
对于联合查询的多张表的列数必须保持一致字段类型也需要保持一致 union all会将全部的数据直接合并在一起union会对合并之后的数据去重
子查询
概念SQL语句中嵌套SELECT语句称为嵌套查询又称子查询 SELECT * FROM t1 WHERE column1 (SELECT column1 FROM t2); 子查询外部的语句可以是INSERT/UPDATE/DELETE /SELECT的任何一个。 根据子查询的结果不同分为
标量子查询结果为单个值常用操作符 列子查询结果为一列IN、NOT IN、ANY、SOME、ALL行子查询结果为一行常用操作符、、IN、NOT IN表子查询结果为多行多列IN 根据子查询位置不同分为WHERE之后FROM之后SELECT之后
列子查询操作符
IN在指定的集合范围之内多选一NOT IN不在指定的集合范围之内ANY子查询返回泪飙中有任意一个满足即可SOME与ANY等同使用SOME的地方都可以使用ANYALL子查询返回列表的所有值都必须满足
-- 标量查询select id from dept where name 研发部;select * from user where dept_id (select id from dept where name 研发部);-- 列子查询select * from dept where name 研发部 or name 市场部;select * from user where dept_id in (select id from dept where name 研发部 or name 市场部);-- 行子查询
select * from user where (salary, managerid) (select salary, managerid from user where name you);
14. 事务
简介
事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。 默认的MySQL的事务是自动提交的当执行一条DML语句MySQL会立即隐式的提交事务
事务操作
查看/设置事务提交方式 SELECT autocommit; SET autocommit 0;提交事务 COMMIT;回滚事务 ROLLBACK;
select * from commodity;select autocommit;-- 手动提交set autocommit 0;-- 涨价-- 1. 查询鼠标的价格select price from commodity where name 鼠标;-- 2. 修改update commodity set price price 100 where name 鼠标;update commodity set price price 100 where name U盘;commit;-- 回滚事务rollback;开始事务 START TRANSACTION 或 BEFIN;提交事务 COMMIT;回滚事务 ROLLBACK;
-- 开启事务
start transaction;commit;rollback;四大特性ACID
原子性事务是不可分割的最小操作单元一致性事务完成时必须使所有的数据都保持一致状态隔离性数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行持久性事务一旦回滚或提交对数据库中的数据的改变是永久的
并发事务问题复习
脏读一个事务读到另外一个事务还没有提交的数据 不可重复读一个事务先后读取一条记录但两次读取的数据不同称之为不可重复读 幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在好像出现了“幻影”
事务隔离级别 脏读 不可重复读 幻读Read uncommitted —— —— —— Read committed 解决了 —— —— Repeatable Read 默认解决了 解决了 —— Serializable 解决了 解决了 解决了
查看事务隔离级别 SELECT TRANSACTION_ISOLATION 设置事务隔离级别 SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
事务隔离级别越高性能越低
参考链接
史上最全MySQL基本操作这一篇就够用了 MySQL所有基本操作详解