之前学习数据库的笔记

数据库设计的三大范式:
概念:
     关系型数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效,优雅的数据库。
     一般项目中用的最多的也就是第三范式,性能和维护比较平衡
第一范式:数据库中的每个字段都是不可拆分的数据项,那么就满足第一范式
第二范式:首先满足第一范式,其次,每个非主键字段是由主键字段来决定的。
第三范式:首先满足第二范式,其次,非主键字段之间不存在函数依赖关系


简单的可以理解为:
第一范式就是原子性,字段是不可再分割的;
第二范式就是完全依赖的,没有部分依赖;
第三范式就是没有传递依赖


数据库的选择方面:
项目大小方面:
Oracle和SQLServer适合企业级项目
MySQL更适合互联网项目的开发
价格方面:
Oracle和SQLServer需要支付一定费用
mySQL开源免费
语言选择方面:
.net跟SQLserver结合比较好
PHP和Java跟其他结合比较好


MySQL常用存储引擎比较:
MyISAM:不支持事务,表级锁,查询效率高,适用于查询多的情况下
Innodb:推荐使用的,支持事务,行级锁,MySQL5.5之后默认的存储引擎
Archive:该存储引擎查询和添加操作,适合做日志存储


怎么样修改MySQL的存储引擎:
1>可以通过修改MySQL的配置文件my.ini文件的关键字是default-storage-engine = 所要修改的名称
2>可以通过创建表的时候 加上 engine = myisam
3>还可以通过sql语句的方式修改:alter table 表名 engine = 存储引擎名称;


下面都是以MySQL为例:
命名规范:
 数据库的表和字段一定要有字段含义,方便表的字段的可读性和维护性


*数据库的基本操作(以MySQL为例):
修改数据库的字符编码:alter database 数据库名 character set = utf8;


*显示表users中字段的详细信息:
show columns from users;


多表更新例子:
update 第一张表 INNER JOIN 第二张表  on 第一张表的字段 = 第二张表的字段(on后面是字段值相同)
set 第二张表的某个字段 = 第一张表的某个字段


*把查询出来的数据插入到刚创建的表中
create table 表名(
    
    id smallint unsigned primary key auto_increment;
    username varcher(33) not null;



select 列名 from 表名 ;//查询出来的记录


/
*MySQL中的存储过程
定义:存储过程是SQL语句和控制语句的预编译集合,以一个名称存储,并作为一个单元处理。


存储过程的优点
1、增强了SQL语句的功能和灵活性
2、实现较快的执行速度
3、减少了网络流量


创建存储过程
1>创建没有参数的存储过程:
例子:创建一个不带参数的存储过程:CREATE PROCEDURE sp1() select version();
调用存储过程:
CALL sp1;或者 CALL sp1();
2>创建带有IN类型参数的存储过程
//根据指定id删除用户
DELIMITER //
CREATE PROCEDURE removeUserById(IN id INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = id ;
END
//
后面把定界符修改回来


//删除存储过程
DROP PROCEDURE removeUserById;


//查看已创建的存储过程的状态
show procedure status;




3>创建带有IN和OUT类型参数的存储过程
先修改定界符,然后创建存储过程
DELIMITER //
CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END
//
调用存储过程:
CALL removeUserAndReturnUserNums(22,@nums);
@nums表示用户变量


4>创建带有多个OUT类型参数的存储过程:
同上


5>存储过程与自定义函数对的区别:
存储过程实现的功能更复杂一些;而函数的针对性更强
存储过程可以返回多个值;函数只能有一个返回值
存储过程一般都是独立的来执行的;而函数可以作为其他SQL语句的组成部分来出现






CREATE FUNCTION f1() RETURNS VACHAR(20)
RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');


修改数据表(添加外键约束)
alter table 表名 add foreign key(需要添加的外键列名) references 
另外一张的名称(另一张表需要关联的外键字段)


alter table 表名 add foreign key(需要添加的外键列名) references 表名(字段名)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值