2-mysql

定义:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。

   MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 

   (Relational Database Management System,关系数据库管理系统) 应用软件。

————————————————————————————————————————————————————
①数据库
————————————————————————————————————————————————————
    ————————————————————————————————————————————————
    1、增
    ————————————————————————————————————————————————
      Create database mydb1;
      Create database mydb1 character set gbk;
    ————————————————————————————————————————————————
    2、删
    ————————————————————————————————————————————————
      Drop database mydb3;
    ————————————————————————————————————————————————
    3、查
    ————————————————————————————————————————————————
      Show databases;
    ————————————————————————————————————————————————
    4、改
    ————————————————————————————————————————————————
      alter database mydb2 character set utf8;
    ————————————————————————————————————————————————
    5、用
    ————————————————————————————————————————————————
      Use mydb2;
————————————————————————————————————————————————————
②表
————————————————————————————————————————————————————
    数据结构:
    char(10) : 固定长度字符串类型; char(10)
    varchar(100): 可变长度字符串类型; varchar(10)
    text:字符串类型;
    blob:字节类型;
    date:日期类型,格式为:yyyy-MM-dd;
    time:时间类型,格式为:hh:mm:ss
    datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
    ————————————————————————————————————————————————
    1、增
    ————————————————————————————————————————————————
      create table user(
        id int,
        name varchar(100)
      );
    ————————————————————————————————————————————————
    2、删
    ————————————————————————————————————————————————
      DROP TABLE user ;
    ————————————————————————————————————————————————
    3、查
    ————————————————————————————————————————————————
      DESC user; //字段信息
      show tables; //查看所有表
    ————————————————————————————————————————————————
    4、改
    ————————————————————————————————————————————————
      ALTER TABLE user ADD sex varchar(100);
      ALTER TABLE user DROP sex;
    ————————————————————————————————————————————————
————————————————————————————————————————————————————
③DML
————————————————————————————————————————————————————

    INSERT INTO emp(id,name) VALUES(1,'zhangsan');

    UPDATE emp SET salary=5000,name='李昊宗';

    DELETE FROM emp WHERE name=‘李昊宗’;
————————————————————————————————————————————————————
④DQL
————————————————————————————————————————————————————
————————————————————————————————————————————————————
    1、条件查询
    ————————————————————————————————————————————————
      =、!=、<>、<、<=、>、>=;
      BETWEEN…AND;
      IN('李昊宗','范冰冰');
      IS NULL;
      AND;
      OR;
      NOT;

      SELECT * FROM stu WHERE id IN ('1','2','3'); //查询学号为1或2或3
      SELECT * FROM stu WHERE id NOT IN ('1','2','3');

      SELECT * FROM stu WHERE age IS NOT NULL;

      SELECT * FROM stu WHERE age BETWEEN 20 AND 40;

      SELECT * FROM stu WHERE gender!='male';
    ————————————————————————————————————————————————
    2、模糊查询
    ————————————————————————————————————————————————
      _ : 任意一个字母
      %:任意0~n个字母

      SELECT * FROM stu WHERE name LIKE '____i'; //名字第五个字符为i的信息

      SELECT * FROM stu WHERE name LIKE 'z%'; //匹配以z开头的名称

      SELECT * FROM stu WHERE name LIKE '%z%'; //匹配包含z的名称
    ————————————————————————————————————————————————
    3、字段控制查询
    ————————————————————————————————————————————————
      DISTINCT : 去除重复行
      AS : 别名

      SELECT DISTINCT sal FROM emp; //去掉查询结果的重复行

      SELECT *,sal+comm FROM emp; //查看月薪与佣金之和

      SELECT *,IFNULL(sal,0)+IFNULL(comm,0) FROM emp; //查看月薪与佣金之和,因为有些值为null,null值加任何值都为null

      SELECT *, sal+comm AS total FROM emp; //这一列命名为total
    ————————————————————————————————————————————————
    4、排序
    ————————————————————————————————————————————————
      ORDER BY : 任意一个字母
      DESC :降序 //关键字也用于查看表的字段信息
      ASC :升序

      SELECT * FROM stu ORDER BY id DESC,age ASC; //按id降序,id相同,按age升序

    ————————————————————————————————————————————————
    5、聚合函数、分组
    ————————————————————————————————————————————————
      sum avg max min count;
      GROUP BY ;
      HAVING;

      SELECT SUM(sal) FROM emp where id >4 GROUP BY deptno HAVING SUM(sal) > 9000; //先找出id>4的人,然后按部门分组,计算和大于90000

      //having 和 where作用一样,但是having是分组之后才进行过滤

      //查询语句书写顺序:select – from- where- group by- having- order by-limit
      //查询语句执行顺序:from - where -group by - having - select - order by-limit

    ————————————————————————————————————————————————
    6、limit
    ————————————————————————————————————————————————
      LIMIT用来限定查询结果的起始行,以及总行数。

      SELECT * FROM emp LIMIT 1; //查询1行
      SELECT * FROM emp LIMIT 3, 10; //查询10行记录,起始行从3开始

    ————————————————————————————————————————————————
    7、正则
    ————————————————————————————————————————————————

      rlike : 关键字

      SELECT name FROM person_tbl WHERE name rlike '^[aeiou]|ok$';

