一、数据库的基本概念:
数据库(database/DB)是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
数据库作用:户可以对文件中的数据进行新增、查询、更新、删除等操作。
数据库的特点:
1. 持久化存储数据的。其实数据库就是一个文件系统
2. 方便用户存储和管理数据
3. 使用了统一的方式操作数据库 – SQL
二、Mysql的安装:
1.下载Mysql : Mysql官网下载
2. https://dev.mysql.com/downloads/installer/ 点击链接进入页面,找到图位置进行下载
后面按照步骤一步一步安装,
4. 配置环境变量
文件夹下的bin路径添加到变量值中,
三、Navicat for MySQL测试mysql安装成功
打开Navicat for MySQL,新建连接,填写用户和密码
测试成功
Navicat的安装破解参见https://blog.csdn.net/WYpersist/article/details/86530973
四、SQL的分类
1.DDL 数据定义语言 —Data Definition Language
//用来定义数据库对象:数据库,表,列
2.DML 数据操作语言 —Data Manipulation Language
//用来对数据库中表的数据进行增删改
3.DQL 数据查询语言 —Data Query Language
//用来查询数据库中表的数据
4.DCL 数据控制语言 —Data Control Language
//用来定义数据库的访问权限及创建用户
创建数据库:
create database 数据库名称;
创建数据库,并指定字符集
create database 数据库名称 character set 字符集名;
查询某个数据库的字符集:查询某个数据库的创建语句
show create database 数据库名称;
修改
修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
删除数据库
drop database 数据库名称;
1、表的创建与管理
create table 表名
(
列名1 数据类型 约束,
列名2 数据类型 约束,
…….,
列名n 数据类型 约束
);
示例
CREATE TABLE goods_info
(
Goods_id CHAR(6),
Goods_name VARCHAR2(20),
Goods_price NUMBER(9,2),
Goods_num NUMBER(9),
Goods_origin VARCHAR2(20)
);
。。。。。。。
MySQL常见面试题
一、CHAR和VARCHAR的区别
CHAR和VARCHAR类型在存储和检索方面有所不同
CHAR列长度固定为创建表时声明的长度,长度值范围是1到255
当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格
二、delete、drop、truncate区别:
truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所 占的空间。
删除数据的速度,drop> truncate > delete
delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。
使用场合:
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a where clause), 用 delete.
注意: 对于有主外键关系的表,不能使用truncate而应该使用不带where子句的delete语句,由于truncate不记录在日志中,不能够激活触发器
三、存储过程
我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
优点:
(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
四、MySQL的事务隔离级别
未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据
提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。
可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。
串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read)
**Mysql面试题参见与 Mysql基础