mysql大杂烩

Posted gaoyazhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql大杂烩相关的知识,希望对你有一定的参考价值。

    1. select VERSION();可查询mysql的版本
    2. 创建、查看、选择数据库:
        mysql> CREATE DATABASE gsmomdb;
        mysql> show databases;
        mysql> USE <db_name>
        select databases();     --查看当前数据库
        show databases;         --查看所有数据库名
        select current_user();  --查看当前用户
    3. 创建、查看表:
        mysql> SHOW TABLES;
        mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
    4. 操作表:
        insert into pet values('Fluffy'   , 'Harold' , 'cat'     , 'f'    , '1993-02-04' , NULL       );
        insert into pet values('Claws'    , 'Gwen'   , 'cat'     , 'm'    , '1994-03-17' , NULL       );
        insert into pet values('Buffy'    , 'Harold' , 'dog'     , 'f'    , '1989-05-13' , NULL       );
        insert into pet values('Fang'     , 'Benny'  , 'dog'     , 'm'    , '1990-08-27' , NULL       );
        insert into pet values('Bowser'   , 'Diane'  , 'dog'     , 'm'    , '1979-08-31' , '1995-07-29' );
        insert into pet values('Chirpy'   , 'Gwen'   , 'bird'    , 'f'    , '1998-09-11' , NULL       );
        insert into pet values('Whistler' , 'Gwen'   , 'bird'    , NULL   , '1997-12-09' , NULL       );
        insert into pet values('Slim'     , 'Benny'  , 'snake'   , 'm'    , '1996-04-29' , NULL       );
        insert into pet values('Puffball' , 'Diane'  , 'hamster' , 'f'    , '1999-03-30' , NULL       );
        insert into pet values('娃娃' , '中国人'  , 'hamster' , 'f'    , '1999-03-30' , NULL       );
        select <colume> from <tbl_name> where <(columeX = valueX AND columeY = valueY) OR columeZ = valueZ> ORDER by <columeA> DESC/ASC;
        delete from <tbl_name> where <columeX = value>;
        update <tbl_name> set <columeY = value> WHERE <columeX = value>;
    5. 表运算:
        计算年限: SELECT name, birth, CURDATE(), (YEAR(CURDATE())-YEAR(birth)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age FROM pet ORDER by age [DESC];
    6. NULL: is NULL, is not NULL
        没有: = NULL, 或<>NULL, 这种比较是没有结果的
    7. 模糊匹配选择:
        -------------------------------------------
        LIKE 表示的:
        "_"表示一个字符
        "%"表示任意多个字符
        例:
        SELECT * FROM pet WHERE name LIKE '%w%';
        SELECT * FROM pet WHERE name LIKE '_____';
        -------------------------------------------
        REGEXP 表示的:
        "[a-z]"表示任何字母
        "[0-9]"表示任何数字
        "M*"表示任意多个M字符
        "[0-9]"表示任意多个数字
        "."表示任意字符
        ".*"表示任意多个任意字符
        "^N"表示以N开始
        "N$"表示以N结尾
       
        例:
        SELECT * FROM pet WHERE name REGEXP '^b';   -- 以b开头的
        SELECT * FROM pet WHERE name REGEXP 'l$';   -- 以l结尾的
        SELECT * FROM pet WHERE name REGEXP 'w';    -- 包含w的
   
    8. 选择行数:
        select count(*) from pet;
        SELECT COUNT(*) FROM pet GROUP BY owner; -- owner相同的选项数
        SELECT owner, COUNT(*) FROM pet GROUP BY owner; -- owner相同的选项数(同时显示owner)
    9. 重定向:
        shell: mysql < batch-file > sql.out                     -- 批处理及执行结果
        shell: mysql -e "select * from pet" gsmomdb > sql.out   -- 个别执行结果,直接完成
        mysql: select * into '/gsmom/sql.out' from pet;
    11. 常用查询例子:
        1) 使用用户变量临时保存: select @min_date:=MIN(date), @max_date:=MAX(date) from event; select @min_date;
        2) 合并条件: select owner, species from pet where owner = 'Harold' UNION select owner, species from pet where species = 'dog';
               类似: select owner, species from pet where owner = 'Harold' OR species = 'dog';
        3) 自动id
       
        4) 表项为enum:
            建表时,定义了ENUM字段
                CREATE TABLE animals (
                    grp ENUM('fish','mammal','bird') NOT NULL,
                    id MEDIUMINT NOT NULL AUTO_INCREMENT,
                    name CHAR(30) NOT NULL,
                    PRIMARY KEY (grp,id)
                );
            如果插入grp不在enum范围之内:
            insert into animals (grp, name) values ('what', 'pig');
            结果: 1) 有个告警: OK, 1 row affected, 1 warning (0.00 sec);
                  2) 记录中grp不存在select * from animals;
                        +-----+----+------+
                        | grp | id | name |
                        +-----+----+------+
                        |     |  1 | pig  |
                        +-----+----+------+
    12. 查看mysql的用户及权限控制
        select * from mysql.user;
    13. mysql账户控制:
        1) GRANT新增账户:
            代码密码:
                GRANT ALL PRIVILEGES ON *.* TO 'gaoyazhao'@'localhost' IDENTIFIED BY 'Gsmomci0' WITH GRANT OPTION;
                -- 语法句式为: GRANT <权限> ON <DB> TO '<USER>'@'<HOSTNAME>' IDENTIFIED BY '<PASSWD>' WITH GRANT OPTION;
            不带密码:
                GRANT ALL PRIVILEGES ON *.* TO 'gaoyazhao'@'localhost';
                -- 语法句式为: GRANT <权限> ON <DB> TO '<USER>'@'<HOSTNAME>';
               
        2) INSERT修改账户:
            查看user的权限和user表的字段:
                select * from mysql.user;
            根据user表的字段, 修改user表的内容:
            INSERT INTO user VALUES('localhost','gaoyazhao',PASSWORD('Gsmomci0'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
            FLUSH PRIVILEGES;   --刷账户
            可以通过相应的方法修改用户的权限
        3) 设置账户密码:
            出了GRANT、INSERT两种方法外:
            shell> mysqladmin -u user_name -h host_name password "newpwd"
        4) 如何自动登录又使密码安全:
            将密码方在文件中,并设置文件的访问权限(400)
            mysql> UPDATE user SET Password = PASSWORD('bagel') WHERE Host = '%' AND User = 'francis';
            FLUSH PRIVILEGES;
    14. 数据库备份恢复:
        备份: mysqldump --single-transaction gsmomdb > backup_sunday_1_PM.sql
        恢复: mysql gsmomdb < backup_sunday_1_PM.sql
        修复: myisamchk --silent --force --fast --update-state -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M /path/to/datadir/*/*.MYI
        note: 在表修复之前进行备份是个好习惯
    15. 数据库数据的位置:
        cnf文件: /usr/share/mysql
        dat文件: /var/lib/mysql/mysql
   
chapter9--语言结构
    1. 字符串: select 'string';
    2. 数值型:
        SELECT 0x41,CAST(0x41 AS UNSIGNED);    -- 十六进制数值默认以字符形式保存,如果要以数值形式存放,要使用CAST(...AS)
        SELECT 65;                              -- 十进制数值以数值形式存放
    3. SELECT TRUE, FALSE;  -- 常量名
    4. SELECT NULL;         -- NULL
    5. 引用:
       col_name
       tbl_name.col_name
       db_name.tbl_name.col_name
    6. 大小写敏感: 取决于lower_case_tables_name的配置值, 其值为0、1、2时分别代表不同的含义
    7. 用户变量: @var_name
       SET @my_var=0; SELECT '0' into @my_var;
    8. 系统变量:
       SHOW GLOBAL VARIABLES like 'sort_buffer_size';
       SET GLOBAL sort_buffer_size=value;
    9. 注释:
       # comment
       -- comment
       /* comment */
    10. 保留字: 略

