zoukankan      html  css  js  c++  java
  • MySQL基础记录

    SELECT DISTINCT * FROM t[,t1] WHERE condition GROUP BY column HAVING conditions ORDER BY column [ASC|DESC] LIMIT N,M;
    AND,OR,LIKE LIMIT M OFFSET N;
    condition AND OR LIKE <>=

    //书写顺序
    select--from--where--group by--having--order by
    //执行顺序
    from--where--group by--having--select--order by

    LIKE _ %
    AND
    OR
    NOT
    BETWEEN ..AND ..
    IN
    IS NULL
    IS NOT NULL


    执行顺序:where >聚合 >having

    mysql -uroot -p123456 -Djwdata -h127.0.0.1 -P3306 --prompt ] --delimiter [
    数据库 主机 端口 提示符 分隔符
    登录后指定提示符:
    prompt 提示符
    D 完整日期
    d 当前数据库
    h 主机名
    u 用户名
    登录后指定分隔符:
    delimiter ]
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
    select version()
    select now()
    select user()
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
    G


    ALTER TABLE t CHANGE [COLUMN] 老列名 新列名 列类型 [FIRST|AFTER 列名]
    ALTER TABLE t ADD [COLUMN] 列定义 [FIRST |AFTER 列名]
    ALTER TABLE t MODIFY [COLUMN] 列定义 [FIRST |AFTER 列名]
    ALTER TABLE t DROP [COLUMN] 列名
    ALTER TABLE t RENAME [TO|AS] 新表名

    不考虑索引---------------------------------------------------------------------------------------
    添加主键约束:
    ALTER TABLE t ADD[CONSTRAINT] PRIMARY KEY (列名,...)
    删除主键约束:
    ALTER TABLE t DROP PRIMARY KEY

    添加唯一约束:
    ALTER TABLE t ADD[CONSTRAINT] UNIQUE (列名,...)
    删除唯一约束(删除索引):
    ALTER TABLE t DROP {INDEX|KEY} index_name

    添加外键约束
    ALTER TABLE t [CONSTRAINT] FOREIGN KEY (列名,…) references 表名(列名)
    删除外键约束:
    ALTER TABLE t DROP FOREIGN KEY 外键名

    添加/删除默认约束:
    ALTER TABLE t ALTER [COLUMN] 列名 {SET DEFAULT literal | DROP DEFAULT}

    修改数据库
    ALTER {DATABASE|SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
    -------------------------------------------------------------------------------------------------
    重命名多表
    RENAME TABLE 老表名 TO 新表名,老表名 TO 新表名,...
    删除多列
    ALTER TABLE t DROP COLUMN column_1,DROP COLUMN column_2,...;
    添加多列
    ALTER TABLE t ADD [COLUMN] 列定义,ADD [COLUMN] 列定义,...;
    删除索引
    DROP INDEX index_name ON table_name
    查看表的索引
    SHOW INDEXES FROM table_name;


    LIMIT 2 OFFSET 3;或者 LIMIT 3,2; 表示偏移量3条,条数2条。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    --mysql
    select * from t1;
    select * from t2;

    --内链接
    select * from t1 , t2 where id=idd;
    select * from t1 join t2 on id=idd;
    select * from t1 inner join t2 on id=idd;
    --全连接
    select * from t1 ,t2 ;
    select * from t1 cross join t2 ;
    --左连接
    select * from t1 left outer join t2 on id=idd;
    select * from t1 left join t2 on id=idd;
    --右连接
    select * from t1 right outer join t2 on id=idd;
    select * from t1 right join t2 on id=idd;
    --自连接
    select * from t1 s,t1 t where s.id =t.id+2;
    select * from t1 s inner join t1 t where s.id =t.id+2;

    --返回两个查询的并集,不包括重复记录
    select * from t1 union select * from t2;
    --返回两个查询的并集,包括重复记录
    select * from t1 union all select * from t2;
    MySQL不支持INTERSECT操作符。MySQL不支持MINUS操作。


    -----------------------------------------------------------------------------------------------------------------------------------------------------------------


    mysql数据类型

    JSON JSON数据类型

    数字类型
    TINYINT 一个很小的整数
    SMALLINT 一个小的整数
    MEDIUMINT 一个中等大小的整数
    INT 一个标准整数
    BIGINT 一个大整数
    DECIMAL 定点数
    FLOAT 单精度浮点数
    DOUBLE 双精度浮点数
    BIT 一个字节字段

    字符类型
    char 固定长度的非二进制(字符)字符串
    varchar 可变长度的非二进制字符串
    BINARY 一个固定长度的二进制字符串
    VARBINARY 一个可变长度的二进制字符串
    TINYBLOB 一个非常小的BLOB(二进制大对象)
    BLOB 一个小的BLOB(二进制大对象)
    MEDIUMBLOB 一个中等大小的BLOB(二进制大对象)
    LONGBLOB 一个大的BLOB(二进制大对象)
    TINYTEXT 一个非常小的非二进制字符串
    TEXT 一个小的非二进制字符串
    MEDIUMTEXT 一个中等大小的非二进制字符串
    LONGTEXT 一个很大的非二进制字符串
    ENUM 枚举; 每个列值可以被分配一个枚举成员
    SET 集合; 每个列值可以分配零个或多个SET成员

    时间类型
    DATE YYYY-MM-DD格式的日期值
    TIME hh:mm:ss格式的时间值
    DATETIME YYYY-MM-DD hh:mm:ss格式的日期和时间值
    TIMESTAMP YYYY-MM-DD hh:mm:ss格式的时间戳记值
    YEAR YYYY或YY格式的年值

    空间类型
    GEOMETRY 任何类型的空间值
    POINT 一个点(一对X-Y坐标)
    LINESTRING 曲线(一个或多个POINT值)
    POLYGON 多边形
    GEOMETRYCOLLECTION GEOMETRY值的集合
    MULTILINESTRING LINESTRING值的集合
    MULTIPOINT POINT值的集合
    MULTIPOLYGON POLYGON值的集合

    ------------------------------------------------------------------------------------------------------------------------------
    INSERT INTO t(字段) VALUES(值);
    INSERT INTO t(字段) VALUES(值),(值),...;
    INSERT INTO t VALUES (值);
    INSERT INTO t VALUES (值),(值),...;
    INSERT INTO t1 SELECT 字段 FROM t2;
    INSERT [IGNORE] INTO t1(字段) values(值);
    INSERT INTO T1 SET 键=值,键=值,...;
    -------------------------
    语句
    insert into t(字段) VALUES(值) ON DUPLICATE KEY UPDATE expr;
    -------------------------

    REPLACE语句
    表有唯一,主键约束:插入数据,如果有约束冲突,则删除表中的冲突的那一行,在执行插入。
    表没唯一,主键约束:就是插入语句。
    三种形式:
    REPLACE INTO t(字段) VALUES(值);

    REPLACE INTO t SET 键=值,键=值,...;

    REPLACE INTO t(字段) SELECT 语句;


    ------------------------------------------------------------------------------------------------------------------------------
    删除
    单表删除
    多表删除

    *DELETE FROM t1 [WHERE expt];
    DELETE t1 FROM t1 [WHERE expt];
    DELETE FROM t1 [WHERE expt] LIMIT row_count;
    *DELETE FROM t1 [WHERE expt] ORDER BY c1, c2, ... LIMIT row_count;
    DELETE t1 FROM t1 LEFT JOIN t2 ON expr [WHERE expr];
    *DELETE t1,t2 FROM t1 INNER JOIN t2 ON expr [WHERE expr];
    ----- ----------
    灵活指定要删除数据的表 灵活指定表连接

    DROP TABLE t;
    TRUNCATE TABLE t;
    ON DELETE CASCADE指定外键时指定,删除主表记录自动删除子表对应的记录
    -------------------------------------------------------------------------------------------------------------------------------
    更新:
    单表更新
    多表更新
    *UPDATE [LOW_PRIORITY] [IGNORE] t1 SET c1=expr1,c2=expr2,... WHERE expr;
    *UPDATE table SET ...[WHERE...]; table 可以是一张表或各种表连接,如内链接,左右连接,全连接
    UPDATE t1,t2 SET t1.c1=value1,t2.c2=value2 [WHERE... ];
    UPDATE T1 [INNER JOIN | LEFT JOIN |RIGHT JOIN] T2 ON T1.C1 = T2. C2 SET T1.C1 = expr,T2.C3 = expr,... WHERE expr;

    --------------------------------------------------------------------------------------------------------------------------------

    SHOW CREATE TABLE t1 [G];
    SHOW COLUMNS FROM t1;
    DESC T1;


    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
    约束:
    主键:非空
    外键:
    父表子表使用相同的存储引擎,为InnoDB
    数据类型,有无符号相同
    唯一:可为空
    默认:
    非空:
    检查:mysql没有检查

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    MYSQL导入导出csv

    SELECT * FROM t 查询语句
    INTO OUTFILE 'D:/jw.csv' 导出到指定地址
    FIELDS ENCLOSED BY '"' 字段用"号括起
    TERMINATED BY ',' 字段间以,号分隔
    ESCAPED BY '"' 字段中使用的转义符为"
    LINES TERMINATED BY ' '; 行以 结束

    经常需要将数据导出到CSV文件中,该文件的名称包含创建文件的时间戳。 为此,您需要使用MySQL准备语句。
    SET @TS = DATE_FORMAT(NOW(),'_%Y%m%d_%H%i%s');
    SET @FOLDER = 'D:/';
    SET @PREFIX = 't';
    SET @EXT = '.csv';
    SET @CMD = CONCAT("SELECT * FROM t INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,
    "' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'",
    " LINES TERMINATED BY ' ';");
    PREPARE statement FROM @CMD;
    EXECUTE statement;

    如果CSV文件包含第一行作为列标题,那么该文件更容易理解,这是非常方便的。

    要添加列标题,需要使用UNION语句如下:

    (SELECT 'id','name','gender') UNION
    (SELECT id,name,gender FROM t
    INTO OUTFILE 'D:/jw.csv'
    FIELDS ENCLOSED BY '"'
    TERMINATED BY ';'
    ESCAPED BY '"'
    LINES TERMINATED BY ' ');

    如果有空值,可以使用如下函数将column替换为value
    IFNULL(column, 'value')

    导入文件操作之前,需要准备以下内容:
    将要导入文件的数据对应的数据库表。
    准备好一个CSV文件,其数据与表的列数和每列中的数据类型相匹配。
    连接到MySQL数据库服务器的帐户具有FILE和INSERT权限。

    LOAD DATA INFILE 'D:/jw.csv'
    INTO TABLE t
    FIELDS TERMINATED BY ',' 字段间以,号分隔
    ENCLOSED BY '"' 字段用"号括起
    LINES TERMINATED BY ' ' 行以 结束
    IGNORE 1 ROWS; 忽略第一行


    --------------------------------------------------------------------------------------------------------------------
    子查询

  • 相关阅读:
    Shell 学习笔记之函数
    Shell 学习笔记之条件语句
    Shell 学习笔记之运算符
    Shell 学习笔记之变量
    [LeetCode] Zuma Game 题解
    [LeetCode] Decode String 题解
    [LeetCode] Pacific Atlantic Water Flow 题解
    TCP的建立和终止 图解
    [LeetCode] 01 Matrix 题解
    java中protect属性用法总结
  • 原文地址:https://www.cnblogs.com/ENU7/p/9278888.html
Copyright © 2011-2022 走看看