JSON数据的操作

CREATE TABLE IF NOT EXISTS table_json (id BIGINT auto_increment,json JSON,PRIMARY KEY(id));

ALTER TABLE table_json add COLUMN name VARCHAR(128)  GENERATED ALWAYS AS (JSON_EXTRACT(json, "$.name")) virtual;
ALTER TABLE table_json add COLUMN name VARCHAR(128)  GENERATED ALWAYS AS (JSON_EXTRACT(json, "$.name")) stored;
ALTER TABLE table_json ADD FULLTEXT INDEX idx_fulltext_name(name_store)
ALTER TABLE table_json ADD INDEX name(name); 
ALTER TABLE table_json DROP INDEX name; 
CREATE TABLE IF NOT EXISTS table_json (id BIGINT auto_increment,json JSON,name VARCHAR(128) GENERATED ALWAYS AS (json->"$.name") virtual,PRIMARY KEY(id),INDEX name_index(name));

SELECT JSON_EXTRACT(json, "$.name") from table_json;
SELECT name FROM table_json;

 外键约束

  外键约束更新https://www.cnblogs.com/yzuzhang/p/5174720.html

sql语句

select * from a left join b on a.a=b.a  where b.a is null;#找出a表中有,b表中没有的数据
SELECT * FROM employees LEFT JOIN dept_manager ON employees.emp_no = dept_manager.emp_no WHERE dept_manager.emp_no IS NOT NULL;#找出两个表中共有的数据

按每一周查询sql

SELECT emp_no,
ADDDATE('1970-01-05',INTERVAL FLOOR(DATEDIFF(to_date,'1970-01-05')/7)*7 Day) AS start,
ADDDATE('1970-01-05',INTERVAL FLOOR(DATEDIFF(to_date,'1970-01-05')/7)*7+6 Day) AS end,
COUNT(1) as total FROM salaries GROUP BY start,end;

排名问题(分数一样的排名应该一样)

set @pre_value = NULL;
set @rank_count = 0;
SELECT id , score,CASE
	WHEN @pre_value = score THEN @rank_count
	WHEN @pre_value := score THEN @rank_count := @rank_count + 1
END AS rank;
FROM rank_table
ORDER BY score DESC;

 

触发器

#创建测试表 stu
CREATE table IF NOT EXISTS stu (
id BIGINT AUTO_INCREMENT,
name VARCHAR(50),
course varchar(50),
score int(11),
PRIMARY KEY(id),
INDEX name_key(name)
);

#创建更新的触发器
CREATE TRIGGER trg_upd_score BEFORE UPDATE ON stu FOR EACH ROW
BEGIN
IF NEW.score<0 THEN SET NEW.score = 0;
ELSEIF NEW.score>100 THEN SET NEW.score = 100;
END IF;
END


#创建插入的触发器
CREATE TRIGGER trg_insert_score BEFORE INSERT ON stu FOR EACH ROW
BEGIN
IF NEW.score<0 THEN SET NEW.score = 0;
ELSEIF NEW.score>100 THEN SET NEW.score = 100;
END IF;
END

#删除触发器
DROP TRIGGER  mydb.trg_upd_score;

#插入,修改数据 测试触发器是否生效
INSERT INTO stu (name,course,score) VALUES("刘勇","web","1000");
INSERT INTO stu (name,course,score) VALUES("test","web","-10");
UPDATE stu set score = 2000 WHERE name="刘勇";