数据库:长期保存在计算机内的数据集合,相当于一个仓库。
作用:用来保存和管理数据
数据库的基本命令
修改密码
updata user set password=password('123456') where user='root';
刷新数据库
flush privileges;
show databases; 显示所有数据库 use dbname;打开某个数据库 show tables; 显示数据库mysql中所有的表 describe user; 显示表mysql数据库中user表的列信息 create database name; 创建数据库 use databasename; 选择数据库DDL数据定义语言 create、drop、alter
DML数据操作语言 insert、updata、delete
DQL数据查询语言 select
DCL数据控制语言 grant、commint、rollback
数据字段属性 UnSigned无符号的声明该数据列不允许负数 .
ZEROFILL 0填充的不足位数的用0来填充 , 如int(3),5则为005
Auto_InCrement自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)通常用于设置主键 , 且为整数类型可定义起始值和步长当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)
NULL 和 NOT NULL默认为NULL , 即没有插入该列的数值如果设置为NOT NULL , 则该列必须有值
DEFAULT默认的用于设置默认值
例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值
insert(添加数据语句)
update(更新数据语句)
delete(删除数据语句)
外键:将一个表的值放入第二个表来表示关联
主要目的是控制存储在外键表中的数据,形成约束。
使两张表形成关联,外键只能引用外表中的列的值或使用空值。
create table grade( gradeid int(10) not null auto_increment comment'年级ID', gradename varchar(50) not null comment'年级名称', primary key(gradeid) )engine=innodb default charset=utf8 ) CREATE TABLE `student` ( studentno INT(4) NOT NULL COMMENT '学号', studentname VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名', primary key(studentno ), key `FK_gradeid` (`gradeid`), constraint FK_gradeid foreign key(`gradeid`) refrences`grade` (`gradeid`) ) ENGINE=INNODB DEFAULT CHARSET=utf8DML语言
insert into test(coll) values(row1),(row2),(row3);
delete from test;
truncate table test;//删除表数据
AS 子句作为别名
select studentno as 学号,studentname as 姓名 from student;//列取别名
select studentno as 学号,studentname as 姓名 from student as s;//表取别名
selecr concat('姓名:',studentname) as 新名字 from studnet//查询结果取名字
DISTINCT去掉SELECT查询返回的记录结果中重复的记录
SELECT DISTINCT studentno FROM result;select studentno,studentresult from result where studentresult >=95 and studentresult<=100;
and可换为&&,between 95 and 100;
student result
内连接inner join
查询两个表中的结果集中的交集select s.studentno,studentname,subjectno,result from
student s inner join result r on
r.studentno=s.studentno
外连接
左外连接left join
以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充select s.studentno,studentname,subjectno,result from
student s left join result r on
r.studentno=s.studentno
右外连接right join
以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充select s.studentno,studentname,subjectno,result from
student s right join result r on
r.studentno=s.studentno
等值连接
select s.studentno,studentname,subjectno,result from
student s ,result r
where r.studentno=s.studentno
自连接
order by
asc升序
dasc降序
select s.studentno,studentname,subjectname,subjectresult
from student s inner join result r on r.studentno=s.studentno
inner join subject sub on r.studentno=sub.studentno
where subjectname='数据库结构-1'
order by studentresult desc
select s.studentno,studentname,subjectname,subjectresult
from student s inner join result r on r.studentno=s.studentno
inner join subject sub on r.studentno=sub.studentno
where subjectname='数据库结构-1'
order by studentresult desc,studentno
limit 0,5
select s.studentno,studentname,subjectname,subjectresult
from student s inner join result r on r.studentno=s.studentno
inner join subject sub on r.studentno=sub.studentno
where subjectname='数据库结构-1'
order by studentresult desc
-- 方法二:使用子查询(执行顺序:由里及外select studentno,subjectno,studentresult
from result
where subjectno=(
select subjectno from subject
where subjectname='数据库结构-1'
)
SELECT SUM(StudentResult) AS 总和 FROM result; SELECT AVG(StudentResult) AS 平均分 FROM result; SELECT MAX(StudentResult) AS 最高分 FROM result; SELECT MIN(StudentResult) AS 最低分 FROM result;
事物:
事务就是将一组SQL语句放在同一批次内去执行
如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
同生共死
事物的特性(ACID)
原子性(Atomic)
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态。
一致性(Consist)
事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
其主要特征是保护性和不变性
以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,
如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,
五个账户总额也应该还是500元,这就是保护性和不变性。
隔离性(Isolated)
给定时间内执行的唯一操作。不同事物之间互不影响
如果有两个事务,运行在相同的时间内,执行相同的功能,
事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。
这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性(Durable)
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
读未提交(Read UnCommitted/RU) 又称为脏读,一个事务可以读取到另一个事务未提交的数据。这种隔离级别岁最不安全的一种,因为未提交的事务是存在回滚的情况。
读已提交(Read Committed/RC) 又称为不可重复读,一个事务因为读取到另一个事务已提交的修改数据,导致在当前事务的不同时间读取同一条数据获取的结果不一致。
可重复读(Repeatable Read/RR)
又称为幻读,一个事物读可以读取到其他事务提交的数据,但是在RR隔离级别下,当前读取此条数据只可读取一次,在当前事务中,不论读取多少次,数据任然是第一次读取的值,不会因为在第一次读取之后,其他事务再修改提交此数据而产生改变。因此也成为幻读,因为读出来的数据并不一定就是最新的数据。
串行化(Serializable) 所有的数据库的读或者写操作都为串行执行,当前隔离级别下只支持单个请求同时执行,所有的操作都需要队列执行。所以种隔离级别下所有的数据是最稳定的,但是性能也是最差的。数据库的锁实现就是这种隔离级别的更小粒度版本。
插入的数据要满足三大范式
第一范式 (1st NF)
第一范式的目标是确保每列的原子性
第二范式(2nd NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式要求每个表只描述一件事情
第三范式(3rd NF)
如果一个关系满足第二范式,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式.
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
引用
http://mp.weixin.qq.com/mp/homepage?__biz=Mzg2NTAzMTExNg==&hid=4&sn=044c8767bd3c1825a329c2b98fff2ffe&scene=18#wechat_redirect
