首页 > 数据库 >SQL 基础知识

SQL 基础知识

时间:2023-03-12 09:11:40浏览次数:31  
标签:Language -- 数据库 基础知识 stu SQL ALTER

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

标签:Language,--,数据库,基础知识,stu,SQL,ALTER
From: https://www.cnblogs.com/xutingyin/p/17207599.html

相关文章

  • docker 部署 mysql
    拉取镜像dockerpullmysql:latest创建目录mkdir-p/home/zonglin/mysql/datamkdir-p/home/zonglin/mysql/logmkdir-p/home/zonglin/mysql/initdb运行容器do......
  • mysql安装及实现读写分离
    数据库安装、主从同步https://blog.csdn.net/Ayhan_huang/article/details/78784486mysql被收购导致收费,所以使用mariadb代替1、安装mariadb#安装yuminstallmariad......
  • mybatis中的xml中拼接sql中参数与字符串的方法
    场景mybatis中接口方法对应的xml文件中的方法中,需要使用模糊搜索,查询以参数开头的记录。错误的sql拼接:<iftest="locationVO!=nullandlocationVO.selected!=null">......
  • Sqlserver中使用ISNULL、CAST、CASE完成对jsTree数据的查询
    场景在上面中使用的查询jsTree数据的语句为:SELECTid,ISNULL(CAST(pidASVARCHAR(50)),CAST('#'ASVARCHAR(50)))parent,icon,text,num,org_class......
  • 为什么说PostgreSQL是最先进的关系型数据库
    公众号:MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握!@目录一、PostgreSQL是什么?二、PostgreSQL的功能和特点三、PostgreSQL对比MySQL有哪些优势?四、PostgreS......
  • SQL—将查询后的列重新命名
    用update函数不得行,会报错。将查询后的列重新命名用update可能没有考虑到普适性的问题,针对性太强。(maybe)题解用的是起别名关键字as(以下是牛客上的题解)selectdevice_id......
  • sql处理重复的列,更好理清分组和分区
    一、分组统计、分区排名1、语法和含义:如果查询结果看得有疑惑,看第二部分-sql处理重复的列,更好理清分组和分区,有建表插入数据的sql语句分组统计:GROUPBY结合统计/......
  • delphi7连接mysql
    Params设置如下:相关控件按如下顺序连接 ......
  • PentestLab-web安全SQL注入-EXP2
    我们打开pentestlab靶机选择“sql  injections”选择“Example2”观察页面发现name是注入点使用工具测试sqlmap参数为pythonsqlmap.py-u"http://192.168.29.148/sqli/......
  • 03-面试必会-Mysql篇
    1.Mysql查询语句的书写顺序Select[distinct]<字段名称>from表1[<join类型>join表2on<join条件>]where<where条件>groupby<字段>having<......