修改表名
ALTER TABLE<旧表名>RENANE [TO] <新表名>;
添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
删除字段
ALTER TABLE 表名 DROP 字段名;
添加主键和外键
主外键的定义
主关键字: 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。
外关键字: 是用于建立或加强两个表数据之间的链接的一列或多列。
主外键的区别
区别 | 主键 | 外键 |
---|---|---|
定义 | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
作用 | 用来保证数据完整性 | 用来和其他表建立联系用的 |
个数 | 主键只能有一个 | 一个表可以有多个外键 |
添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);
添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
DML语句
插入数据
INSERT INTO 表明(字段类表明 )
VALUES (值);
更新数据
UPDATE 表明 SET 字段1=值1, 字段2=值2
[WHERE 条件];
删除数据
DELETE FROM 表明 [WHERE 条件];
TRUNCATE TABLE 表名;
TRUNCATE和DELETE的区别
- 条件删除:DELETE是可以带WHERE的,支持条件删除;而TRUNCATE只能删除整个表。
- 事务回滚:由于DELETE是数据操作语言,操作时原数据会被放到 rollback segment中,可以被回滚;而TRUNCATE是数据定义语言,操作时不会进行存储,不能进行回滚。
- 清理速度:在数据量比较小的情况下,DELETE和TRUNCATE的清理速度差别不是很大。但是数据量很大的时候就能看出区别。由于第二项中说的,TRUNCATE不需要支持回滚,所以使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项,固然会慢,但是相对来说也较安全。
- 高水位重置: 随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),DELETE操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用DELETE,就算将表中的数据减少了很多,在查询时还是很和DELETE操作前速度一样。而TRUNCATE操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。
DQL语句
SELECT <字段名列表>
FROM <表名或视图>
WHERE <查询条件>
[GROUP BY<分组的字段名>]
[HAVING<条件>]
[ORDER BY <相序的字段名>[ASC或DESC]];
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
LIMIT子句
SELECT <字段名列表>
FROM <表名或视图>
WHERE <查询条件>
[GROUP BY<分组的字段名>]
[ORDER BY <相序的字段名>[ASC或DESC]];
LIMIT [位置偏移量, 行数];
常用函数
- 聚合函数
avg() {平均值}
count() {行数}
max() {最大值}
min(){最小值}
sum(){和} - 字符串函数
CONCAT(s1,s2…,sn)将s1,s2…,sn连接成字符串
INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
LOWER(str) 返回将字符串str中所有字符改变为小写后的结果
UPPER(str) 返回将字符串str中所有字符转变为大写后的结果
SUBSTRING(str,num,len) 返回字符串str的第num个位置开始长度为len的子字符串 - 日期时间函数
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
NOW() 返回当前的日期和时间
YEAR(date) 返回日期date的年份
MONTH(date) 返回date的月份值
WEEK(date) 返回日期date为一年中第几周
HOUR(time) 返回time的小时值
MINUTE(time) 返回time的分钟值
DATEDIFF(NOW(),‘2020-04-01’) 返回两个日期相差的天数
ADDDATE(NOW(),3) 返回数字加到日期,得到多少天之后的日期 - 数学函数
CEIL() 返回大于或等于数值x的最小整数
FLOOR() 返回小于或等于数值x的最大整数
RAND() 随机数,返回0~1间的随机数
IN和NOTIN子查询
当子查询要返回多个行来与外层查询进行比较运算时,可以使用运算符 IN 和 NOT IN。它们会测试某个给定的比较值是否存在于某一组值里。如果外层查询里的行与子查询返回的某一个行相匹配,那么 IN 的结果为真。如果外层查询里的行与子查询返回的所有行都不匹配,那么 NOT IN 的结果为真。