20201014 王维
心得体会
1. 数据库
2.1 数据库概述
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立 的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查 询、更新、删除等操作。
2.2 数据的存储方式
- 数据保存在内存 例如:数组,集合;new出来的对象存储在堆中.堆是内存中的一小块空间 优点:内存速度快 缺点:断电/程序退出,数据就清除了.内存价格贵
- 数据保存在普通文件 优点:永久保存 缺点:查找,增加,修改,删除数据比较麻烦,效率低
- 数据保存在数据库 优点:永久保存,通过 SQL 语句比较方便的操作数据库
2.3 数据库的优点
数据库是按照特定的格式将数据存储在文件中,通过 SQL 语句可以方便的对大量数据进行增、删、改、 查操作,数据库是对大量的信息进行管理的高效的解决方案。
2.4 数据库管理系统
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软 件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。 用户通过数据库管理系统访问数据库中表内的数据
2.5 数据库管理系统、数据库和表的关系
数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保 存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。数据库管理系统、数据 库和表的关系如图所示:
先有数据库 → 再有表 → 再有数据 一个库包含多个表
2.6 常见数据库
MYSQL :开源免费的数据库,小型的数据库。已经被 Oracle 收购了 MySQL6.x 版本也开始收费。
Oracle :收费的大型数据库, Oracle 公司的产品。 Oracle 收购 SUN 公司,收购 MYSQL 。
DB2 : IBM 公司的数据库产品,收费的。常应用在银行系统中 SQLServer : MicroSoft 公司收费的中型的数据库。 C# 、 .net 等语言常使用。
SyBase :已经淡出 历史舞台。提供了一个非常专业数据建模的工具 PowerDesigner 。
SQLite : 嵌入式的小型数据库,应用在手机端。
常用数据库: MYSQL , Oracle 在web应用中,使用的最多的就是 MySQL 数据库,原因如下: 1. 开源、免费 2. 功能足够强大,足以应付web应用开发
2. 建库 建表
数据库语句的关键词建议最好大写
创建数据库语法结构:
create database if not exists db_name
-- create database 表示创建数据库,是SQL中的关键词
-- db_name是要创建的数据库名称
使用数据库:
USE db_name
-- 使用USE关键词来指定要使用的数据库
删除数据库语法结构
drop database db_name
-- 使用DROP关键字删除数据库
3. 创建数据表
创建数据表的语法结构
create table tab_name(
col_name datatype default null/number comment '注释',
col_name datatype
)CHARACTER set 编码格式;
-- 使用create table关键词创建数据表
-- tab_name是数据表的名称
-- col_name是列名称
-- datatype是列的数据类型
-- default是默认值
-- comment是注释
3.1 数据类型
数据类型名称 | 描述 |
---|---|
SMALLINT | 小的整数,带符号的范围是-32768到32767.无符号的范围是0到65535 |
MEDIUMINT | 中等大小整数-8388608到8388607,0到16777215 |
INT/INTEGER | 普通大小的整数,-2147483648到2147483647,0到4294967295 |
BIGINT | 大整数,-9223372036854775808到9223372036854775807,0到 18446744073709551615 |
FLOAT | 小(单精度)浮点数,允许的值-3.402823466E+38到-1.175494351E-38,0和 1.175494351E-38到3.402823466E+38,这些是理论限制,基于IEEE标准。实际 的范围根据硬件或操作系统的不同可能稍微小些 |
DOUBLE | 普通大小(双精度)浮点数,允许的值-1.7976931348623157E+380 到-2.2250738585072014E-308,0和2.2250738585072014E-38到 1.7976931348623157E+308.这些事理论限制,基于IEEE标准。实际的范围根据 硬件或操作系统的不同可能稍微小些 |
DATE | 日期,支持的范围为‘1000-01-01’到‘9999-12-31’,MySQL以'YYYY-MM-DD'格式 显示DATE值,但允许使用字符串或数字为DATE列分配值 |
DATETIME | 日期和时间的组合。支持的范围是‘上面加上00:00:00’到‘上面第二个加上 23:59:59’.MySQL以YYYY-MM-DD HH:MM:SS“格式显示DATETIME值,但允 许使用字符串或数字为DATETIME列分配值 |
TIMESTAMP | 时间戳,范围是'1970-01-01 00:00:00'到2037年 |
TIME | 时间,范围是‘-838:59:59’到‘838:59:59’.MySQL以‘HH:MM:SS’格式显示 TIME值,但允许使用字符串或数字为TIME列分配值 |
YEAR | 两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到 2155和0000.在两位格式中,允许的值是70到69,表示从1970到2069年。 MySQL以yyyy格式显示YEAR值,但允许使用字符串或数字为YEAR列分配值 |
CHAR(M) | 固定长度字符串,当保存时在右侧填充空格以达到指定长度。M表示列长度。M 的范围是0到255个字符 |
VARCHAR(M) | 变长字符串。M表示最大列长度。M的范围是0到65535.(VARCHAR的最大实际 长度由最长的行的大小和使用的字符集确定。最大有效长度是65355字节) |
BLOB[(M)] | 最大长度为65535(216-1)字节,=的BLOB列,可以给出该类型的可选长度M。 如果给出,则MySQL将列创建为最小的但是足以容纳M字节长度的值的BLOB类 型 |
TEXT[(M)] | 长字符串,最大长度为65535(216-1)字符的TEXT列。可以给出可选长度M。则 MySQL将列创建为最小的但是足以容纳M字符长度的值的TEXT类型。 |
3.2 查看表结构
-- 查看表结构
DESCRIBE dept;
3.2 创建和某表结构一样的表
-- 创建和dept结构一样的表
CREATE TABLE d LIKE dept;
3.3 删除表
DROP TABLE table_name
3.4 添加列
ALTER TABLE d ADD id int;
3.5 修改列
ALTER TABLE d MODIFY id VARCHAR(20);
3.6 修改列名
ALTER TABLE d CHANGE id ss VARCHAR(20);
3.7 删除列
ALTER TABLE d DROP ss;
3.8 重命名表
RENAME TABLE d to dd;
4. CRUD操作
对数据表中的数据操作通常有添加(Create)、查询(Retrieve)、修改(Update)、删除(Delete)、简称 为CRUD。
4.1 添加数据
-- 不推荐使用
INSERT INTO dept VALUE(1,'研发部');
-- 2
INSERT INTO dept VALUES(2,'销售部');
INSERT INTO dept VALUES(3,'行政部'),(4,'技术部');
-- 3
INSERT INTO dept(deptno,deptname)VALUES(5,'安保部');
区别:
- value和values的区别,values可以同时插入多条数据用逗号隔开
- dept和dept(列名,列名。。。)区别,如果不写列表必须按照列表创建时的顺序每一列都要添加 有列名的按照列名排列顺序添加
4.2 查询数据
-- 查询所有数据
SELECT *FROM dept;
-- 查询某列的数据
SELECT deptname FROM dept;
-- 根据条件查询*
SELECT deptno FROM dept WHERE deptname='销售部';
4.3 修改数据
--全部修改为6
UPDATE dept SET deptno=6;
--根据条件修改
UPDATE dept SET deptno=1 WHERE deptname='研发部';
UPDATE dept SET deptno=2 WHERE deptname='销售部';
UPDATE dept SET deptno=3 WHERE deptname='行政部';
UPDATE dept SET deptno=4 WHERE deptname='技术部';
UPDATE dept SET deptno=5 WHERE deptname='安保部';
4.4 删除数据
-- 删除数据 ,一定要加 where 条件
DELETE FROM dept WHERE deptno=5;
-- 全部删除
DELETE FROM dept;
-- 清空/截断 所有数据(慎用)
TRUNCATE TABLE dept;
区别:
delete from dd;
truncate table dd;
delete 是清空表中的数据
truncate 是清空表数据,重新创建一个一样表
5. 数据备份和还原
5.1 命令行备份
mysqldump -h127.0.0.1 -uroot -proot db_name>path;
使用mysqldump 命令备份数据库
-h指定数据库所在的服务器的ip地址
-u指定登录数据库的用户名
db_name是要备份的数据库的名称
使用输出目标操作符>,指定输出的文件具体路径c:/back.sql
5.2 命令行还原
mysql -h127.0.0.1 -uroot -proot db_name;
6. 约束
6.1 主键约束
主键约束最显著的特征是主键列中的值是不允许重复的,通过主键约束可强制表的实体完整性。当 创建或更改表时可通过定义 primary key约束来创建主键。一个表只能有一个primary key约束, 且primary key约束中的列不能接受NULL值。
alter table tab_name add constraint pk_name primary key (deptno);
-- 创建表时
CREATE TABLE `table_name` (
`id` int(0) NOT NULL,
`name` varchar(20) ,
PRIMARY KEY (`id`) -- 设置主键
);
-- 设置主键是deptno
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);
6.2 自增长列
并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自增长列是int类 型的,其值是int类型的,其值是由数据库自动维护的,是永远都不会重复的,因此自增长是最适合作为 主键列的。在创建表时,通过auto_increment关键字来标识自增长列,在MySQL数据库中自增长列必 须时主键列。
6.3 自增长与主键
CREATE TABLE emp(
empNo INT PRIMARY KEY AUTO_INCREMENT,
job VARCHAR(10),
mgr INT,
sal DOUBLE,
comm DOUBLE,
deptno INT
)CHARACTER SET utf8;
6.4 唯一约束
对于非主键列中的值也要求唯一性时,就需要唯一约束
6.5 默认约束
为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了
6.6 外键约束
表中列的值来自于另外一张表的主键或唯一键的列称为外键FK,将被引用值得表称为主表或父表,将引 用值得表称为从表或子表。
alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES dept(deptno);
-- dept 是主表, userinfo 是从表
-- 在 userinfo 表中添加或修改时, dept_no 列的值必须是 dept 表中 deptno 字段中的存在值
-- 删除从表数据可以直接删除
-- 删除主表数据时,会先检查从表中有没有对此数据的关联,如果有不能直接删除
-- on delete CASCADE/ on update CASCADE 级联删除 / 级联更新
心得体会
今天学习了一些数据库的知识,更重要的是了解了很多的面试技巧,对自己的简历进行了比较大的修改,终于对简历较为满意了。
近期评论