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; 忽略第一行
--------------------------------------------------------------------------------------------------------------------
子查询