SQL语句
- SQL 语句可以单行或多行书写,以分号结尾
- SQL 语句可以使用空格/缩进来增强语句的可读性
MySQL
数据库的 SQL 语句不区分大小写,关键字建议使用大写- 注释:
- 单行注释:
--
注释内容或#
注释内容(MySQL特有)- 多行注释:
/* 注释内容 */
SQL 分类
当谈到 SQL(Structured Query Language,结构化查询语言)的分类时,主要是根据其功能和用途进行分类。以下是几个常见的 SQL 分类
分类 | 全称 | 说明 |
数据定义语言 (DDL) |
Data Definition Language | 用于创建和管理数据库对象,例如表、视图、索引等。包括 CREATE、ALTER、DROP 等语句。 |
数据操作语言 (DML) |
Data Manipulation Language | 用于对数据库中表的数据进行操作和管理的语言。包括 SELECT、INSERT、UPDATE、DELETE 等语句。 |
数据控制语言 (DCL) |
Data Control Language | 用于控制数据库访问权限和安全性的语言。包括 GRANT、REVOKE 等语句。 |
数据查询语言 (DQL) |
Data Query Language | 用于从数据库中检索数据的语言。最常见的是 SELECT 语句,它被用于根据特定条件从表中查询所需的数据。 |
事务控制语言 (TCL) | Transaction Control Language | 用于控制数据库中事务的提交、回滚和恢复的语言。包括 COMMIT、ROLLBACK、SAVEPOINT 等语句。 |
NoSQL | Not Only SQL | 非关系型数据库的统称,它们不使用传统的 SQL 查询语言进行操作,而是使用其他的数据存储和查询技术,如文档数据库、键值对数据库等。 |
存储过程和函数 | Stored Procedures and Functions | 用于将一系列 SQL 语句封装成可重复使用的代码块,通常用于提高性能和代码复用性。 |
SQL-数据库操作-DDL
显示数据库列表
show databases;
创建数据库
create database demo;
这里创建又重新使用 show databases; 查看了一下数据库,demo 已经被创建了
MYSQL 不确定创建
create database if not exists demo;
当 database 内已经存在了 demo 这个数据库,若使用
create database demo;
继续创建的话,sql内部会抛出Error,使用上面代码,进行sql语句判断,若没有demo再创建,若有就不创建
默认字符集
使用
utf8mb4
字符集对数据进行存储和处理时,能够支持更广泛的字符范围,包括Emoji
表情符号和一些少数民族语言的字符,utf8mb4
字符集使用的是4
字节编码,而标准的utf8
字符集只使用3
字节编码
create database demo default charset utf8mb4;
删除数据库
同
create
使用if not exists
drop database if not exists demo;
使用数据库
use demo;
查看当前数据库
select database();
查看数据库内的所有表
show tables;
刚刚创建的数据库因为里面没有表, 直接查看会返回空的结果集
可以切换到
sys
数据库,使用一下show tables;
查看一下sys
下的表
查看表内容
desc ***;
表的操作 & 创建 & 查询
create table 表名( 参数名 参数类型 comment '注释', 参数名 参数类型 comment '注释', 参数名 参数类型 comment '注释', ...... )
查询指定表的建表语句
show create table 表名;
MySQL 数据类型
数据类型 | 图片 |
数值类型 |
|
字符串类型 |
|
时间类型 |
根据需求建表(定义类型)
create table emp_info( id int comment 'id', employ_work_id varchar(10) comment '员工工号', employ_name varchar(10) comment '员工姓名', employ_gender char(1) comment '员工性别', employ_age tinyint unsigned comment '员工年龄', employ_id_card char(18) comment '员工身份证', employ_entry_date date comment '员工入职时间' ) comment '员工信息表';
表的操作 & 修改 & 删除
表中添加字段
ALTER TABLE 表名 ADD 字段名 类型 [COMMENT] [约束]
修改数据类型
ALTER TABLE <表名> MODIFY <字段名> <新数据类型>(长度);
修改字段名和字段类型
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <类型>(长度) [COMMENT 注释] [约束];
修改
emp_info
表中的employ_work_id
为work_id
,类型为varchar(30)
ALTER TABLE emp_info CHANGE employ_work_id work_id varchar(30) comment 'item work id';
删除某个字段
ALTER TABLE <表名> DROP <字段名>;
修改表名
ALTER TABLE <表名> RENAME TO <新表名>;
删除表
DROP TABLE [IF EXISTS] <表名>;
删除指定表,并重新创建该表(init data)
TRUNCATE TABALE <表名>;
SQL-数据库操作-DML-数据增删改
DML-添加数据
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
DML-添加数据-给全部字段
INSERT INTO <表名> VALUES (值1, 值2, ...);
DML-添加数据-批量添加数据
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...); INSERT INTO <表名> VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
TIP:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的.
- 字符串和日期型数据应该包含在引号中.
- 插入的数据大小,应该在字段的规定范围内.
不是 NAVICAT 用不起 而是 HeiDiSQL更有性价比, 懒得搞破解 != =
DML-修改数据
UPDATE <表名> SET <param1 = value1>, <param2 = value2>,... [WHERE 条件]
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据
修改 id 为 2 的数据,将 employ_name 改为 张三
update emp_info set employ_name = '张三' where id = 2;
修改 id 为 1 的数据,将 employ_name 改为 ‘张三的表弟’
,employ_gender 改为 ‘男’
update emp_info set employ_name = '张三的表弟', employ_gender = '女' where id = 1;
将所有员工入职日期改为 ‘2002-02-18’
update emp_info set employ_entry_date = '2002-02-18';
效果图
DML-删除数据
DELETE FROM <表名> [WHERE 条件];
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
DELETE 语句不能删除某一个字段的值(可以使用UPDATE)
删除 employ_gender
为 男 的员工
delete from emp_info where employ_gender = '男';
删除所有员工
delete from emp_info;
效果图
SQL-数据库操作-DQL-查询
NULL