终端打开和使用mysql命令
-
管理员模式下,net start mysql打开数据库
-
然后,输入mysql -u root(用户名) -p 123456(密码),进入mysql;
-
show databases; 看看有哪些数据库;
-
use 数据库名称(如果想要创建一个数据库,使用create databases 名称;来创建)
-
....
-
退出数据库时使用quit;命令;
-
关闭mysql服务,net stop mysql
select version();查看sql的版本号 select database();查看正在使用的数据库 show databases;查看sql中有哪些数据库; creat database 库名;创建数据库 source 绝对路径(不能有中文);将文件导入数据库,执行脚本文件。 use 库名;使用数据库 show 表名;展示库中的表名 select * from 表名;查看表中的内容(*效率低,可读性差) desc(describe) 表名;查看表的结构
单行处理函数
需要注意 isnull()只能判别是否为null,ifnull(字段,替换值)可以用来替换。
多行处理函数不对null进行处理。max(),min(),count(),avg(),sum();
count((具体字段)不包括null,count(*)包含null;
单表查询执行顺序: from ->where ->group by->having->select-> order by
格式:
select ....
from ....
where ....
group by ...
having ...不能单独使用,与group by搭配使用
order by ...
模糊查询
......where 字段名 like '%t' 以t结尾的字段值
like 't%'t开头的 like '_A%' 第二个是A的字段值。
sql语句
DDl create drop alter truncate 对表的结构进行操作
DML insert delete update select
insert常与into搭配使用
update 表名 set 字段=值 where 条件
delete 删除效率低,可以通过TCL(事务控制语言) rollback 恢复数据;truncate table 表名,删除整张表,不能恢复。
复制表格
create table 表名2 as select * from 表名1;
四种约束
检查约束check(MySQL不支持,Oracle支持)
not null, unique, primary key(pk主键约束), foreign key(外键约束fk)
pk=not null +unique
主键又分自然主键和业务主键,一般常用自然主键,常与auto—increment搭配使用
fk最起码具备unique,可以为null,格式 class(
no int primary key
)
student (
num int ,
foreign(num) references class(no)
)
先创父表,再创子表,先删子表,再删父表。class 是student的父表。
查看存储引擎
show engines \G;
show create table 表名;显示存储引擎以及一些默认表结构;
事务语言(transaction control language TCL)
事务是最小单位,具有完整的业务逻辑
事务四个特性
原子性、一致性、隔离性、持久性
两个事物同时开启
select @@tx_isolation; -查询当前的隔离级别 set session transaction isolation level read uncommitted; -设置当前会话隔离级别为“读未提交”
读未提交 read uncomitted :又叫脏读,B事务只读A事务未提交的,缺点:不能读已提交的
读已提交 read comitted :解决了脏读,但不能重读读,A事务改变提交后,B事务读取的内容就会改变(Oracle默认)
可重复读 repeatable read:解决了不能重复读,但每次读取的内容都一样,所谓“幻读”,一旦B事务开启,读取内容就不变了(MySQL默认)
序列化/串化 serializable :解决了所有问题,按照序列排序,A事务开启之后,B事务不能干预
start transaction; ||开启事务
对表的操作DML insert delete update
commit 之后事务结束(成功)
rollback回滚到事务开启的状态,事务结束
索引
主键或具有唯一性的字段,自动添加索引;
create index 索引名 on 表名(加索引字段);
drop index 索引名 on 表名;
explain select * from 表名 where 字段 =字段值;查看某字段是否使用索引
底层是由B-tree构建的;
1.以%开始或2.使用or时,两字段有无索引时,索引失效;
3.复合索引,左侧有效,右侧无效。
4.索引字段参加运算;
5.索引使用函数处理
......
索引分类
单一索引,复合索引,主键索引,唯一性索引
视图
修改视图会影响原表;作用:简化开发
create view 视图名 as sql语句;
drop view 视图名;CRUD 增删改查;
C :create R:retrive
U: update D:delete
DBA
导入数据库:source 路径 后面没有;
导出数据库 : sqldump 库名 > 路径 -uroot -p密码;
数据库三范式
第一范式;有主键;
第二范式:在第一范式的基础上,非主键唯一依赖主键;
第三范式:在第二范式的基础上,不得传递依赖属性;
数据库设计
多对多,三张表,外键有两个;
一对多,两张表,外键有一个;
一对一,两张表,外键唯一;
结语
数据库的设计更多是为了满足客户的需求,三范式只是理论上的,有时候可以用冗余换速度,同时也减少了数据库的复杂。
四种连接的定义与区别
left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。
内连接:
SELECT <select_list> FROM Table_A A INNER JOIN Table_B B ON A.Key = B.Key
左连接:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key
右连接:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key
外连接:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key
左连接-内连接:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key WHERE B.Key IS NULL
右连接-内连接:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL
外连接-内连接:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL