黄浦区网站建设,上海网站平台建设,做旅行网站的意义,网站开发成本核算基本概念1.数据库DataBase简称#xff1a;DB2.什么数据库#xff1f;——用于存储和管理数据的仓库。存储过程是一个预编译的SQL语句#xff0c;优点是允许模块化的设计#xff0c;就是说只需创建一次#xff0c;以后在该程序中就可以调用多次。3.数据库的特点#xff1a… 基本概念1.数据库DataBase简称DB2.什么数据库——用于存储和管理数据的仓库。存储过程是一个预编译的SQL语句优点是允许模块化的设计就是说只需创建一次以后在该程序中就可以调用多次。3.数据库的特点持久化存储数据。数据库就是一个文件夹系统MySQL服务启动1. 手动管理——服务——手动关闭和开启。2.cmd--services.msc打开服务的窗口3.使用管理员打开cmdnet start mysql:启动mysql的服务net stop mysql:关闭mysql服务MySQL登录1.mysql-uroot-p密码2.mysql-hip-uroot-p连接目标的密码MySQL退出1.exit(退出)2.quit(辞职、退出)索引的作用它的优点缺点是什么索引在数据库的搜索时可以加速对数据的检索。类似与现实生活中书的目录缺点是它减慢了数据录入的速度同时也增加了数据库的尺寸大小。在数据库中查询语句速度很慢如何优化1.建索引2.减少表之间的关联 3.优化sql尽量用PreparedStatement来查询不要用Statement索引类型有哪些B-tree b树、b-树——叶子节点中的数据索引、二叉树红黑树、Hash表什么是事务事务就是被绑定在一起的SQL语句分组有原子性一致性隔离性和持久性。 怎么验证MySQL的索引是否满足需求explain语法explain select*from table where type1。数据库的事务隔离MySQL的事务隔离是在MySQL.ini配置文件最后添加transaction-isolationREPEATABLE-READ可用的配置值READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。Read-uncommitted未提交读最低隔离级别、事务未提交前就可被其他事务 生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据同一个记录的数据内容被修改了所有数据行的记录就变多或者变少了。视图是一种虚拟的表具有和物理表相同的功能。优点对数据库的访问因为视图可以有选择性的选取数据库里的一部分。Oracle和Mysql的区别1)库函数不同。2)Oracle是用表空间来管理的Mysql不是。Oracle语句分三类DDL、DML、DCL。DDL(Data Definition Language)数据定义语言包括Create语句可以创建数据库和数据库的一些对象。Drop语句可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。Alter语句修改数据表定义及属性。Truncate语句删除表中的所有记录,包括所有空间分配的记录被删除。DML(Data Manipulation Language)数据操控语言包括Insert语句向数据表张插入一条记录。Delete语句删除数据表中的一条或多条记录也可以删除数据表中的所有记录但是它的操作对象仍是记录。Update语句用于修改已存在表中的记录的内容。DCL(Data Control Language)数据库控制语言包括Grant语句允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。Revoke语句可以废除某用户或某组或所有用户访问权限数据库三范式是什么?第一范式列不可再分第二范式行可以唯一区分主键约束第三范式三大范式是一级一级依赖的什么是SQLStructured Query Language结构化查询语言定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方称为“方言”。MysqloracleSQLserver DB2都是关系型数据库。SQL语句单行或多行书写以分号结尾。MySQL数据库的SQL语句不区分大小写关键字建议使用大写。单行注释:-- 注释内容或#注释内容(mysql特有)多行注释:/*注释*/SQL分类1) Data Definition Language (DDL 数据定义语言) 如建库建表 关键字create,drop,alter等2) Data Manipulation Language(DML 数据操纵语言)如对表中的记录操作增删改 关键字insert,delete,update等3) Data Query Language(DQL 数据查询语言)如对表中的查询操作 关键字select,where等4) Data Control Language(DCL 数据控制语言)如对用户权限的设置。关键字GRANTREVOKE等DDL:操作数据库、表——CRUD1.C(Create):创建创建数据库create database数据库名称;创建数据库判断不存在再创建create database if not exists数据库名称;创建数据库并指定字符集create database数据库名称character set字符集名;练习创建db4数据库判断是否存在并制定字符集为gbkcreate database if not exists db4 character set gbk;2.R(Retrieve)查询*查询所有数据库的名称:show databases;*查询某个数据库的字符集:查询某个数据库的创建语句show create database数据库名称;3.U(Update):修改*修改数据库的字符集alter database数据库名称character set字符集名称;4.D(Delete):删除删除数据库drop database数据库名称;判断数据库存在存在再删除drop database if exists数据库名称;5.使用数据库*查询当前正在使用的数据库名称*select database();*使用数据库*use数据库名称;2.DCL操作表1.C(Create):创建1.语法create table表名(列名1数据类型1,列名2数据类型2,列名n数据类型n);*注意最后一列不需要加逗号(,)*数据库类型1.int整数类型age int,2.double:小数类型score double(5,2)3.date:日期只包含年月日yyyy-MM-dd4.datetime:日期包含年月日时分秒yyyy-MM-dd HH:mm:ss5.timestamp:时间错类型包含年月日时分秒yyyy-MM-dd HH:mm:ss如果将来不给这个字段赋值或赋值为null则默认使用当前的系统时间来自动赋值6.varchar字符串*name varchar(20):姓名最大20个字符*zhangsan 8个字符张三2个字符*创建表create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp);*复制表*create table表名like被复制的表名;2.R(Retrieve)查询*查询某个数据库中所有的表名称*show tables;*查询表结构*desc表名;3.U(Update):修改1.修改表名alter table表名rename to新的表名;2.修改表的字符集alter table表名character set字符集名称;3.添加一列alter table表名add列名数据类型;4.修改列名称类型alter table表名change列名新列别新数据类型;alter table表名modify列名新数据类型;5.删除列alter table表名drop列名;4.D(Delete):删除*drop table表名;*drop table if exists表名;*客户端图形化工具SQLYogDML增删改表中数据1.添加数据*语法*insert into表名(列名1,列名2,...列名n)values(值1,值2,...值n);*注意1.列名和值要一一对应。2.如果表名后不定义列名则默认给所有列添加值insert into表名values(值1,值2,...值n);3.除了数字类型其他类型需要使用引号(单双都可以)引起来2.删除数据*语法*delete from表名[where条件]*注意1.如果不加条件则删除表中所有记录。2.如果要删除所有记录1.delete from表名;--不推荐使用。有多少条记录就会执行多少次删除操作2.TRUNCATE TABLE表名;--推荐使用效率更高先删除表然后再创建一张一样的表。3.修改数据*语法*update表名set列名1值1,列名2值2,...[where条件];*注意1.如果不加任何条件则会将表中所有记录全部修改。##DQL查询表中的记录*select*from表名;1.语法select字段列表from表名列表where条件列表group by分组字段having分组之后的条件order by排序limit分页限定2.基础查询1.多个字段的查询select字段名1字段名2...from表名*注意*如果查询所有字段则可以使用*来替代字段列表。2.去除重复*distinct3.计算列*一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)*ifnull(表达式1,表达式2)null参与的运算计算结果都为null*表达式1哪个字段需要判断是否为null*如果该字段为null后的替换值。4.起别名*asas也可以省略3.条件查询1.where子句后跟条件2.运算符*、、、*BETWEEN...AND*IN(集合)*LIKE模糊查询*占位符*_:单个任意字符*%多个任意字符*IS NULL*and或*or或||*not或!--查询年龄大于20岁SELECT*FROM student WHERE age20;SELECT*FROM student WHERE age20;--查询年龄等于20岁SELECT*FROM student WHERE age20;--查询年龄不等于20岁SELECT*FROM student WHERE age!20;SELECT*FROM student WHERE age20;--查询年龄大于等于20小于等于30SELECT*FROM student WHERE age20age30;SELECT*FROM student WHERE age20 AND age30;SELECT*FROM student WHERE age BETWEEN 20 AND 30;--查询年龄22岁18岁25岁的信息SELECT*FROM student WHERE age22 OR age18 OR age25SELECT*FROM student WHERE age IN(22,18,25);--查询英语成绩为nullSELECT*FROM student WHERE englishNULL;--不对的。null值不能使用(!)判断SELECT*FROM student WHERE english IS NULL;--查询英语成绩不为nullSELECT*FROM student WHERE english IS NOT NULL;--查询姓马的有哪些likeSELECT*FROM student WHERE NAME LIKE马%;--查询姓名第二个字是化的人SELECT*FROM student WHERE NAME LIKE_化%;--查询姓名是3个字的人SELECT*FROM student WHERE NAME LIKE___;--查询姓名中包含德的人SELECT*FROM student WHERE NAME LIKE%德%;查询缓存(了解)MySQL拿到一个查询请求后→会先到查询缓存看看之前是不是执行过这条语句→命中就返回缓存的value。【他跟Redis一样只要是你之前执行过的语句都会在内存里面用key-value形式存储着。缓存在MySQL8.0之后就取消了——查询的缓存容易被清空消失(原因)】 MySQL的内连接、左连接、右连接有什么区别内连接inner join左连接left join右连接right join。内连接是把匹配的关联数据显示出来左连接是把表全部显示出来右边的表显示出符合条件的数据MySQL索引是怎么实现的索引是满足某种特定查找算法的数据结构而这些数据结构会以某种方式指向数据从而实现高效查找数据。不同的数据引擎实现有所不同。MySQL中的索引是B树实现的B树的搜索效率可以到达二分法的性能找到数据区域之后就找到了完整的数据结构了所有索引的性能也是更好的。MySQL常用的引擎InnoDB引擎InnoDB引擎提供了对数据库acid事务的支持并且还提供了行级锁和外键的约束它的设计的目标就是处理大数据容量的数据库系统。MySQL运行的时候InnoDB会在内存中建立缓冲池用于缓冲数据和索引。但是该引擎是不支持全文搜索同时启动也比较的慢它是不会保存表的行数的所以当进行select count(*)from table指令的时候需要进行扫描全表。由于锁的粒度小写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。MyIASM引擎MySQL的默认引擎但不提供事务的支持也不支持行级锁和外键。因此当执行插入和更新语句时即执行写操作的时候需要锁定这个表所以会导致效率会降低。不过和InnoDB不同的是MyIASM引擎是保存了表的行数于是当进行select count(*)from table语句时可以直接的读取已经保存的值而不需要进行扫描全表。所以如果表的读操作远远多于写操作时并且不需要事务的支持的可以将MyIASM作为数据库引擎的首选。什么是锁锁在所以的DBMS中锁是实现事务的关键锁可以保证事务的完整性和并发性。MySQL的行锁和表锁、乐观锁和悲观锁MyISAM只支持表锁InnoDB支持表锁和行锁默认为行锁。表级锁开销小加锁快不会出现死锁。锁定粒度大发生锁冲突的概率最高并发量最低。行级锁开销大加锁慢会出现死锁。锁力度小发生锁冲突的概率小并发度最高。乐观锁每次去拿数据的时候都认为别人不会修改所以不会上锁但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。悲观锁每次去拿数据的时候都认为别人会修改所以每次在拿数据的时候都会上锁这样别人想拿这个数据就会阻止直到这个锁被释放。数据库的乐观锁需要自己实现在表里面添加一个version字段每次修改成功值加1这样每次修改的时候先对比一下自己拥有的version和数据库现在的version是否一致如果不一致就不修改这样就实现了乐观锁。MySQL问题排查都有哪些手段使用show processlist命令查看当前所有连接信息。使用explain命令查询SQL语句执行计划。开启慢查询日志查看慢查询的SQL。