菜鸟的修炼之MySQL

作者: 憧憬着的未来 | 来源:发表于2017-07-02 12:16 被阅读13次

    1.1 安装与配置

    百度一下

    1.2 环境变量配置

    添加MYSQL_HOME,值是MySQL的安装目录,比如:D:\MySQL\MySQL Server 5.0
    在Path中添加MYSQL_HOME的引用,值是%MYSQL_HOME%\bin;
    此配置是为了方便使用mysql命令,如果使用可视化开发工具可以忽略。

    2.1 连接与断开服务器

    连接:

    mysql -h host[数据库的url] -u username -p
    enter password: 
    

    断开:

    QUIT或者\q
    

    2.2 数据库的创建和使用

    查询服务器上的数据库:

    show databases;
    

    访问数据库

    use database_name;
    
    2.2.1 创建并选择数据库

    创建

    create database database_name;
    

    选择数据库

    1. 登陆时选择
    mysql -h host[which_db_url] -u username -p which_database
    enter password:
    
    1. 使用use命令
    use database_name;
    
    2.2.2 数据类型
    用途 名称 大小 格式
    整数 INTEGER 4字节
    单精度浮点数 FLOAT 4字节
    双精度浮点数 DOUBLE 8字节
    日期值 DATE 3字节 YYYY-MM-DD
    时间值 TIME 3字节 HH:MM:SS
    年份值 YEAR 1字节 YYYY
    日期和时间混合 DATETIME 8字节 YYYY-MM-DD HH:MM:SS
    时间戳 TIMESTAMP 4字节 YYYYMMDDHHMMSS
    定长字符串 CHAR 0-225字节
    变长字符串 VARCHAR 0-65635字节
    长文本数据 TEXT 0-65635字节
    2.2.3 创建表

    查看数据库中的表

    show tables;
    

    创建表

    create table table_name (column_name column_type column_description);
    

    范例

    CREATE TABLE IF NOT EXISTS user (
        C_OID INT AUTO_INCREMENT,    //AUTO_INCREMENT字段自增;
        C_NAME VARCHAR(128) NOT NULL,
        C_PSWD VARCHAR (64) NOT NULL,
        C_UPDATE DATE,
        PRIMARY KEY (C_OID)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;    //ENGINE=InnoDB表明此表可以进行事务管理;DEFAULT CHARSET设置默认编码
    

    显示表的结构

    describe table_name;
    

    范例

    DESCRIBE user;
    

    删除表

    drop table table_name;
    

    范例

    DROP TABLE user;
    

    2.2.4 操作表中的数据

    2.2.4.1 数据检索
    select column_name
    from table_name
    where conditions_to_satisfy;
    

    范例

    SELECT C_OID, C_NAME, C_PSWD, C_UPDATE
    FROM user
    WHERE 1 = 1
    
    2.2.4.2 数据插入

    1) 使用文本文件(*.txt)插入,文件格式是一条记录一行,空的值使用\N,数据的数据要跟表的字段顺序相同,而且之间用定位符(tab)隔开。

    load data local infile '/path/file' into table table_name
    lines terminated by '\r\n';
    

    2) 使用insert into语句

    insert into table_name(column_name) values(column_value);
    

    范例

    INSERT INTO user(C_NAME, C_PSWD, C_UPDATE) VALUES('张三', '1234', '2017-06-27');
    
    2.2.4.3 数据更新

    1) 通过修改文件更新

    delete from table_name;
    load data local infile '/path/file' into table table_name;
    

    2) 使用update语句

    update table_name set what_to_update = value 
    where conditions_to_satisfy;
    

    范例

    UPDATE user SET C_NAME = '李四' 
    WHERE C_OID = 1
    
    2.2.4.4 数据删除
    delete from table_name 
    where conditions_to_satisfy;
    

    范例

    DELETE FROM USER WHERE C_OID = 2;
    
    2.2.4.5 特殊操作

    1) 去除重复

    select distinct table_name from table_name;
    

    范例

    SELECT DINSTINCT C_NAME FROM user;
    

    2) 排序
    mysql的排序默认是升序(asc)的,如果是降序的话要使用desc

    SELECT * FROM user
    ORDER BY C_OID ASC;    //升序
    ORDER BY C_OID DESC;    //降序
    

    3)NULL值操作
    查询NULL值的时候不能使用普通的算术运算符去判断

    SELECT 0 IS NULL, 0 IS NOT NULL;
    

    当使用order by语句是NULL值会被当做最小值
    4) 模糊匹配
    like

    SELECT * FROM user WHERE C_NAME LIKE '';
    SELECT * FROM user WHERE C_NAME NOT LIKE '';
    

    "_"字符匹配任何单人字符,"%"匹配任意数目字符,查询时默认不区分大小写,比较操作符应使用like或not like。
    regexp

    • '.'匹配任何单个的字符
    • 字符类"[...]"匹配在方括号内的任何字符
    • "*"匹配零个或者多个在它前面的字符
    • bifnary比较式区分大小写
    • '^'匹配以跟在后边的字符开头,'$'匹配以跟在前面的字符结尾
    • '^ $' 匹配 '^' 和'$'之间的字符相同的字符串
    • '{n}'匹配重复n次跟在前面的字符

    找出以b开头的名字

    SELECT * FROM user WHERE C_NAME REGEXP '^b';
    

    找出以fy结尾的名字

    SELECT * FROM user WHERE C_NAME REGEXP 'fy$';
    

    找出包含一个w的名字

    SELECT * FROM user WHERE C_NAME REGEXP 'w';
    

    找出长度为5的名字

    SELECT * FROM user WHERE C_NAME REGEXP '^.....$';
    SELECT * FROM user WHERE C_NAME REGEXP '^.{5}$';
    

    5) 计数
    count();

    SELECT COUNT(*) FROM user;
    

    6) 分组
    group by

    SELECT C_NAME FROM user 
    GROUP BY C_NAME
    

    使用group by时,要注意group by后要求跟上所有的查询字段,并且字段的名字不能为别名。
    7) 批处理
    处理sql脚本

    mysql -h host[数据库的url] -u username -p < batch-file
    enter password: 
    

    2.2.5 常用查询的例子

    2.2.5.1 求最大值或最小值
    select max(column_name), min(column_name) from table_name;
    

    范例 最大/小的物品号

    SELECT MAX(article) AS article FROM shop;
    SELECT MIN(article) AS article FROM shop;
    
    2.2.5.2 求某列的最大值或最小值

    最贵/便宜的编号、销售商和价格

    SELECT article, dealer, price
    FROM shop
    WHERE price = (SELECT MAX(price) FROM shop);
    
    SELECT article, dealer, price
    FROM shop
    ORDER BY price DESC
    LIMIT  1;    //获取第一行,并显示
    
    2.2.5.3 自增长

    auto_increment

    CREATE TABLE shop (
        article INT NOT NULL AUTO_INCREMENT,
        dealer CHAR(8),
        price DOUBLE(16, 2),
        PRIMARY KEY (article)
    );
    INSERT INTO shop VALUE('A', '3.45');
    

    可以通过last_insert_id()函数来查询最新的索引值

    SELECT LAST_INSERT_ID() FROM shop;
    

    设置自增长的值

    ALTER TABLE shop AUTO_INCREMENT = 2;
    

    3 函数和操作符

    3.1 操作符优先级

    同行的优先级相同

    :=
    ||, OR, XOR
    &&, AND
    NOT
    BETWEEN AND, CASE WHEN THEN ELSE
    =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
    |
    &
    <<, >>
    -, +
    *, /, DIV, %, MOD
    ^
    -, ~
    !
    BINGARY, COLLATE
    
    3.2 比较函数和操作符

    比较运算产生的结果为1(true)、0(false)或NULL
    MySQL数值比较规则

    • 若有一个或两个参数为NULL时,除<=>算符,其他的结果都为NULL
    • 若同一个比较运算中的两个参数都是字符串,则按字符串进行比较
    • 若两个参数均为整数,则按照整数比较
    • 默认情况下,字符串比较不区分大小写

    数值比较

    • = 等于
    SELECT 1 = 0;    //0 fales
    
    • <=> 等于
    SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;    //1, 1, 0 true, true, false
    SELECT 1 = 1, NULL = NULL, 1 = NULL;    // 1, NULL, NULL   
    
    • <> != 不等于
    SELECT 1 <> 2;    //1
    SELECT 1 != 2;    //1
    
    • <=、<、>=、> 小于等于、小于、大于等于、大于
    • is boolean_value、not is boolean_value根据布尔值检验一个值
    SELECT 1 IS TRUE, O IS FALSE, NULL IS UNKNOWN;    //1, 1, 1
    
    • is null、is not null检验一个值是否为null
    SELECT 1 IS NULL, NULL IS NULL, 1 IS NOT NULL;    //0, 1, 1
    
    • exper between min and max当exper大于等于min并且小于等于max的时候返回1,否则返回0
    SELECT 2 BETWEEN 1 AND 3;    //1
    
    • coalesce(value, ...) 返回列表中第一个非NULL值,如果没有非NULL值的情况下返回NULL
    SELECT COALESCE(NULL, 1, 2);    //1
    SELECT COALESCE(NULL, NULL, NULL);    //NULL
    
    • greatest(value1, value2,...) 返回列表中的最大值,当包含NULL值时,返回值为NULL
    SELECT GREATEST(2, 0);    //2
    
    • exper in (value1, value2) 判断exper是否在列表中,在返回1,否则返回0
    SELECT 2 IN (1, 3, 4, 5, 2);    //1
    
    • isnull(exper) 判断exper是否为null
    SELECT ISNULL(1/0);    //1
    
    • interval(n, n1, n2, n3, ....) 返回列表中第一个不比n小的值的列表下标,n1的下标为0
    SELECT INTERVAL(23, 1, 34, 56, 2);    //1
    
    • least(value1, value2,...) 返回列表中的最小值,当包含NULL时,返回NULL
    SELECT LEAST(4, 2, 3);    //2
    
    3.3 逻辑操作符
    • not、! 逻辑not,当操作数为0时,返回值为1,当操作数为非零时,返回值为0,当操作数为NULL时,返回NULL
    SELECT NOT 10, NOT 0, NOT NULL, !(1+1), !1+1;    //0, 1, null, 0, 1 
    
    • and、&& 逻辑and,当所有操作数均为非零值、并且不为NULL时,计算所得结果为 1 ,当一个或多个操作数为0 时,所得结果为 0 ,其余情况返回值为 NULL
    SELECT 1&&1, 1&&0, 1&&NULL, 0&&NULL, NULL&&NULL;    //1, 0, null, 0, null
    
    • or、|| 逻辑or,当两个操作数均为非 NULL值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。当有一个操作数为NULL时,如另一个操作数为非零值,则结果为1,否则结果为 NULL 。假如两个操作数均为 NULL,则所得结果为 NULL。
    SELECT 1||1, 1||0, 0||0, 0||NULL, 1||NULL, NULL||NULL;    //1, 1, 0, 0, 1, NULL
    
    • xor 逻辑xor,当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1 ,否则为 0 。
    SELECT 1XOR1, 1XOR0, 1XORNULL, 1XOR1XOR1;    //0, 1, NULL, 1
    
    3.4 控制流程函数
    case value 
    when [compare-value] 
    then result 
    [when [compare-value] then result ...]
    [else result] 
    end
    

    范例:

    CASE 1
    WHEN 1 THEN 'ONE'
    WHEN 2 THEN 'TWO'
    ELSE 'OTHER'
    END;   //ONE
    

    相关文章

      网友评论

      • 李龙杰:99.99%的Mysql都运行在Linux上.So.安装配置补充一下Linux吧.以后甚至可以安装都只写Linux版.

      本文标题:菜鸟的修炼之MySQL

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