又一次对mysql的汇总

闲暇时间 又一次对mysql练习,环境虚拟机安装mysql。

 

SELECT * FROM brand where id =2;

 

UPDATE brand set name = 'xiaomi' , description = 'phone' where id = 2;

 

UPDATE brand set name = CONCAT('华为',6) , description = 'phone' where id = 3;

 

INSERT into brand (name,description) VALUES ('三星','韩国品牌'),('oppo','国产品牌');

 

DESC brand;

 

CREATE table B (id int PRIMARY key AUTO_INCREMENT,name VARCHAR(255)); 

SELECT * from brand;

 

INSERT into B (name,description) VALUES ('XX','XXX'),('YY','YYY');

 

ALTER table a add birthday DATETIME DEFAULT NULL;

 

update a set birthday="2001-2-14 14:20:34" where id = 5;

 

ALTER TABLE a add TIME2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP;

 

select YEAR(time) as time,YEAR(birthday) as birthday,  MONTH(time) ,DAY(time), HOUR(time) , MINUTE(time),    SECOND(time) from a;

 

SELECT NOW();

SELECT DAYOFYEAR(NOW());

SELECT DAYOFMONTH(NOW());

SELECT DAYOFWEEK(NOW());

SELECT WEEKDAY(NOW());

SELECT DAYOFYEAR("2010-2-23 18:20:23");

 

SELECT DATEDIFF(birthday,NOW()) from a; 

SELECT TIMEDIFF(TIME(birthday),TIME(NOW())) from a;

 

#通过拿出来生日的最小的那个,解决多个人同时最小的情况

SELECT * from a ORDER BY birthday DESC  LIMIT 1;

SELECT *  from a WHERE birthday =(SELECT birthday from a ORDER BY birthday DESC  LIMIT 1);

 

SELECT * from a WHERE id  IN(1,2,3) and YEAR(birthday)=1995;

 

SELECT * from a WHERE id  BETWEEN 1 and 5 ;

 

ALTER TABLE a add class_id TINYINT DEFAULT 1;

INSERT INTO a (class_id) VALUES (1);

UPDATE a set class_id = 2 WHERE id =5;

 

SELECT COUNT(description) as DE, COUNT(name) ,class_id from a 

GROUP BY class_id

ORDER BY DE DESC;

 

SELECT NOW();

SELECT TIME(NOW()) > "22:30:26";

SELECT DATE(NOW());

SELECT DATE_ADD(NOW(),INTERVAL 7 YEAR);

SELECT DATE_ADD(NOW(),INTERVAL -7 DAY);

 

SELECT LAST_DAY(NOW());

SELECT DATE_SUB(NOW(),INTERVAL  (DAYOFMONTH(NOW())-1) DAY);

SELECT DATE(DATE_SUB(NOW(),INTERVAL  (DAYOFMONTH(NOW())-1) DAY));

SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 3 MONTH),"%Y-%m-01");

 

#随机排序

SELECT * from a ORDER BY RAND() DESC LIMIT 1;

 

SELECT MAX(birthday) from a;

SELECT MIN(birthday) from a;

SELECT YEAR(MIN((birthday))) from a;

SELECT MAX([DISTINCT] expr)

 

#处理only_full_group_by问题

set sql_mode=(SELECT REPLACE(@@sql_mode,"only_full_group_by",""));

#选出 根据 name 分组后 birthday最大的那行信息 ,返回来的name 与 max不关联,错了

SELECT name, MAX(birthday) as birthday ,time  from a ;

GROUP BY name

HAVING YEAR(max(birthday))>2000;

 

#报错了,where中不能有SUM, COUNT, MAX, AVG等对一组(多条)数据操作的函数

SELECT *  from a 

WHERE max(birthday)>"2020-01-22 15:23:34";

 

SELECT name, max(birthday)  from a;

SELECT * from a

WHERE birthday =(SELECT max(birthday) from a);

 

SELECT *  from a 

WHERE YEAR(max(birthday))>2000 ;

GROUP BY name

ORDER BY class_id;

 

 

SELECT @@sql_mode;

 

#查询事物

SELECT @@tx_isolation;

INSERT INTO a (name,description,birthday,time,class_id) VALUES ('vivvo','guochan','2001-01-23 15:35:23','1990-01-23 12:45:23',2);

 

 

#子查询方式

SELECT name from a

WHERE YEAR(birthday) = (SELECT YEAR(birthday) from a WHERE name = 'pinguo')

AND name != 'pinguo';

 

#自链接方式 使的找与a1表中 同一年的 pinguo的名字 和上面的子查询方式实现的功能一样,但性能好些

SELECT a2.name from a as a1

INNER JOIN a as a2

on YEAR(a1.birthday) = YEAR(a2.birthday)

WHERE a1.name = 'pinguo' 

AND a2.name != 'pinguo';

   

 

BEGIN;

SELECT * from a;

INSERT INTO a (name,description,birthday,time,class_id) VALUES ('lianxiang','guochan','1990-01-23 12:45:23','1990-01-23 12:45:23',2);

COMMIT; 

 

BEGIN;

UPDATE a set name = 'macc' WHERE name = 'mac';

commit;

 

show index from a;

 

BEGIN;

SELECT * from a where id =1 for UPDATE;

commit;

 

 

CREATE table B 

(id int PRIMARY key AUTO_INCREMENT,name VARCHAR(255)); 

 

CREATE TABLE IF NOT EXISTS class (

  id TINYINT PRIMARY KEY AUTO_INCREMENT,

  cname VARCHAR(11) DEFAULT "幼儿园"

);

 

INSERT INTO class (cname) VALUES ('xiaoxue'),('中学');

 

#创建外键

ALTER TABLE a ADD

CONSTRAINT a_class

FOREIGN KEY(class_id)

REFERENCES class(id)

ON DELETE CASCADE;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值