SQL 基础知识

SQL概述

什么是SQL?

SQL(Structured Query Language)“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中。例如MySQL、Oracle、SQL Server、PostgressSQL、DB2等。

语法要求

  • SQL 语句可以单行或多行书写,以分号结尾;
  • 可以用空格和缩进来来增强语句的可读性;
  • 关键字不区别大小写,建议使用大写;

SQL分类

DDL(Data Definition Language)

数据定义语言,用来定义数据库对象:库、表、列等; -- create 、drop、alter

DML(Data Manipulation Language)

数据操作语言,用来定义数据库记录(数据);-- insert、delete、update

DQL(Data Query Language)

数据查询语言,用来查询记录(数据) -- select

DCL(Data Control Language)

数据控制语言,用来定义访问权限和安全级别; -- grant ,revoke

DDL

Data Definition Language

数据库定义语言,用来定义数据库对象。基本操作:

1、查看所有数据库 show databases;

2、切换数据库 use mworld;

操作数据库

创建数据库

CREATE DATABASE IF NOT EXISTS mworld;

删除数据库

DROP DATABASE mworld

修改数据库字符集

ALTER DATABASE mworld CHARACTER SET utf8mb4 ; -- 字符集规定了存储数据的编码格式

修改数据库排序规则

ALTER DATABASE mworld COLLATE 'utf8mb4_general_ci';在规定的存储的数据编码格式下的比较规则,如区分不区分大小写等;

数据类型

整型

smalint

tinyint

int

bigint

浮点型

float

double

decimal -- 解决精度丢失问题

字符类型

char

varchar

text

longtext

日期类型

date

datetime

timestamp

结构化类型

JSON - mysql 5.7版本以后支持

操作表

创建表

CREATE TABLE `t_stu`  (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `gender` tinyint(255) NULL DEFAULT NULL COMMENT '性别 1-男, 2-女 ,3-未知',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生表' ROW_FORMAT = Dynamic;

查看表结构

desc t_stu

删除表

dtop table t_stu

修改表

添加列:给 t_stu  表添加 classname 列
ALTER TABLE t_stu  ADD (classname varchar(100));

修改列的数据类型:修改 t_stu 表的 gender 列类型为 CHAR(2)
ALTER TABLE t_stu  MODIFY gender CHAR(2);

修改列名:修改 t_stu 表的 gender 列名为 sex
ALTER TABLE t_stu change gender sex CHAR(2);

删除列:删除 t_stu  表的 classname 列
ALTER TABLE t_stu DROP classname;

修改表名称:修改 t_stu 表名称为 t_student
ALTER TABLE t_stu RENAME TO t_student;

DML

Data Manipulation Language 数据库操作语言

插入数据

方式1
insert into t_stu(name,gender,age) values('susan',1,20) -- 字段和插入的值一一对应,可以不是全表字段
方式2
insert into t_stu values(2,'lisa',1,20); -- 必须全表字段,包含自增id

修改数据

update t_stu set age = 18 where name = 'lisa';

删除数据

条件删除
delete from t_stu where name = 'lisa';
全部删除
delete from t_stu;
truncate table t_stu;  
-- 两者之间的区别:
-- 虽然 TRUNCATE 和 DELETE 都可以删除表的所有记录,但有原理不同。DELETE的效率没有 TRUNCATE 高!
-- TRUNCATE 其实属性 DDL 语句,因为它是先 DROP TABLE,再 CREATE TABLE。
-- RUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的。

DCL

Data Control Language:数据控制语言

创建用户

语法:

CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
CREATE USER ‘user1’@localhost IDENTIFIED BY ‘123’;
CREATE USER ‘user2’@’%’ IDENTIFIED BY ‘123’;

用户授权

语法:

GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
GRANT SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;

撤销授权

语法:

REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

查看用户权限

语法:

SHOW GRANTS FOR ‘用户名’@地址;
SHOW GRANTS FOR user1@localhost;

删除用户

语法:

DROP USER ‘用户名’@地址;
DROP USER ‘user1’@localhost;

修改用户密码(以root身份)

语法 :

use mysql;
alter user '用户名'@localhost identified by '新密码';

DQL

Data Query Language 数据查询语言

语法:

select 列名 ----> 要查询的列名称
from 表名 ----> 要查询的表名称
where 条件 ----> 行条件
group by 分组列 ----> 对结果分组
having 分组条件 ----> 分组后的行条件
order by 排序列 ----> 对结果排序
limit 起始行, 行数 ----> 结果限定

数据库连接

left join

right join

inner join (join)

cross join

posted @ 2023-03-12 08:57  XuTingYin  阅读(129)  评论(0)    收藏  举报