————————————————————————————————————————————————————
⑤数据完整性
————————————————————————————————————————————————————
    1、约束
    ————————————————————————————————————————————————
      primary key :主键(不重复,不为空)
      auto_increment :自动增长
      unique :唯一约束
      not null :非空
      default :默认值

      CREATE TABLE student(

        Id int primary key auto_increment,

        Name varchar(50) unique,

        Id age not null,

        Sex varchar(50) default '男'
      );
    ————————————————————————————————————————————————
    2、外键
    ————————————————————————————————————————————————

      //外键数据类型和主键数据类型必须一致

      CREATE TABLE student(
        Id int primary key,
        Id info_id,
        foreign key (info_id) references info(id) //设置age为student表的外键,与info表的id键相关联
      );
————————————————————————————————————————————————————
⑥多表查询
————————————————————————————————————————————————————
    1、union、union all
    ————————————————————————————————————————————————

      SELECT id,name FROM t1 UNION SELECT id,name FROM t2;

      //挑选出两张表的id,name(列名,列类型必须相同),进行合并,union会去掉重复行,union all 不会去除重复行

    ————————————————————————————————————————————————
    2、子查询
    ————————————————————————————————————————————————
        ①子查询作为表(from之后)
        ————————————————————————————————————————————

          select a.kongfu from (select kongfu,address from address order by address) as a where a.address like '香%';
          //对查询出来的表进行再次查询

        ————————————————————————————————————————————
        ②子查询作为条件(where之后,了解)
        ————————————————————————————————————————————
          any :任意
          all :全部

          SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)
          SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')

          //都能用子查询作为表查询出来
          SELECT * FROM emp,(SELECT max(sal) FROM emp WHERE deptno=30) as a WHERE sal > a.max(sal)
          SELECT * FROM emp,(SELECT job,sal FROM emp WHERE ename='MARTIN') as a WHERE (job,sal) IN (a.job,a.sal)
        ————————————————————————————————————————————
    ————————————————————————————————————————————————
    3、链接查询
    ————————————————————————————————————————————————
        ①左连接
        ————————————————————————————————————————————

          select * from a left join b on a.id = b.id;

          //以左边的表为准(a),如果a表有一条记录在b表中没有,也会查出来,只不过为空

        ————————————————————————————————————————————
        ②右连接
        ————————————————————————————————————————————
          select * from a right join b on a.id = b.id;

          //以左边的表为准(a),如果a表有一条记录在b表中没有,也会查出来,只不过为空
        ————————————————————————————————————————————
        ③内连接
        ————————————————————————————————————————————

          Select * from A inner join B ON A.Aid=B.Bnameid<=====>select * from A,B where A.Aid=B.Bnameid

          //利用内连接可获取两表的公共部分的记录
          //所以说where其实等价于内连接
        ————————————————————————————————————————————
        ④全连接
        ————————————————————————————————————————————

          select * from a full outer join b on a.id = b.id
          //返回AUB
        ————————————————————————————————————————————
————————————————————————————————————————————————————
⑦数据库函数
————————————————————————————————————————————————————

    SELECT CURRENT_DATE() `//获取当前日期 yyyy-mm-dd
    SELECT CURRENT_TIME() //获取当前时间hh:mm:ss
    SELECT NOW() //yyyy-mm-dd hh:mm:ss

    SELECT YEAR(NOW()) // 单独获取当前年
    SELECT MONTH(NOW()) // 单独获取当前月
    SELECT DAY(NOW()) // 单独获取当前日
    SELECT DATE(NOW()) // 获取当前时间的日期部分

    SELECT ADDTIME('2007-12-30 21:50:50', '1:1:1') //时间相加
    SELECT DATE_ADD('2016-6-6' ,12) //天数相加

    SELECT DATEDIFF('2016-6-8','2016-6-10') //-- 前面的时间-后面的时间的差值

    SELECT CONCAT('he','lo') // 合并字符串
    SELECT INSTR('hello','e') // 当在原字符串中找不到子字符串时,会返回0
    SELECT REPLACE('hello','h','wo') // 字符串替换
    SELECT STRCMP('hello','heloo') // 比较两个字符串 前面大返回1 后面大返回-1 相等返回0
    SELECT LTRIM(' hello') // 去除左边的空格
    SELECT RTRIM('hello ') // 去除右边的空格

    注:数据库函数很多,这里只举例了其中的日期和字符串处理的一部分函数,
    还有诸如:字符串长度,字符串切割,math、转大小写,转进制等

    例:SELECT *,CONCAT(ename,job) FROM emp; //拼接字符串

————————————————————————————————————————————————————
————————————————————————————————————————————————————
⑧数据库备份
————————————————————————————————————————————————————

    mysqldump -u root -p 123 mydb1> D:\backup.sql //备份
    mysql -u root -p 123 mydb1< C:\backup.sql //还原

    注意:在CMD下 命令不能加;
————————————————————————————————————————————————————
————————————————————————————————————————————————————
⑨mysql连接
————————————————————————————————————————————————————
    //注册驱动和建立连接
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest","root","123");

    String sql= "select * from address where kongfu='' and address=''";
    Statement preState = conn.Statement(sql);

    ResultSet rs = preState.executeQuery();

    //int rows = preState.executeUpdate();

    while(rs.next()){
      String kongfu = rs.getString("kongfu");
      String address = rs.getString("address");
      System.out.println(kongfu + address);
     }

猜你喜欢

转载自www.cnblogs.com/lihaozong2013/p/10631045.html