chapter11--列类型
    1. int:
        BIT[]
        BOOLEAN
            DECLARE bvalid  boolean DEFAULT false;
        TINYINT
            1字节
        SMALLINT
            2 字节
        MEDIUMINT
            3 字节
        INT
            4 字节
        BIGINT
            8 字节
        INT [UNSIGNED][ZEROFILL], 表示无符号数, 前置补零
    2. DATE:
        DATE        日期 YYYY-MM-DD
        DATETIME    时间 YYYY-MM-DD HH-MM-SS
        TIMESTAMP   最后一个INSERT或UPDATE的时间戳
        例:
            create table tbl_mydate(create_date DATE, action_date TIMESTAMP);
            insert into tbl_mydate (create_date) values('2013-4-6');
            mysql> select * from tbl_mydate;
            +-------------+---------------------+
            | create_date | action_date         |
            +-------------+---------------------+
            | 2013-04-06  | 2013-04-07 11:38:44 |
            +-------------+---------------------+
            1 row in set (0.00 sec)
    3. String: CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET
        CHAR&VARCHAR
            1) CHAR删除了首部和结尾的空格, 而VARCHAR相反
            2) CHAR(num)中可以保存的数据量为num, VARCHAR(num)则是变长的
            3) CHAR(num), VCHAR(num)中num均表示最多可以保存多少字符。但当字符数小于等于num时,CHAR和VCHAR消耗的存储单位不一样
        BINARY&VARBINARY
            1) BINARY&VARBINARY vs CHAR&VARCHAR, 前者保存的是二进制字符串, 后者保存的是字符串
        ENUM
            见前面的例子. 列值只能选定义好的值
        SET-- 集合(去掉重复, 按定义之顺序)
            CREATE TABLE tbl_myset (col SET('a', 'b', 'c', 'd'));
            INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
