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