数据库整理

1:法:创建数据库
create database db1 charset utf8;
数据库命名规则:字母数字下划线 @ # $
区分大小写
唯一性
不能使用关键字



2:数据库相关操作:
查看数据库:
show databases
show create database db1
select database();

3:选择数据库名
use db1

4:
删除数据库:
drop database db1

5 修改数据库
alter database db1 charset utf8


二 表
创建表
create table db1(
id int perimary_key,
name varchar(255),
)

改表
alter table db1 modify name char(16),

查看
show tables
查看表的详细信息
show create table db1;

查看表结构desc db1


删表
drop table db1




w文件的一行内容
增:
insert into db1.t1 values
(1,'egon'),
(2,"alex")
(3,"lxx")


修改表名:alter table 旧表名 rename 新表名;
增加字段;alter table 表名 add 字段名 数据类型【完整性约束条件}
删除字段 alter table 表名 drop 字段名





数据类型
整型:
1:作用
id号,各种号码, 年龄 等级


浮点型
作用:存储身高体重 薪资
相同点:
对于三者来说, 都能存放30位小数
不同点
精度的顺序从低到高:float double decimal
float与 double类型能存放的整数位比decimal更多


整型
1:作用:姓名 地址 描述类的信息

2:分类:
char 定长
varchar 变长

对比:
char:
优点:存取速度快
缺点:浪费空间

varchar:
优点:节省空间
缺点:节省空间


日期类型:
date:1999-01-27
time :11:11:11
datetime:1999-01-27 11:11:11
year:1999



枚举类型与集合类型:
enum:单选 只能在给定的范围内选一个值 如 sex 性别,只能选男女
set:对选,可以选择多个值 如何:爱好 可以有多个爱好



三: 完整性
not null 与 default
是否可空 null 表示空 非字符串
not null不可空
null 可空


default 默认值 创建列时可以指定默认值


unique 设置唯一约束


primary key 主键 不为空且唯一


auto-increment:约束字段为自动增长 被约束的字段必须同时被key 约束

foreign key 外键:foreign key(press_id) references press(id)

多对一:关联方式 foregin key

多对多: 关联方式 foreign key + 一张新的表

一对一 foreign key + unique


四:单表查询语法:
select distinct 查询字段1 查询字段2 。。。。 from 表名
where 分组之前的过滤条件
group by 分组 依据
having 分组之后的过滤条件
order by 排序字段
limit 显示的条数



五 多表查询

内连接:把两张表有对应关系的记录链接成一张虚拟表
select * from t1 inner join t2 on t1.t2_id =t2.id


左练级:在内连接的基础上保留左边没有对应关系的记录
select * from t1 left join t2 on t1.t2_id=t2.id

右链接:在内连接的基础上保留右边没有对应关系的记录
select * from t1 right join t2 on t1.t2_id=t2.id


全连接:在内连接的基础上 保留左右边没有对应关系的记录
select* from t1 join t2 on t1.t2_id=t2.id
union
select * from right join t2 on t1.t2_id=t2.id;



六 子查询
吧一个查询语句用括号括起来,当做另外 一条查询语句的条件去用,称为子查询:
select t1.name from t1 inner join t2 on t1.t2_id=t2.id where t2.name="技术":




七:创建视图
视图就是通过查询得到一张虚拟表, 然后保存下来 下次可以直接使用
这样可以不用重复查询。

语法:
create view teacher_view as select tid from teacher where tanme="李萍老师"
于是查李萍老师教授的课程名sql 可以改为:
create view teacher2course as
select * from teacher inner join course
on teacher.tid = course.teacher_id;

强调:
在硬盘中,视图自由表结构文件, 没有表数据文件
视图用处用于插叙 尽量不要修改视图中的数据

删除: drop viewteacher2course


八:触发器:
1:在满足对某张表数据的增删改的情况下 自动触发的功能称之为触发器
2:触发器专门针对我们对某一涨表数据增 insert 删delete 改update 的行为 这类行为一旦执行就会触发触发器的执行, 即自动运行另外一段sql代码

3:针对插入
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
sql代码
end

针对删除
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
sql 代码。。
end


针对修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
sql代码。。。
end


04 案例
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no') #0代表执行失败
);

CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);

delimiter $$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
if NEW.success = 'no' then
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
delimiter ;


drop trigger tri_after_insert_cmd;


九:事务
01 什么是事务
开启一个事务可以包含一些sql语句,这些sql语句要么同时成功
要么一个都别想成功,称之为事务的原子性

02 事务的作用


03 如何用
create table user(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);

try:
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #卖家拿到90元
except 异常:
rollback;
else:
commit;
posted @ 2018-06-10 17:34  C3的脚印  阅读(225)  评论(0编辑  收藏  举报