chapter12--函数和操作符
    1. 操作符:
        :=
        ||, OR, XOR
        &&, AND
        NOT
            例子: SELECT NOT 0; SELECT NOT 1; -- 当操作数为0 时,所得值为 1 ;当操作数为非零值时,所得值为  0 ,而当操作数为NOT NULL时,所得的返回值为 NULL。
        BETWEEN, CASE, WHEN, THEN, ELSE
            例子: SELECT 1 BETWEEN 2 AND 3; SELECT 'b' NOT BETWEEN 'a' AND 'c';
        =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
            例子: SELECT 1 is true; 错误的例子: SELECT 1 is 0; -- is和is not只能用于true和false的,判断值是否相等,要用“=”
                  SELECT 2 IN (0,3,5,'wefwf'); SELECT 2 NOT IN (0,3,5,'wefwf');
        |
        &
        <<, >>
        -, +
        *, /, DIV, %, MOD
        ^
        - (一元减号), ~ (一元比特反转)
        !
        BINARY, COLLATE
        COALESCE(value1, value2, ...) -- 返回第一个非NULL
        GREATEST(value1, value2, ...) -- 返回值最大的一个
        LEAST(value1, value2,...)     -- 返回值最小的一个
        ISNULL(value1) -- 判断值是否为NULL, =NULL的判断通常是错误的, 常用的是ISNULL和IS NULL
        INTERVAL(N,N1,N2,N3,...)     -- 二分查找排序, N1 < N2 < N3..., N < N1返回0, N < N2返回1, N < N3返回2... N为NULL返回-1
    2. 控制流函数
        CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
        IF(expr1,expr2,expr3)   如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
            SELECT IF(1<2, 'yes', 'no');
        IFNULL(expr1,expr2)     假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。
            SELECT IFNULL(NULL, 'mygod');
        NULLIF(expr1,expr2)     如果expr1 = expr2  成立,那么返回值为NULL,否则返回值为 expr1。
    3. 字符串函数
        ASCII(str)      返回值为字符串str 的最左字符的数值。
        BIN(N)          返回值为N的二进制值的字符串表示。例如BIN(3)就是11
        BIT_LENGTH(str) 返回值为二进制的字符串str 长度。
        CHAR(N,... [USING charset])             CHAR()将每个参数N理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串。
        CHAR_LENGTH(str)/CHARACTER_LENGTH(str)  返回值为字符串str 的长度,长度的单位为字符。
        CONCAT(str1,str2,...)                   返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
        CONCAT_WS(separator,str1,str2,...)      CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。   第一个参数是其它参数的分隔符。
        CONV(N,from_base,to_base)               将数字N从from_base进制转为to_base进制, 例如CONV(10,16,10),将10从16进制转为10进制表示
        ELT(N,str1,str2,str3,...)               若N = 1,则返回值为  str1 ,若N = 2,则返回值为 str2 ,以此类推。
        FIND_IN_SET(str,strlist)                假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。SELECT FIND_IN_SET('b','a,b,c,d');返回2
        FORMAT(X,D)                             将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串。
        HEX(N_or_S)                             如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示;如果N_OR_S 是一个字符串,则返回值为一个N_OR_S的十六进制字符串表示
        INSERT(str,pos,len,newstr)              返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。
        INSTR(str,substr)                       返回字符串 str 中子字符串的第一个出现位置。
        LCASE(str)/LOWER(str)                   字符串转为小写
        UPPER(str)                              字符串转为大写
        LEFT(str,len)                           返回从字符串str 开始的len 最左字符。
        LENGTH(str)                             返回值为字符串str 的长度,单位为字节。
        LPAD(str,len,padstr)                    返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。
        LTRIM(str)                              返回字符串 str ,其引导空格字符被删除。
        RTRIM(str)                              返回字符串 str ,结尾空格字符被删去。
        MAKE_SET(bits,str1,str2,...)            返回一个设定值 (一个包含被‘,’号分开的字字符串的字符串) ,由在bits 组中具有相应的比特的字符串组成。str1 对应比特 0, str2 对应比特1,以此类推。str1, str2, ...中的 NULL值不会被添加到结果中。
        MID(str,pos,len)                        MID(str,pos,len) 是 SUBSTRING(str,pos,len)的同义词。
        OCT(N)                                  返回一个 N的八进制值的字符串表示,其中 N 是一个longlong (BIGINT)数。这等同于CONV(N,10,8)。
        OCTET_LENGTH(str)                       OCTET_LENGTH() 是 LENGTH()的同义词。
        POSITION(substr IN str)                 POSITION(substr IN str)是 LOCATE(substr,str)同义词。
        QUOTE(str)                              引证一个字符串,由此产生一个在SQL语句中可用作完全转义数据值的结果。  返回的字符串由单引号标注,每例都带有单引号 (‘'’)、 反斜线符号 (‘\\’)、 ASCII NUL以及前面有反斜线符号的Control-Z 。如果自变量的值为NULL, 则返回不带单引号的单词 “NULL”。
        REPEAT(str,count)                       返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。若str 或 count 为 NULL,则返回 NULL 。
        REPLACE(str,from_str,to_str)            返回字符串str 以及所有被字符串to_str替代的字符串from_str。
        REVERSE(str)                            返回字符串 str ,顺序和字符顺序相反。
        RIGHT(str,len)                          从字符串str 开始,返回最右len 字符。
        LPAD(str,len,padstr)                    返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。
        RPAD(str,len,padstr)                    返回字符串str, 其右边被字符串 padstr填补至len 字符长度。假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。
        LOAD_FILE(file_name)                    读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。
        LOCATE(substr,str) , LOCATE(substr,str,pos) 第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。
        SOUNDEX(str)                            从str返回一个soundex字符串。
        SPACE(N)                                返回一个由N 间隔符号组成的字符串。
       


       

数据库维护设计:
    1) 每日自动备份
    2) 可选择查看全部数据库
    3) 可选择给定年份数据库
    4) 系统启动时先进行修复工作
    5)

以上是关于mysql大杂烩的主要内容,如果未能解决你的问题,请参考以下文章

mysql大杂烩

mysql大杂烩

mysql大杂烩

mySQL 中子表的约束

从结果中排除 mysql 中子查询结果中的内容

Mysql Query Group Concat 限制单个查询中子表的多条记录