MySQL常用指令
一个CTFer的小窝

MySQL常用指令

W1lsp0
2024-03-24 / 1 评论 / 18 阅读 / 正在检测是否收录...

create,创建数据库

CREATE TABLE USER (
    id INT PRIMARY KEY,
    age INT,
NAME VARCHAR ( 255 ));

schema,等同数据库

-- 翻译过来是在MySQL中,schema实际上等同于database。你可以用关键字SCHEMA代替MySQL SQL语法中的DATABASE,例如用CREATE SCHEMA代替CREATE DATABASE。
CREATE SCHEMA Learn; # 相当于创建一个数据库

drop,删除表

-- 删除一个表,CASCADE:如果有外键一并删除。删除模式:CASCADE(删除模式的同时删除所有的数据库对象) 或者 RESTRICT(该模式有下属对象,例如表视图就拒绝这个删除语句的执行)
DROP TABLE USER CASCADE;

alter ,修改表

ALTER TABLE student ADD S_entrance DATE;
ALTER TABLE student CHANGE COLUMN Sage Sage INT; # 修改表中某个字段数据类型
-- >alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空]; 

index,索引

CREATE UNIQUE INDEX Stusno ON student(Sno);
-- unique唯一索引,cluster聚簇索引
ALTER TABLE student RENAME INDEX stusno TO STSno;
-- 修改索引名字
ALTER TABLE student DROP INDEX stsno;
-- 删除索引

select,查询

SELECT * FROM course; -- 查询所有的
SELECT Cno,Cpno FROM course; -- 查询部分字段
SELECT Sname 姓名,Sage as 年龄 FROM student -- 别名
SELECT DISTINCT Cname FROM course; -- 结果去重

条件查询

SELECT * FROM sc WHERE Grade > 20;
SELECT * FROM sc WHERE Grade BETWEEN 80 AND 90;
SELECT * FROM sc WHERE Grade in (80); -- 查询集合
SELECT * FROM sc WHERE Sno LIKE "2012%1" ; -- 模糊匹配,要查询的字符串本身含有通配符%或者_,这个时候使用\进行转义
SELECT * FROM sc ORDER BY Grade DESC; -- 从大到小排序,去掉desc就是反过来

聚集函数

count(*) -- 统计元祖个数
count sum avg max min,都可以使用distinct去除列里重复的,all可以统计全部、
SELECT COUNT(Cname) FROM course;
SELECT COUNT(DISTINCT Cname) FROM course;
SELECT Sno,COUNT(*) FROM sc GROUP BY Sno;
SELECT Sno FROM sc GROUP BY Sno HAVING Sno="2%"; having 进行分组

连接

SELECT t.*,c.* FROM edu_teacher t,edu_course c WHERE t.id=c.teacher_id; -- 非等值连接,以where为关键词
SELECT c1.version,c2.version FROM edu_course c1,edu_course c2 WHERE c1.version=c2.version; -- 自身与自身连接,为本身的这个表起两个别名      
SELECT student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM student LEFT [OUTER] JOIN sc ON (student.Sno=sc.Sno); # left join(左连接)会返回左表中的所有行,即使在右表中没有匹配的行。如果右表中没有匹配的行,则相应的列会用空值(null)填充。这种连接方式可以显示左表中的所有信息,即使这些信息在右表中没有对应的记录。

多表查询

SELECT c.id ID,c.title 课程名 FROM edu_course c,edu_chapter cp; 

嵌套查询

SELECT * FROM edu_course c WHERE c.title in (SELECT edu_course.title FROM edu_course WHERE edu_course.title LIKE 'j%')  # 后面跟着集合

带有any,all ,exit,no exit的子查询

# any 查询记过中的某个值 all 查询结果中的所有值

联合查询,union

SELECT * FROM student WHERE Sdept='CS' UNION SELECT * FROM student WHERE Sage >19;
# 查询列数必须保持一致
# 列值类型和顺序最好保持一致
# UNION 默认去重 , 可以使用UNION ALL

数据插入 修改 删除

CREATE TABLE test(id int, name VARCHAR(20),age int);
-- 添加
INSERT INTO test (id,name,age)VALUES(0,12,22); -- 标准添加
INSERT INTO test(name,id)VALUES(13,1); -- 部分字段添加
INSERT INTO test VALUE(2,12,12); -- 不指定添加
-- 修改
UPDATE test SET id=12 WHERE id=0
-- 删除
DELETE FROM test WHERE id=12;

视图

虚表,即一组数据的逻辑标识,其本质是一条select语句,结果集被赋予一个名字,即视图名字
-- 创建视图
CREATE VIEW IS_Student AS SELECT Sno,Sname FROM student WHERE Sdept='IS'
-- 查询视图
SELECT  * FROM is_student
-- 删除视图,级联删除    
DROP VIEW IS_Student CASCADE
-- 防止用户对不属于视图范围的操作进行拒绝,对该视图进行操作时,会自动加上 Sdept='IS'的条件
CREATE VIEW IS_Student as SELECT Sno,Sname,Sage FROM student WHERE Sdept='IS' WITH CHECK OPTION
-- 更新视图,因为视图是不存在的,所以对是视图的操作最终反映到基本表的操作

数据库的安全性

-- 加上 with grant option可以吧权限授予其他用户
GRANT 权限 ON 表名[(列名)] TO 用户 WITH GRANT OPTION
REVOKE -- 回收权限
1

评论 (1)

取消
  1. 头像
    W1lsp0 作者
    Windows 10 · Google Chrome

    画图

    回复