美文网首页
DataBase总结

DataBase总结

作者: 陈洲 | 来源:发表于2017-02-26 23:12 被阅读0次
// sql语言 ************************************************
    
    //******数据库******:

    //查看所有数据库
    show databases;

    //创建数据库
    create database name;

    //删除数据库
    drop database name;

    //修改数据库默认码表
    alter database name default character set utf-8;

    //选择数据库
    use name;

    

    //******表******:

    //查看所有表
    show tables;

    //创建表
    create table student(sid int, sname varchar(20),sage int);

    //查看表结构
    desc student;

    //删除表
    drop student;

    //修改表的名字
    alter table student rename to teacher;

    //添加表的字段(属性)
    alter table student add column sgender varchar(2);

    //删除字段
    alter table student drop column sgender;

    //修改字段类型
    alter table student modify column sgender varchar(1);

    //替换字段
    alter table student change column sgender sex varchar(2);



    //******数据******

    //增加一组数据
    insert into student values('313....','cz',23);
    
    //插入部分数据
    insert into student (saccount,sname) values('313....','cz');

    //修改一列所有数据
    update student set saccount='3139801004';

    //带条件修改
    update student set saccount='3139801004' where sname='cz';

    //修改多个属性
    update student set account='3139801004',sage=23 where sname='cz';

    //删除所有数据
    delete from student;

    //带条件删除
    delete from student where age=21;

    //另一种删除方式,不能带条件,但是不同于delete,可以把约束删除
    truncate from student;

    //查询所有列
    select * from student;

    //查询制定列
    select age,sname from student;

    //查询时添加常量列,临时添加,显示完消失,下同
    select age,sname,'浙江大学'as'学校' from student;

    //查询时合并列,只能数值合并
    select sname,(sage+smoney)as‘abc’ from student;

    //查询时去除重复
    select distinct sage from student;

    //条件查询
    /*
        可用的逻辑表达式:
        and,or,<,>,<=,>=,<>(不等于sage<>20)
        between and: sage between 20 and 25;(包前包后)
        is null,is not null;

    */
    select sname from student where .....

    //模糊查询
    select sname frome student where like 'chen%'; //任意字数
    select sname frome student where like 'chen_'; //固定字数

    //聚合查询
    /*
        聚合函数: sum(),avg(),max(),min(),count()(求个数,不记录null);
    */
    select avg(sage) as 'avgage' from student;

    //分页查询 limit 第几页,几个数据
    select * from student limit 0,2;

    //查询排序 ASC正序 DESC反序
    select * from student order by sage asc; // 默认正序

    //分组排序 group by
    select sex,count(*) from student group by sex; //效果 man 3; women 2;

    //分组后再筛选
    select sex,count(*) from student where group by      having count(*)>2;

    //Select into语句
    select sname into tercher from student; //用于表
    select sname into x from student where sid=1; //用于变量


    //DDL,DML,DQL,DCL
    1. 数据查询语言DQL //SELECT,FROM,WHERE
    2 .数据操纵语言DML //INSERT, UPDATE, DELETE
    3. 数据定义语言DDL //CREAT,DROP,ALTER,TRUNCATE
    4. 数据控制语言DCL //GRANT 

    //******约束******
    /*  
        普通约束:
        default 默认值
        not null 非空
        unique 唯一
        primary key 主键,不能重复
        zerofill primary key auto_increament 主键自动从0开始填充

    */
    /*
        外键约束格式:
        constraint 本表名_参考的表名_fk foreign key(本表内的元素) references 参考表名(参考表元素)
        on update cascade : 级联修改
        on delete cascade : 级联删除

        表1:lesson(
            id int primary key,  //被参考的表中要有个primary key
            lessonName varchar(20);  //1=语文,2=数学, 3=英语
        )
        表2: student(
            name varchar(20),
            sex varchar(2),
            less int,   //课程
            constraint student_lesson_fk foreign key(less) references lesson(id) on update cascade on delete cascade
            // 效果:不允许加入less的数字是lesson表中没有的,lesson表中的id改了或删除了student表中也一起变更
        )

    */      
        create table student(
            age int ...普通约束...;
            外键约束
        );
        

    //******关联查询******
        /*
            student(
                studentId int,
                sname varchar(20),
                lessId int,
            )
            lesson(
                lname varchar(20),
                lessonId int
            )
            要的效果:
            chenzhou math
            chenzhen english
            。。。。。
        */
        //内连接:内连接必须两方都有的才显示出来
            select sname,lname fronm student lesson where student.lessId=lesson.lessonId; //或者
            select s.sname l.lname
            from student s
            inner join lesson l
            on s.lessId=l.lessonId; //s,l为表的别名,可以不用


        //外连接:
        //左(右:把left该right)连接:左连接不同于内连接,左边值(s.sname)会全部显示出来,右边的没有匹配的就是NULL
            select s.sname l.lname
            from student s
            left join lesson l
            on s.lessId=l.lessionId;



    //******存储过程******
        //创建
        delimiter$
        create procedure TEXT(..in age int, out .....参数..)   //参数前缀in,out,inout:输入,输出,输入输出
        begin
            。。。。。。
        end$

        //执行
        call TEXT(10,....)

        //语法
            //赋值
            set age=10;
            //变量,声明变量 declare x int,赋值 set x = 1;
                @@x //全局变量, 由服务器创建
                @x  //会话变量,一次与数据库连接的会话中
                x   //局部变量,存储过程中
            //控制流程
                if 条件 then
                    。。。。;
                elseif 条件 then
                    。。。。;
                elseif 条件 then
                    。。。。;
                else
                    。。。。;
                end if;

                where 条件 do
                    。。。;
                    。。。;
                end where;

    //******触发器******
        //触发器类型insert on , update on, delete on
        create trigger 名字 after insert on 表 for each row    -- 当往员工表插入一条记录时
        。。。。。。;    //执行动作
    //查看活跃的连接列表
        show processlist;


    //******数据库范式******

    第一范式: 要求表的每个字段必须是不可分割的独立单元(一个单位一个值,name='chenzhou' 不能 name='chenzhou|chenzhen')
    第二范式: 在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖。(错误:[课程代号 学号])
    第三范式: 在第二范式基础,所有字段都只能与主键有直接决定依赖关系。( 错误:[姓名 学号 课程代码 课程分数] )


