mysql高级查询

修改表名

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的区别

  1. 条件删除:DELETE是可以带WHERE的,支持条件删除;而TRUNCATE只能删除整个表。
  2. 事务回滚:由于DELETE是数据操作语言,操作时原数据会被放到 rollback segment中,可以被回滚;而TRUNCATE是数据定义语言,操作时不会进行存储,不能进行回滚。
  3. 清理速度:在数据量比较小的情况下,DELETE和TRUNCATE的清理速度差别不是很大。但是数据量很大的时候就能看出区别。由于第二项中说的,TRUNCATE不需要支持回滚,所以使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项,固然会慢,但是相对来说也较安全。
  4. 高水位重置: 随着不断地进行表记录的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 [位置偏移量, 行数];

常用函数

  1. 聚合函数
    avg() {平均值}
    count() {行数}
    max() {最大值}
    min(){最小值}
    sum(){和}
  2. 字符串函数
    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的子字符串
  3. 日期时间函数
    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) 返回数字加到日期,得到多少天之后的日期
  4. 数学函数
    CEIL() 返回大于或等于数值x的最小整数
    FLOOR() 返回小于或等于数值x的最大整数
    RAND() 随机数,返回0~1间的随机数

IN和NOTIN子查询

当子查询要返回多个行来与外层查询进行比较运算时,可以使用运算符 IN 和 NOT IN。它们会测试某个给定的比较值是否存在于某一组值里。如果外层查询里的行与子查询返回的某一个行相匹配,那么 IN 的结果为真。如果外层查询里的行与子查询返回的所有行都不匹配,那么 NOT IN 的结果为真。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~plus~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值