常用 SQL 语句结构
create database 数据库名 charset=utf8; -- 创建数据库
drop database 数据库名; -- 删除数据库
use 数据库名; --切换数据库
select database(); --查看当前选择的数据库
show tables; --查看当前数据库中所有表
create table 表名( -- 创建表
id int auto_increment primary key, -- 创建id字段 类型int 自动增加 主键
foreign key(外键列名) references 副表(主键), -- 创建时创建外键
sname varchar(10) not null); -- 创建sname字段 类型varchar(最多10个字符) 不可为空
ALTER TABLE 表名 add COLUMN 列名 VARCHAR(30) 其他限制条件 -- 增加一列
ALTER TABLE 表名 DROP COLUMN 列名 --删除一列
ALTER TABLE 表名 add|change|drop 列名 类型; -- 修改表
ALTER TABLE 表名 ALTER column 列名 SET DEFAULT '默认值' -- 给某一个列添加默认值
drop TABLE 表名; -- 删除表
drop TABLE if EXISTS 表名; -- 如果存在表删除
desc 表名; --查看表结构
rename TABLE 原表名 to 新表名;--更改表名称
show create TABLE 表名;--查看表的创建语句
ALTER TABLE 表名 ADD CONSTRAINT 规定的名字(随意写) FOREIGN KEY(主表外键) REFERENCES 副表(主键) on delete restrict"默认,抛异常"|cascade"跟随副表删除"|set null"设置为空"|no action"什么都不做";--外键
insert into 表名 values(...) -- 全列插入 默认值可以使用not null 或者 default
insert into 表名(列1,...) values(值1,...) -- 缺省插入
insert into 表名 values(...),(...)... -- 同时插入多条数据
update 表名 set 列1=值1,... where 条件 -- 修改
delete FROM 表名 WHERE 条件 -- 删除
SELECT * FROM 表名 WHERE 条件 -- 标准查询
SELECT * FROM 表名 WHERE 列名 BETWEEN 小范围 and 大范围 -- 在某个范围之中查询
SELECT * FROM 表名 WHERE 列名>范围 -- 范围查询
SELECT * FROM 表名 WHERE 列名 in (数据1,数据2,...) -- 在...中查询 用于非连续范围
SELECT distinct 列名 FROM 表名 -- 去掉重复的列 去重
SELECT 列名 as 别名 FROM 表名 -- 起别名
SELECT * FROM 表名 WHERE 列名 like '%张_' -- 模糊查询 %通配符 _匹配一个
SELECT * FROM 表名 WHERE 列名 is not null -- 查询不为空, is null 为空
SELECT 列名,COUNT(*) FROM 表名 GROUP BY 列名 -- 分组 分组后不可用where应使用having来操作结果
SELECT * FROM 表名 LIMIT <下标开始的位置>,每页多少条 -- 第m页数据,每页n条 (m-1)*n
SELECT * FROM 表名 ORDER BY 列名 DESC, 第二排序列; -- ORDER BY 用来排序 DESC 是倒序 ASC是正序
/*sql语句支持关系运算符 and or not(优先级与python相同),逻辑运算符> < != <> =,成员运算符in,
支持统计学count数量avg平均max最大min最小sum和LENGTH.where操作的是表 having操作的是结果数据*/
select 列名,... from 表名1,表名2 where 表名1.id=表名2.id -- 用where来表示多表联查
select 列名,... from 表名 -- 用JOIN来表示多表联查
INNER JOIN 关联的表名1 on 关联的表名1.关联的列=表名.关联的列 --内连接,OUTER 外连接
LEFT JOIN 关联的表名2 on 关联的表名2.关联的列=关联的表名1.关联的列 --左连接,RIGHT右连接
完整的select语句
select distinct *
from 表名
where 条件
group by 分组列
having 对查询结果的操作
order by 排序(DESC,ASC)
limit 从第几条数据开始(下标),显示几条数据
日期相关
涉及的函数
date_format(date, format) 函数,MySQL日期格式化函数date_format()
unix_timestamp() 函数
str_to_date(str, format) 函数
from_unixtime(unix_timestamp, format) 函数,MySQL时间戳格式化函数from_unixtime
时间转字符串
- select date_format(now(), ‘%Y-%m-%d’);
- #结果:2016-01-05
时间转时间戳
- select unix_timestamp(now());
- #结果:1452001082
字符串转时间
- select str_to_date(‘2016-01-02’, ‘%Y-%m-%d %H’);
- #结果:2016-01-02 00:00:00
字符串转时间戳
- select unix_timestamp(‘2016-01-02’);
- #结果:1451664000
时间戳转时间
- select from_unixtime(1451997924);
- #结果:2016-01-05 20:45:24
时间戳转字符串
- select from_unixtime(1451997924,’%Y-%d’);
- 结果:2016-01-05 20:45:24
附表
MySQL日期格式化(format)取值范围。
值 | 含义 | |
---|---|---|
秒 | %S、%s | 两位数字形式的秒( 00,01, …, 59) |
分 | %I、%i | 两位数字形式的分( 00,01, …, 59) |
小时 | %H | 24小时制,两位数形式小时(00,01, …,23) |
%h | 12小时制,两位数形式小时(00,01, …,12) | |
%k | 24小时制,数形式小时(0,1, …,23) | |
%l | 12小时制,数形式小时(0,1, …,12) | |
%T | 24小时制,时间形式(HH:mm:ss) | |
%r | 12小时制,时间形式(hh:mm:ss AM 或 PM) | |
%p | AM上午或PM下午 | |
周 | %W | 一周中每一天的名称(Sunday,Monday, …,Saturday) |
%a | 一周中每一天名称的缩写(Sun,Mon, …,Sat) | |
%w | 以数字形式标识周(0=Sunday,1=Monday, …,6=Saturday) | |
%U | 数字表示周数,星期天为周中第一天 | |
%u | 数字表示周数,星期一为周中第一天 | |
天 | %d | 两位数字表示月中天数(01,02, …,31) |
%e | 数字表示月中天数(1,2, …,31) | |
%D | 英文后缀表示月中天数(1st,2nd,3rd …) | |
%j | 以三位数字表示年中天数(001,002, …,366) | |
月 | %M | 英文月名(January,February, …,December) |
%b | 英文缩写月名(Jan,Feb, …,Dec) | |
%m | 两位数字表示月份(01,02, …,12) | |
%c | 数字表示月份(1,2, …,12) | |
年 | %Y | 四位数字表示的年份(2015,2016…) |
%y | 两位数字表示的年份(15,16…) | |
文字输出 | %文字 | 直接输出文字内容 |