zoukankan      html  css  js  c++  java
  • 数据库整理

    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;
  • 相关阅读:
    7、单向一对多的关联关系(1的一方有n的一方的集合属性,n的一方却没有1的一方的引用)
    6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)
    解决ubuntu的screen已经处于Attached状态,无法再打开窗口
    关于.ssh出错,无法从远程git仓库拉代码
    给程序添加git commit信息
    ubuntu服务器常用命令
    uint128_t 添加 c++ 重载类型强制转换
    Visual Studio 查看宏展开
    EOS dice移到1.8版本的修改汇总
    ubuntu 添加字体
  • 原文地址:https://www.cnblogs.com/lx3822/p/9163794.html
Copyright © 2011-2022 走看看