• MySql 学习笔记


    一、SQL语句概述

    1、概念

    SQL(Structured Query Language)结构化查询语言。是数据库使用的标准语言。

    2、分类

    数据定义语言(DDL)CREATE,ALTER,DROP等命令

    数据操作语言(DML)INSERT,DELETE,UPDATE等命令

    数据查询语言(DQL)SELECT等命令

    数据控制语言(DCL)GRANT,REVOKE等命令

    二、DDL(数据定义语言)

    1、数据库

    (1)显示所有数据库

    SHOW DATABASES;

    (2)切换数据

    USE `数据名称`;

    (3)创建数据库

    CREATEDATABASE [IF NOT EXISTS] `数据名称` [CHARSET=UTF8];

    (4)删除数据库

    DROPDATABASE [IF EXISTS] `数据名称`;

    (5)修改数据库编码

    ALTERDATABASE `数据名称` CHARACTERSET UTF8;

    2、数据表

    2.1 创建表

    (1)基本语法

    CREATETABLE [IF NOT EXISTS] `表名称` (

    `列名1` 列类型 [属性] [索引] [注释],

    `列名2` 列类型 [属性] [索引] [注释],

    `列名3` 列类型 [属性] [索引] [注释],

    ……

    `列名N` 列类型 [属性] [索引] [注释]

    )[表类型][表字符集][注释];

    (2)列的数据类型

    A、数值

    类型

    取值范围和说明

    存储需求

    TINYINT

    整数 -27~27-1 / 无符号 0~28-1

    1字节

    SMALLINT

    整数 -215~215-1 / 无符号 0~216-1

    2字节

    MEDIUMINT

    整数 -223~223-1 / 无符号 0~224-1

    3字节

    INT[(M)] 宽度

    整数 -231~231-1 / 无符号 0~232-1

    4字节

    BIGINT

    整数 -263~263-1 / 无符号 0~264-1

    8字节

    FLOAT

    浮点数

    4字节

    DOUBLE

    浮点数

    8字节

    DECIMAL(M,D)

    浮点数 M 整数+小数长度 D 小数长度

    M字节

    B、字符串

    类型

    取值范围和说明

    存储需求

    CHAR(M) 长度

    固定长度字符串 0 <= M <= 255

    M字节

    VARCHAR(M) 长度

    可变字符串     0 <= M <= 65535

    M+1或个2字节

    TINYTEXT

    微型字符串

    255字节

    TEXT

    字符串

    65535字节

    C、日期和时间

    类型

    取值范围和说明

    DATE

    日期 yyyy-MM-dd 1000-01-01 – 9999-12-31

    TIME

    时间 hh:mm:ss   -838:59:59 – 838:59:59

    DATETIME

    日期和时间 yyyy-MM-dd hh:mm:ss 1000-01-01 00:00:00 – 9999-12-31 23:59:59

    TIMESTAMP

    时间戳

    YEAR

    年份 1901-2155

    D、NULL(空)

    不能应用于列的类型

    (3)属性

    A.UNSIGNED 无符号的

    B.ZEROFILL 用0补齐数字(默认启用UNSIGNED)

    C. AUTO_INCREMENT自增加一,用于主键(设置主键 PRIMARY KEY),整数类型

    可以设置初始值和步长(默认 1,1)

    创建表:AUTO_INCREMENT= 100;(写在表后面)

    修改表:ALTERTABLE `表名` AUTO_INCREMENT = 200;

    SET@@AUTO_INCREMENT_INCREMENT = 5; -- 影响所有的自动

    自动增长如何归0(DELETE FROM `表名` 自增不能归零,用 TRUNCATE `表名` 归零)

    D. NOTNULL(不允许为空)

    E.NULL(允许为空)

    F.DEFAULT 设置默认值

    (4)索引

    A.分类

    主键(PRIMARYKEY),唯一(UNIQUE),常规(INDEX),全文(FULLTEXT)

    B.创建主键索引

    列名 … PRIMARYKEY,

    #或 PRIMARY KEY(`列名`)

    C.创建唯一索引

    列名 … UNIQUE,

    #或 UNIQUE KEY `索引名`(`列名`)

    D.创建常规索引

    INDEX/KEY`索引名`(`列名1`,`列名2`)

    E.创建全文索引

    FULLTEXT`索引名`(‘列名’)

    注意:只能用于MYISAM 类型的数据表中

    只能用于 CHAR,VARCHAR,TEXT 等字符数据类型中

    适合大型数据集

    MATCH(`列名`) AGAINST(‘关键字’)

    F.修改表创建索引

    ALTERTABLE 表名 ADD 索引类型 `索引名字`(数据列名)

    G.删除索引

    DROPINDEX 索引名 ON 表名;

    ALTERTABLE 表名 DROP INDEX 索引名;

    ALTERTABLE 表名 DROP PRIMARY KEY;

    H.查看索引

    SHOWINDEX/KEYS FROM 表名;

    (5)注释

    列上加注释COMMENT ‘列注释’

    表上加注释COMMENT=‘列注释’

    代码注释 单行 #

    多行 /* */

    (6)表类型

    A. ENGINE=MYISAM或INNODB

    名称

    MYISAM

    INNODB

    事务处理

    不支持

    支持

    数据行锁定

    不支持

    支持

    外键约束

    不支持

    支持

    全文索引

    支持

    不支持

    表空间大小

    较小

    较大

    (7)字符集

    A. 库可以设置

    CHARACTERSET 字符集

    COLLATE校验规则(用于比较规则)

    B. 列可以设置

    CHARACTERSET 字符集

    C. 表可以设置

    [DEFAULT]CHARSET = 字符集;

    D. 设置窗口字符集

    SETNAMES 字符集;

    2.2 查看数据库所有表名称

    SHOWTABLES;

    2.3 查看指定表的创建语句

    SHOWCREATE TABLE `表名称`;

    2.4 查看表结构

    DESC `表名称`;

    2.5 删除表

    DROPTABLE [IF EXISTS] `表名称`;

    2.6 修改表

    (0)前缀

    ALTERTABLE `表名称`

    (1)添加列

    ADD `列名` 列类型 [属性];

    (2)删除列

    前缀 + DROP `列名`;

    (3)修改列名及其内容

    前缀 + CHANGE`旧列名` `新列名` 列类型 [属性];

    (4)修改列内容

    前缀 + MODIFY`列名` 列类型 [属性];

    (5)修改列主外键

    前缀 + ADDCONSTRAINT `主键名` PRIMARY KEY(`列名`);

    前缀 + DROPPRIMARY KEY;

    前缀 + ADDCONSTRAINT `外键名` FOREIGN KEY(`列名`) REFERENCES `表名`(`列名`);

    前缀 + DROPFOREIGN KEY `外键名`;

    (6)修改表名称

    前缀 + RENAMEAS `新表名`;

    三、DML(数据操作语言)

    1、插入

    1.1 插入一行

    INSERTINTO `表名`[(`字段1`,`字段2`,`字段3`,…`字段N`)]

    VALUES(值1, 值2, 值3,…, 值N);

    1.2 插入多行

    INSERTINTO `表名`[(`字段1`,`字段2`,`字段3`,…`字段N`)] VALUES

    (值1, 值2, 值3,…, 值N),

    ……

    (值1, 值2, 值3,…, 值N);

    值 可以是 NULL 或 DEFAULT

    2、更新

    2.1 基本语法

    UPDATE  `表名` SET `字段1` = 值1[,`字段2` = 值2, …] [WHERE 条件];

    如果不指定条件则全部更新!

    2.2 运算符

    运算符

    含义

    范例

    结果或说明

    =

    等于

    5=6

    FALSE

    <> 或 !=

    不等于

    5!=6

    TRUE

    大于

    5>6

    FALSE

    小于

    5<6

    TRUE

    >=

    大于等于

    5>=6

    FALSE

    <=

    小于等于

    5<=6

    TRUE

    BETWEEN … AND …

    在某个范围之间

    列名 BETWEEN 5 AND 10

    如果列的值在5和10之间为TRUE 否者为FALSE

    IS NULL

    是否为空

    列名 IS NULL

    空为真,非空为假

    IS NOT NULL

    是否为不空

    列名 IS NOT NULL

    空为假,非空为真

    LIKE

    模式匹配

    列名 LIKE ‘_张%’

    特殊符号 _(1个字符) %(0个或多个字符)

    ESCAPE ‘\’转义字符

    IN

    等于某个值则为真

    列名 IN (v1, v2, v3, ……)

    AND 或 %%

    并且

    同时为真,才为真

    OR 或 ||

    或者

    一个为真,就是真

    XOR 或 ^

    异或

    一真一假,才为真

    NOT 或 !

    真为假,假为真

    3、删除

    DELETEFROM `表名` [WHERE 条件]

    如果不指定条件则全部删除!

    TRUNCATE`表名`; # 截断表 完全清空重新设置 AUTO_INCREMENT 不会对事务有影响

    4、事务

    4.1 启用事务

    SETAUTOCOMMIT = 0; # 关闭自动提交模式(启动事务)

    SETAUTOCOMMIT = 1; # 开启自动提交模式(默认)

    4.2 事务编写过程

    SETAUTOCOMMIT = 0;

    STRATTRANSACTION;

    ROLLBACK;# 回滚

    COMMIT;# 提交

    四、DQL(数据查询语言)

    1、基本语法

    SELECT[ALL|DISTINCT]

    {*|`表名`.*|`表名`.`列1`,`表名`.`列2` [AS] `别名`, ……}

    FROM `表名1` [[AS] `别名1`]

    [LEFT[OUTTER] | RIGHT [OUTTER] | INNER JOIN `表名2` ON 条件]

    [WHERE条件]

    [GROUPBY `列1`[,`列2`]……]

    [HAVING条件]

    [ORDERBY `列1` ASC | DESC [,`列2` ASC | DESC]……]

    [LIMITOFFSET, ROW_COUNT]

    2、扩展用法

    2.1 查询变量和系统变量

    SELECT@@AUTO_INCREMENT_INCREMENT;

    2.2 查询函数计算结果

    SELECTVERSION();

    2.3 查询出来的列可以参与计算后再显示

    SELECT`classhour` AS `旧课时`, `classhour`+10AS `新课时` FROM `subject`

    3、系统函数

    CONCAT(‘年级’,列名)

    字符串连接

    NOW()

    当前时间用于TIMESTAMP不能用于DATETIME

    COUNT(*),COUNT(`列名`)

    记录总和数

    SUM()

    总和

    AVG()

    平均值

    MAX()

    最大值

    MIN()

    最小值

    4、左外连接、右外连接、内连接

    SELECTt1.id, t1.name FROM t1 LEFT OUTTER JOIN t2 ON t1.id = t2.id;

    SELECTt1.id, t1.name FROM t1 RIGHT OUTTER JOIN t2 ON t1.id = t2.id;

    SELECTt1.id, t1.name FROM t1 INNER JOIN t2 ON t1.id = t2.id;

    5、分组及分组后条件筛选

    GROUPBY 列名 # 按列名分组

    HAVING条件   # 分组后再筛选

    6、排序

    ORDERBY 列名 ASC # 升序

    ORDERBY 列名 DESC # 降序

    7、LIMIT M,N

    返回从第M+1行开始的N条记录

    M=(page-1)*N, N

     

    8、子查询

    在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句

    五、数据库备份和恢复

    1、使用MYSQLDUMP备份数据库

    mysqldump-h 主机名 -u 用户名 -p 数据库名 [table1 table2 table3] >path/filename.sql

    2、使用SOURCE恢复数据库

    2.1 注意在 MySQL 命令行里

    2.2 先选择数据库 USE dbname;

    2.3 恢复数据 SOURCE /path/db_name.sql;

    3、使用MySQL客户端恢复数据库

    mysql-uroot -p dbname < /path/db_name.sql;

    六、JDBC 连接数据库

    1、StudentDao 接口

    importjava.util.List;

    publicinterface StudentDao {

        List<Student> findAll();

        Student findById(String id);

        int insert(Student s);

        int update(Student s);

        int delete(String id);

    }

    2、BaseDao 类

    importjava.sql.Connection;

    importjava.sql.DriverManager;

    importjava.sql.PreparedStatement;

    importjava.sql.ResultSet;

    importjava.sql.SQLException;

    importjava.sql.Statement;

    importjava.sql.Timestamp;

    publicclass BaseDao {

        public static final String DRIVER ="com.mysql.jdbc.Driver";

        public static final String URL ="jdbc:mysql://localhost:3306/t74";

        public static final String USER ="root";

        public static final String PASSWORD ="mysql";

        public Connection getConnection(){

            Connection conn = null;

            try {

                Class.forName(DRIVER);

                conn =DriverManager.getConnection(URL, USER, PASSWORD);

            } catch (ClassNotFoundException e) {

                e.printStackTrace();

            } catch (SQLException e) {

                e.printStackTrace();

            }

            return conn;

        }

        public void closeResource(Connectionconn,Statement stmt,ResultSet rs){

            try {

                if(rs!=null)

                    rs.close();

                if(stmt!=null)

                    stmt.close();

                if(conn!=null)

                    conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        public int executeUpdate(String sql,Object[]objs){

            int row = -1;

            Connection conn = null;

            PreparedStatement ps = null;

            try{

                conn = getConnection();

                ps = conn.prepareStatement(sql);

                if(objs!=null){

                    for(inti=0;i<objs.length;i++){

                        if(objs[i] instanceofjava.util.Date){

    objs[i]= new Timestamp(((java.util.Date)objs[i]).getTime());

                        }

                        ps.setObject(i+1, objs[i]);

                    }

                }

                row = ps.executeUpdate();

            } catch (SQLException e) {

                e.printStackTrace();

            }finally{

                closeResource(conn, ps, null);

            }

            return row;

        }

    }

    3、StudentDaoImpl 类

    importjava.sql.Connection;

    importjava.sql.DriverManager;

    importjava.sql.PreparedStatement;

    importjava.sql.ResultSet;

    importjava.sql.SQLException;

    importjava.sql.Statement;

    importjava.sql.Timestamp;

    importjava.util.ArrayList;

    importjava.util.List;

    publicclass StudentDaoImpl extends BaseDao implements StudentDao {

        public List<Student> findAll() {

            List<Student> list = newArrayList<Student>();

            Connection conn = null;

            Statement stmt = null;

            ResultSet rs = null;

            String sql = "select * fromstudent";

            try{

                conn = getConnection();

                stmt = conn.createStatement();

                rs = stmt.executeQuery(sql);

                while(rs.next()){

                    Student s = new Student();

                    s.setStuId(rs.getString(1));

                    s.setStuName(rs.getString(2));

                    s.setAge(rs.getInt(3));

                    s.setSex(rs.getInt(4));

                    s.setBirthday(rs.getTimestamp(5));

                    list.add(s);

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }finally{

                closeResource(conn, stmt, rs);

            }

            return list;

        }

        public Student findById(String id) {

            Student s = null;

            Connection conn = null;

            PreparedStatement ps = null;

            ResultSet rs = null;

            String sql = "select * from studentwhere stuid = ?";

            try{

                conn = getConnection();

                ps = conn.prepareStatement(sql);

                ps.setString(1, id);

                rs = ps.executeQuery();

                if(rs.next()){

                    s = new Student();

                    s.setStuId(rs.getString(1));

                    s.setStuName(rs.getString(2));

                    s.setAge(rs.getInt(3));

                    s.setSex(rs.getInt(4));

                    s.setBirthday(rs.getTimestamp(5));

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }finally{

                closeResource(conn, ps, rs);

            }

            return s;

        }

        public int insert(Student s) {

            String sql = "insert into studentvalues(?,?,?,?,?)";

            Object[] objs ={s.getStuId(),s.getStuName(),s.getAge(),s.getSex(),s.getBirthday()};

            return super.executeUpdate(sql, objs);

        }

        public int update(Student s) {

            String sql = "update student setstuname=?,age=?,sex=?,birthday=? where stuid=?";

            Object[] objs ={s.getStuName(),s.getAge(),s.getSex(),s.getBirthday(),s.getStuId()};

            return super.executeUpdate(sql, objs);

        }

        public int delete(String id) {

            String sql = "delete from studentwhere stuid = ?";

            Object[] objs = {id};

            return super.executeUpdate(sql, objs);

        }

    }

    -----------------------------------------------------------
    个人网址:http://wxson.cn(待开通)
    -----------------------------------------------------------
  • 相关阅读:
    cocos2dx的MotionStreak.cpp解析(-)
    gcc/g++基本命令简介
    C++编译器与链接器工作原理
    简单介绍 ARC 以及 ARC 实现的原理
    求两个链表表示的数的和
    对象内存结构中的 isa 指针是用来做什么的?
    按层遍历二叉树的节点
    一个 Objective-C 对象的内存结构是怎样的?
    创建一个可以被取消执行的 block
    TCP&UDP
  • 原文地址:https://www.cnblogs.com/ason-wxs/p/13386795.html
Copyright © 2020-2023  润新知