# 查看所有的表
SHOWTABLES;
# 创建一个表
CREATETABLEn(id INT, name VARCHAR(10));CREATETABLEm(id INT, name VARCHAR(10),PRIMARYKEY(id),FOREIGNKEY(id)REFERENCESn(id),UNIQUE(name));CREATETABLEm(id INT, name VARCHAR(10));
# 直接将查询结果导入或复制到新创建的表
CREATETABLE n SELECT*FROM m;
# 新创建的表与一个存在的表的数据结构类似
CREATETABLE m LIKE n;
# 创建一个临时表
# 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。
CREATETEMPORARYTABLEl(id INT, name VARCHAR(10));
# 直接将查询结果导入或复制到新创建的临时表
CREATETEMPORARYTABLE tt SELECT*FROM n;
# 删除一个存在表
DROPTABLEIFEXISTS m;
# 更改存在表的名称
ALTERTABLE n RENAMETO m;
# 查看表的结构(以下五条语句效果相同)
DESC n; # 因为简单,所以建议使用
DESCRIBE n;SHOWCOLUMNSIN n;SHOWCOLUMNSFROM n;EXPLAIN n;
# 查看表的创建语句
SHOWCREATETABLE n;
表的结构
# 添加字段
ALTERTABLE n ADD age VARCHAR(2);
# 删除字段
ALTERTABLE n DROP age;
# 更改字段属性和属性
ALTERTABLE n CHANGE age a INT;
# 只更改字段属性
ALTERTABLE n MODIFY age VARCHAR(7);
表的数据
# 增加数据
INSERTINTO n VALUES(1,'tom','23'),(2,'john','22');INSERTINTO n SELECT*FROM n; # 把数据复制一遍重新插入
# 删除数据
DELETEFROM n WHERE id =2;
# 更改数据
UPDATE n SET name ='tom'WHERE id =2;
# 数据查找
SELECT*FROM n WHERE name LIKE'%h%';
# 数据排序(反序)SELECT*FROM n ORDERBY name, id DESC;
# 数据排序(正序)SELECT*FROM n ORDERBY name, id ;
# 去重
SELECT distinct id name FROM n ORDERBY name, id ;
键
# 添加主键
ALTERTABLE n ADDPRIMARYKEY(id);ALTERTABLE n ADDCONSTRAINT pk_n PRIMARYKEY(id); # 主键只有一个,所以定义键名似乎也没有什么用
# 删除主键
ALTERTABLE n DROPPRIMARYKEY;
# 添加外键
ALTERTABLE m ADDFOREIGNKEY(id)REFERENCESn(id); # 自动生成键名m_ibfk_1
ALTERTABLE m ADDCONSTRAINT fk_id FOREIGNKEY(id)REFERENCESn(id); # 使用定义的键名fk_id
# 删除外键
ALTERTABLE m DROPFOREIGNKEY`fk_id`;
# 修改外键
ALTERTABLE m DROPFOREIGNKEY`fk_id`,ADDCONSTRAINT fk_id2 FOREIGNKEY(id)REFERENCESn(id); # 删除之后从新建
# 添加唯一键
ALTERTABLE n ADDUNIQUE(name);ALTERTABLE n ADDUNIQUEu_name(name);ALTERTABLE n ADDUNIQUEINDEXu_name(name);ALTERTABLE n ADDCONSTRAINT u_name UNIQUE(name);CREATEUNIQUEINDEX u_name ONn(name);
# 添加索引
ALTERTABLE n ADDINDEX(age);ALTERTABLE n ADDINDEXi_age(age);CREATEINDEX i_age ONn(age);
# 删除索引或唯一键
DROPINDEX u_name ON n;DROPINDEX i_age ON n;
表联接
# 内联接
SELECT*FROM m INNERJOIN n ON m.id = n.id;
# 左外联接
SELECT*FROM m LEFTJOIN n ON m.id = n.id;
# 右外联接
SELECT*FROM m RIGHTJOIN n ON m.id = n.id;
# 交叉联接
SELECT*FROM m CROSSJOIN n; # 标准写法
SELECT*FROM m, n;
# 类似全连接full join的联接用法
SELECT id,name FROM m
UNIONSELECT id,name FROM n;
# 三个表
select *from bas_goods
//需要几个表实现就加几条
left join pur_goods on bas_goods.id=pur_goods.id
left join pur_provider on bas_goods.id=pur_provider.id
函数
# 聚合函数
SELECTcount(id)AS total FROM n; # 总数
SELECTsum(age)AS all_age FROM n; # 总和
SELECTavg(age)AS all_age FROM n; # 平均值
SELECTmax(age)AS all_age FROM n; # 最大值
SELECTmin(age)AS all_age FROM n; # 最小值
# 数学函数
SELECTabs(-5); # 绝对值
SELECTbin(15),oct(15),hex(15); # 二进制,八进制,十六进制
SELECTpi(); # 圆周率3.141593SELECTceil(5.5); # 大于x的最小整数值6SELECTfloor(5.5); # 小于x的最大整数值5SELECTgreatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9SELECTleast(3,1,4,1,5,9,2,6); # 返回集合中最小的值1SELECTmod(5,3); # 余数2SELECTrand(); # 返回0到1内的随机值,每次不一样
SELECTrand(5); # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
SELECTround(1415.1415); # 四舍五入1415SELECTround(1415.1415,3); # 四舍五入三位数1415.142SELECTround(1415.1415,-1); # 四舍五入整数位数1420SELECTtruncate(1415.1415,3); # 截短为3位小数1415.141SELECTtruncate(1415.1415,-1); # 截短为-1位小数1410SELECTsign(-5); # 符号的值负数-1SELECTsign(5); # 符号的值正数1SELECTsqrt(9); # 平方根3SELECTsqrt(9); # 平方根3
# 字符串函数
SELECTconcat('a','p','p','le'); # 连接字符串-apple
SELECTconcat_ws(',','a','p','p','le'); # 连接用','分割字符串-a,p,p,le
SELECTinsert('chinese',3,2,'IN'); # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese
SELECTleft('chinese',4); # 返回字符串'chinese'左边的4个字符-chin
SELECTright('chinese',3); # 返回字符串'chinese'右边的3个字符-ese
SELECTsubstring('chinese',3); # 返回字符串'chinese'第三个字符之后的子字符串-inese
SELECTsubstring('chinese',-3); # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese
SELECTsubstring('chinese',3,2); # 返回字符串'chinese'第三个字符之后的两个字符-inSELECTtrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese'SELECTltrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese 'SELECTrtrim(' chinese '); # 切割字符串' chinese '两边的空字符-' chinese'SELECTrepeat('boy',3); # 重复字符'boy'三次-'boyboyboy'SELECTreverse('chinese'); # 反向排序-'esenihc'SELECTlength('chinese'); # 返回字符串的长度-7SELECTupper('chINese'),lower('chINese'); # 大写小写 CHINESE chinese
SELECTucase('chINese'),lcase('chINese'); # 大写小写 CHINESE chinese
SELECTposition('i'IN'chinese'); # 返回'i'在'chinese'的第一个位置-3SELECTposition('e'IN'chinese'); # 返回'i'在'chinese'的第一个位置-5SELECTstrcmp('abc','abd'); # 比较字符串,第一个参数小于第二个返回负数--1SELECTstrcmp('abc','abb'); # 比较字符串,第一个参数大于第二个返回正数-1
# 时间函数
SELECT current_date, current_time,now(); # 2018-01-1312:33:432018-01-1312:33:43SELECThour(current_time),minute(current_time),second(current_time); # 123134SELECTyear(current_date),month(current_date),week(current_date); # 201811SELECTquarter(current_date); # 1SELECTmonthname(current_date),dayname(current_date); # January Saturday
SELECTdayofweek(current_date),dayofmonth(current_date),dayofyear(current_date); # 71313
# 控制流函数
SELECTif(3>2,'t','f'),if(3<2,'t','f'); # t f
SELECTifnull(NULL,'t'),ifnull(2,'t'); # t 2SELECTisnull(1),isnull(1/0); # 01 是null返回1,不是null返回0SELECTnullif('a','a'),nullif('a','b'); # null a 参数相同或成立返回null,不同或不成立则返回第一个参数
SELECTCASE2WHEN1THEN'first'WHEN2THEN'second'WHEN3THEN'third'ELSE'other'END; # second
# 系统信息函数
SELECTdatabase(); # 当前数据库名-test
SELECTconnection_id(); # 当前用户id-306SELECTuser(); # 当前用户-root@localhost
SELECTversion(); # 当前mysql版本
SELECTfound_rows(); # 返回上次查询的检索行数