数据库学习
;
第一范式 确保每列是不可再分的最小数据单元
第二范式 每个表只描述一件事
第三范式 如果一个关系满足第二范式,并且除主键以外的其他列
都不传递依赖于主键列
Mysql配置
详细配置 Detailed Configuration
标准配置 Standard Configuration
Mysql应用方式
Developer Machine 最小数量内存
Server Machine 中等大小内存
Dedicated Mysql Server Machine 最大内存
数据库用途
Multfunctional Database(多功能数据库) 对事务性存储引擎和非事务性存储引擎读取很快
Transactional Database Only(事务性数据库) 优化事务性但是非事务性也可以
Non-Transactional Database Only(非事务性型) 优化非事务性 事务性不能使用
Decision Support(决策支持系统) 连接数20
Online Transaction Processing (在线事务系统) 连接数500
Manual Setting (手工设置)
win服务
mysqld --console
关闭服务
mysqladmin -uroot shutdown
手工启动
net start mysql
net stop mysql
启动服务
service mysql start
service mysql restart
service mysql stop
Sql基础
DDL(数据定义语言) 定义不同数据段,数据库,表等数据库对象 Create,drop,alter
DML(数据操纵语句)添加,删除,更新,和查询数据库insert,delete,uodate,select(表内部)
DCL(数据控制)控制不同数据段许可和访问级别 grant,revoke
DDL语句
Information_schema 存储一些数据库对象信息
cluster 存储系统集群
mysql 存储系统用户权限信息
1.创建数据库 mysql -uroot -p
2.Create database dbname
3.show databases
4.Use dbname 要操作的数据库
5.show tables 查看数据表
6.drop database dbname 删除数据库
7.Create table tablename
(
column_name colum_type constraints
列名 类型 约束
)
8.desc tablename 查看表信息
9.show create table tablename \G 查看创建表sql语句
10.drop table tablename 删除表
11.alter table tablename modify column 修改表类型
12. alter table tablename modify column column_name column_type
alter table test modify ename varchar(20)
13.alter table table_name add column column_name column_type 添加字段
14.alter table table_name drop column column_name 删除字段
15.alter table table_name change column_name column1_name column_type
change和modify 都可以修改表 change 后面需要写两次列名 可以修改列名 modify不能
16.修改字段增加和修改 有可选项first/after/column_name
alter table test add age after ename;
alter table test modify ename int(3) first
更改表名
alter table table_name rename newtablename
DML语句
1. 插入记录 insert into tablename(firld1,firld2) values(value1,value2)
2. 多行插入
insert into table (firld1,firld2) values (value1,value2),(val1,val2);
3. 查询 select * from tablename
4. 更新记录 update tablename set field=value1,field1=value2 where 条件
5. 同时更新多个表数据
update t1,t2, set t1.age=t1.age*2, t2.name=t1.ename where t1.name=t2.ename;
6. 删除记录
delete from tablename where 条件
7. 删除多表
delete t1,t2 from tmp a, emp where a.tmpname =b.empname and a.tmpname='admin';
8. 查询记录
select * from tablename where条件
9. 查询不重复的记录
select distinct ename from tmp;
10. 排序和限制
select * from tablename where 条件 [order by field DESC/ASC]
11. limit 显示前3行记录
select * from emp order by ename limit 3
12. 聚合
select field1,field fun_name from tablename where 条件 [group by field] [with rollup][having where 条件]
fun_name 聚合操作(聚合函数) sum ,max min
group by 要进行分类聚合的字段
with rollup 可选语法 是否对分类聚合后的结果再汇总
having 对分类后的结果再进行条件过
select sum(age),max(age),min(age) from tmp;
13. 表连接 内连接和外连接=>左连接和右连接
左连接 包含所有的左边表中记录甚至是右边表中没有和它匹配的记录
右连接 包含所有的右边表记录甚至是左边表中没有和它匹配的记录
select t1,t2 from tmp,emp where tmp.tmpname=emp.empname;
select t1,t2 from tmp left join emp on tmp.tmpname=emp.empname;
子查询
select * from tmp where tmpname =(select tmpname from emp where emp.name='root')
如果子查询记录数唯一 可以用=代替in
记录联合
select * from t1 union/union all
区别 union all 是把结果合并在一起 union 是将union all再 distinct 去除重复记录
select empname from emp union all
创建存储过程
create procedure GetPro
as
begin
select Relationship_2.func_role_id from Relationship_2
join T_user on T_user.user_id=Relationship_2.user_id
end
execute GetPro
DCL 语句
DBA用来管理系统中的对象权限
授出权限 grant select,insert on sakila. * to 'z1'@'localhost ' identified by '123';
收回权限 revoke insert on skila.* from 'z1' @'localhost';
按照层次看帮助 ? content ? data types ? show
查看元数据
约束
https://blog.csdn.net/xiyiyindie/article/details/52583861
https://blog.csdn.net/CCSUXWZ/article/details/61435056
判断数据库是否存在
if exists (select * from sys.databases where name = '数据库名')
drop database [数据库名]
判断表是否存在
if exists (select * from sysobjects where id = object_id(N'[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [表名]