修改表名:ALTER TABLE<旧表名> RENAME <新表名>;
添加字段:ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
会在表的最后位置添加字段。
修改字段:ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
数据类型不能为空。
删除字段:ALTER TABLE 表名 DROP 字段名;
添加主键约束:
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);
添加外键约束:
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段) REFERENCES 关联表名 (关联字段);
对于MyISAM存储类型的表可以通过建立逻辑关联的方式保证数据的完整性和一致性,按照这种固定逻辑存取数据不需要在数据库层面进行“硬绑定”。
插入单行数据:INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
表的字段名是可选的,如果省略,则依此插入所有字段
多个表和多个值之间用逗号隔开
值列表和字段名列表数据必须相同,数据类型相符
如果插入的是表中部分数据,字段名列表必须填写
插入多行数据:INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2);
字段顺序必须和表定义中各字段的顺序相同,如果表结构变了,值列表也会变
将查询结果插入到新表:
CREATE TABLE 新表 (SELECT 字段1,字段2,……FORM原表);
无需提前建表
更新数据记录:
UPDATE 表名
SET 字段1=值1,字段2=值2,……
WHERE 条件;
删除数据记录:
DELETE FROM 表名 WHERE 条件;
删除表中所有记录
TRUNCATE TABLE 表名;
删除后将重置自增列,表结构及其字段、约束、索引保持不变,速度比DELETE更快。
查询语句:
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY<分组的字段名>]
[ORDER BY <排序的列名>[ASC 或DESC]]
[LIMIT [位置偏移量,]行数]
字段名列表是要查询的字段名,用逗号隔开,若要查询所有用 * 表示
FROM表示数据来源,可以有多个
WHERE为可选项,指定条件
GROUP BY 表示查询结果按指定字段分组
HAVING用于筛选组
ORDER BY指定按升序(ASC)或降序(DESC)排序
LIMIT指定从第几行开始显示,0表示为第一个,行数指定显示条数
分页(LIMIT):
SELECT * FROM 表名 LIMIT 第几行,显示几行
聚合函数:
函数名 |
作用 |
AVG() |
返回平均值 |
COUNT() |
返回行数 |
MAX() |
返回最大值 |
MIN() |
返回最小值 |
SUM() |
返回和 |
字符串函数:
函数名 |
作用 |
举例 |
CONCAT(str1,str2,……) |
连接字符串str1,str2为一个完整字符串 |
SELECT CONCAT(‘M’,‘y‘) 返回:My |
INSERT(str,pos,len,newstr) |
将字符串从pos开始长度为len的字符串替换为newstr |
SELECT INSERT(‘这是猪’,2,3,’不是马’) 返回:这不是马 |
LOWER(str) |
将str中所有字母变为小写 |
|
UPPER(str) |
将str中所有字符变为大写 |
|
SUBSTRING(str,num,len) |
返回str第num个位置,长度为len的字符串 |
SELECT SUBSTRING(‘javamysqloracle’5,5) 返回:mysql |
时间函数:
函数名 |
作用 |
CURDATE() |
获取当前日期 |
CURTIME() |
获取当前时间 |
NOW() |
获取当前日期和时间 |
WEEK(date) |
返回日期date为一年中的第几周 |
YEAR(date) |
返回日期date的年份 |
HOUR(time) |
返回时间time的小时值 |
DATEDIFF(date1,date2) |
返回日期参数date1和date2之间相隔的天数 |
ADDDATE(date,n) |
计算日期参数date加上n天后的日期 |
MINUTE(time) |
返回时间time的分钟值 |
BETWEEN 40 AND 50; >=40and<=50;
子查询:
SELECT 列 FROM
表1 WHERE 字段1 比较运算符 (子查询);
命名别名:
使用AS,符号ANSI标准
SELECT 字段列表 FROM 表名 AS 表的别名;
使用空格,简便的方法
SELECT 字段列表 FROM 表名 表的别名;
将 “=” 改为“IN”可以解决子查询返回值不唯一的问题
采用NOT IN 可以查询与IN相反的结果
子查询作用范围更广,所有表连接都可以使用子查询替换,反之不可以