// jdbc ************************************************
    
    //java连接数据库的方法
    /*
        连接数据库要用的三个要素:
        1.url:"jdbc:mysql://localhost:3306/chenzhou"
                jdbc协议:数据库协议:主机:端口/数据库名
        2.user: 用户名
        3.password: 密码
    */

        //连接方法一,推荐
        Class.forName("com.mysql.jdbc.Driver"); //加载了该Driver类,运行了其中静态代码块,向DriverManager注册了驱动
        Connection conn = DriverManager.getConnection(url,user,password);

        //方法二
        Driver driver = new com.mysql.jdbc.Driver();
        Properties pro = new Properties();
        pro.setProperty("user",user);
        pro.setProperty("password",password);
        Connection conn = driver.connect(url,pro);

    //jdbc常用API

        //关闭Connection
        conn.close();

        //创建statement对象
        Statement statement = conn.createStatement();

        //执行静态sql更新语句(DDL,DML)
        int r = statement.executeUpdate(String sql); //返回更新行数
        ResultSet result = statement.executeQuery(String sql);

        //关闭Statement
        statement.close();

        //ResultSet操作
        XX e = result.getXX("name");
        XX e = result.getXX(index); //列的序号,从1开始
        boolean flag = result.newx(); //光标移动到写一行

        //PrepareStatement 常用
        String sql = "UPDATE student SET name=? WHERE id=?" //?处是不同于静态sql
        PrepareStatement pre = conn.prepareStatement(sql);
        pre.setString(1,"cz"); //第一个?参数设置为"cz";
        pre.setInt(2,3139); //第二个设置为3139;
        int flag = pre.executeUpdate();
        //Result result = pre.executeQuery(); 同静态,用于DQL语句

        //存储过程
        String sql = "CALL text(?,?)" //第一个是输入,第二个是输出
        CallableStatement call = conn.prepareCall();
        call.setInt(1,10);
        call.registerOutParameter(2,java.sql.Types.VARCHAR);
        call.executeQuery(); //存储过程只有executeQuery();
        String result = call.getString(2); //结果



    //数据库元数据
    DatabaseMetaData md = conn.getMetaData();

    //获取数据库信息
    String user = md.getUserName(); //用户名
    String url = md.getURL(); //获取连接数据库的url
    String p = md.getDataBaseProductName();//Mysql

    //statement的元数据
    PreparedStatement ps = conn.prepareStatement(sql);
    ParameterMetaData pm = ps.getParameterMetaData();

    //获取sql语句中的?数,即参数数量
    int num = pm.getParameterCount();

    //ResultSet的元数据
    ResultSet rs = ps.executeQuery(sql);
    ResultSetMetaData rsmd = rs.getMetaData();

    //获取列数和列名称
    int count = rsmd.getColumnCount(); //获取结果的列数
    String name = rsmd.getColumnName(1); //索引从1开始

    

相关文章

网友评论

      本文标题:DataBase总结

      本文链接:https://www.haomeiwen.com/subject/hgmawttx.html