资讯详情

MySQL基础篇(DDL,DML,DQL,DCL详细讲解)

在这里插入图片描述

一、常用的开发工具

1. Navicate


Navicat它是一种快速、可靠、价格合适的数据库管理工具,旨在简化数据库管理,降低系统管理成本。其设计满足数据库管理员、开发人员和中小企业的需要。Navicat 它建立在直观的图形用户界面上,使您能够安全、简单地创建、组织、访问和共享信息。

http://www.navicat.com.cn/

pojie方式:https://www.jb51.net/database/710931.html

再手动激活

就可以用了

2. SQLyog

MySQL它可能是世界上最流行的开源数据库引擎,但基于文本的工具和配置文件可能很难管理。SQLyog即使是初学者也能轻松使用完整的图形界面MySQL强大的功能。它有广泛的定义工具和查询,友好的视觉界面,类似 Excel 编辑界面等查询结果的优点。

https://www.webyog.com/product/sqlyog

3. 使用客户端工具

1:创建一个数据库;选择编码为utf-8

2: 创建数据表

3: 数据通常存储在数据表中

二、SQL语句基础

??结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是存储数据、查询、更新和管理关系数据库系统的数据库查询和程序设计语言;也是数据库脚本文件的扩展名称。结构化查询语言是一种先进的非过程化编程语言,允许用户在高层数据结构中工作。它不需要用户指定数据存储方法,也不需要用户了解具体的数据存储方法。因此,具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入和管理的接口。可嵌套结构化查询语言语句,使其具有极大的灵活性和强大的功能。

1.SQL分类

1.1 语言的数据定义(DDL)

??语言的数据定义 (Data Definition Language, DDL) 是SQL语言集中,负责数据结构库对象定义的语言集中CREATE、ALTER与DROP由三种语法组成,最早是由 Codasyl (Conference on Data Systems Languages) 从数据模型开始,现在被纳入 SQL 作为指令中的子集。

1.2 数据操作语言(DML)

??数据操作语言(Data Manipulation Language, DML)是SQL在语言中,负责数据库对象运行数据访问的指令集INSERT、UPDATE、DELETE以插入、更新和删除三个指令为核心。

1.3 数据查询语言(DQL)

??数据查询语言(Data Query Language, DQL)是SQL在语言中,负责数据查询而不修改数据本身的句子是最基本的SQL语句。保留字SELECT是DQL(也是所有SQL)最常用的动词,其他动词,DQL常用的保留字有FROM,WHERE,GROUP BY,HAVING和ORDER BY。这些DQL保留字通常与其他类型相同SQL一起使用语句。

1.4 语言的数据控制(DCL)

??语言的数据控制 (Data Control Language) 在SQL语言是一种可以控制数据访问权的指令,它可以控制特定用户账户对数据库对象的控制,如数据表、查看表、预存程序、用户自定义函数等。由 GRANT 和 REVOKE 由两个指令组成。DCL主要控制用户的访问权限,GRANT对应授权语句REVOKE撤销授权语句。

2.DDL

???语言的数据定义 (Data Definition Language, DDL) ,它主要包括三个关键字:create ,alter , drop(数据库关键字不分大小写 ),主要操作对象 数据库、表、索引、视图等.

2.1 操作数据库

创建数据库

create databases 数据库名称; 

使用此数据库

use 数据库名称; 

删除此数据库

drop database 数据库名称; 

注:执行SQL句子不区分大小写,一个SQL句子末尾要加;

2.2 操作表结构

??表【TABLE】数据存储在数据库中的载体。

2.2.1 语法结构

??然后我们来看下DDL如何操作表?【TABLE】的。

CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 

??创建用户表

CREATE TABLE T_USER( id int(3) , user_name varchar(30)  ) 

2.2.2 添加注释

??为了让别人知道我们定义的字段的含义,我们需要在我们创建的字段中添加相应的注释。

CREATE TABLE T_USER(
id int(3) ,
user_name varchar(30) COMMENT '用户名'
)COMMENT='用户表'

  或者在建表后添加

ALTER TABLE t_user
	MODIFY COLUMN user_name varchar(20) COMMENT 'aaa' ;

2.2.3 删除表

  删除表通过DROP关键字来实现

DROP TABLE T_USER;

2.2.4 修改表

ALTER TABLE T_USER ADD address VARCHAR(2);

ALTER TABLE T_USER MODIFY address VARCHAR(50);

ALTER TABLE T_USER RENAME COLUMN address TO address666;

ALTER TABLE T_USER DROP COLUMN address666;

2.2.5 表结构的约束

ALTER TABLE T_USER 
	CHANGE id id INT NOT NULL COMMENT '主键';

或者在建表的时候指定

# 删除表
DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5) NOT NULL COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(2) COMMENT '年龄' DEFAULT 18
)COMMENT='用户表' ;

DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5)  NOT NULL COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(2) COMMENT '年龄' DEFAULT 18
)COMMENT='用户表' ;

  该字段中不能出现相同的值,null除外

DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5)  UNIQUE COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(2) COMMENT '年龄' DEFAULT 18
)COMMENT='用户表' ;

建表后设置字段的唯一约束条件

ALTER TABLE t_user add CONSTRAINT unique_name UNIQUE(user_name);
alter table t_user add unique (user_name);

  能唯一标识一条记录的字段,不能为空,唯一约束,只能有一个主键。

DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5)  PRIMARY KEY COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(2) COMMENT '年龄' DEFAULT 18
)COMMENT='用户表' ;

联合主键:多个字段组合的信息是不能出现重复的

ALTER TABLE t_user
  ADD PRIMARY KEY (id, user_name);

  外键就是在主表中可以重复出现,但是它的值是另一个表的主键,外键使两个表相关,外键可约束表的数据的更新,外键和主键表联系,数据类型要统一,长度(存储大小)要统一,在更新数据的时候会保持一致性

# 删除表
DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5)  PRIMARY KEY COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(2) COMMENT '年龄' DEFAULT 18,
deptid INT(30) ,
CONSTRAINT FK_DEPT_ID FOREIGN KEY(deptid) REFERENCES T_DEPT(dept_id)
)COMMENT='用户表' ;
ALTER TABLE T_USER ADD
	CONSTRAINT FK_DEPT_ID FOREIGN KEY(deptid) REFERENCES T_DEPT(dept_id)

注意:外键字段的级联关系,如果我们要删除外键对应的主键记录,那么必须要先删除该注解对应的所有的外键记录,否则删除不成功,

实际开发中我们对主键的使用比较少。

  粒度更细的约束。

DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT(5)  PRIMARY KEY COMMENT  '主键',
user_name VARCHAR(20) COMMENT '账号' ,
age INT(3) COMMENT '年龄' ,
CHECK (age > 0 AND age < 40)
)COMMENT='用户表' ;

between and

in not in or

2.2.6 字段类型

MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换

3.DML

  数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。

3.1 INSERT

INSERT into 列名(列名,。。)values(,)

复制表结构和数据

 create table t_student_beifen as select * from t_student

复制表结构

 create table t_student_beifen as select * from t_student where 1 <> 1

把其他表结构中的数据插入到表中:

  insert into t_student(id,stuname) select id,stuname from t_student01 

可以在单行插入的后面添加多个插入的信息列。

# 插入语句后面可以跟多个插入的信息
insert into t_user (user_name,age)values('烤鱼1',22),('烤鱼2',22),('烤鱼3',22);

3.2 UPDATE

语法结构

update 表名 set 字段名=值,字段名=值。。 where 。。。

案例:

创建一张学生表

CREATE TABLE t_student
(
	id int(3) primary key,
    stuname varchar(30) not null,
    sex char(3) ,
    birthday date
)

把学生表中的性别全部改成女

update t_student set sex = '女' ;

把’张三’的性别改成’男’

update t_student set sex = '男' where stuname = '张三';

把出生日期改成当前时间now()

# select now() 
update t_student set birthday = now() 

把性别为女的 所有的出生日期改成2022-01-18

# 直接把一个字符串复制给了一个 date 类型的数据
# str_to_date 把字符串转换为日期类型
update t_student set birthday = str_to_date('2022-01-18','%Y-%m-%d') where sex = '女';

从别的表把值设置到本表中

create table t_student_1 as select * from t_student;
update t_student_1 t1,t_student t2 set t1.stuname = t2.stuname where t1.id = t2.id;

3.3 DELETE

delete删除:

delete from t_student where id = 1;
# 如果不带where 条件 那么表示删除该表中的所有的记录 慎用!!! 删表跑路
delete from t_student ; 
# delete insert update 语句都会走事务处理,也就是我们需要显示的commit和rollback;

truncate删除:

# truncate 直接清空表结构中的所有的数据,效率高,但是不能回滚。
TRUNCATE TABLE t_user_1 # where 1 = 1;

4.DQL

  数据查询语言(Data Query Language, DQL)是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有FROM,WHERE,GROUP BY,HAVING和ORDER BY。这些DQL保留字常与其他类型的SQL语句一起使用。

4.1 单表查询

查询语句的语法规则

SELECT <字段列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序字段>]
[GROUP BY <分组字段>]
# select NOW() 

为查询准备的表结构

CREATE TABLE t_student (
id int(3) primary key auto_increment ,
stuname varchar(30) not null ,
age int(3) ,
sex varchar(3) ,
birthday date ,
address varchar(50),
class_id int(3)
);

CREATE TABLE t_class(
class_id varchar(30) PRIMARY KEY ,
class_name varchar(30) UNIQUE ,
class_desc varchar(50)
);

单表查询不带条件的查询

# 1.查询出所有的学生信息 所有的学生的所有字段的信息
select * from t_student ;

# 2.查询出所有的学生的姓名和性别
select stuname,sex from t_student;

# 3.对查询的表和列设置对应的别名
select stuname as '姓名' ,sex as "性别" from t_student;
 # 别名简写可以省略 as 和 单引号
 select stuname 名称 ,sex 性别 from t_student;

# 表也可以取别名
select t_student.stuname ,t_student.sex from t_student;
select t1.stuname,t1.sex from t_student as t1;
select t1.stuname,t1.sex from t_student  t1;


# 自己增加查询的字段
select stuname,sex,18 常量 from t_student;

# 4.查询出所有的学生信息,并且显示的形式是【张三】18【岁】
select stuname,age,concat('【',stuname,'】',age,'【岁】') from t_student;

单表查询带条件的

# 5.查询出学生表中张三的所有的信息
select * from t_student where stuname = '张三';

# 6.查询出学生表中年龄在18到22之间的学生的所有信息
select * from t_student where age >=18 and age <= 22;
select * from t_student where age BETWEEN 18 and 22 ;

# 7.查询出学生表中编号为1和3的学生信息

select * 
from t_student
where id = 1 or id = 3;

select * from t_student where id in (1,3)

# 8.查询出学生表中地址信息为空的学生信息
# 不行 # 
# select * from t_student where address = '';
# select * from t_student where address = null;
select * from t_student where address is null;
# 不为空的情况
select * from t_student where address is not null;

# 9.查询出所有姓张的学生的所有信息 -- 模糊查询 like
select * from t_student where stuname like '张%' ;
# 如果不加% 其实和=差不多
select * from t_student where stuname like '张三';

select * from t_student where stuname like '%三%';


# 10.查询出学生表中年龄大于20的男同学的所有信息
select * from t_student where age > 20 and sex = '男'

# 11 查询出学生表中年龄大于20或者住址在长沙的同学的所有信息
select * from t_student where age  > 20 or address like '%长沙%'

# 12 查询出所有的学生信息,根据id降序 desc 降序 asc 升序【默认就是升序,也就是 asc可以省略】
select * 
from t_student 
order by id desc;

select * 
from t_student 
order by id asc;

select * 
from t_student 
order by id ;

# 排序我们可以根据多个字段来排列,前面的字段优先排序
# 先根据age降序排列,如果age有相同的信息,那么再根据id升序排序
select * from t_student order by age desc ,id asc; 

select * from t_student order by age desc ,id desc; 

4.2 聚合函数

聚合函数一般用于统计

# 聚合函数 -- 一般用于统计
# 1.统计学员的总数 count 统计某列中非空的数据的条数
select count(*) from t_student ;
select count(id) from t_student ;
select count(address) from t_student;
select count(birthday) from t_student;
## 在实际开发中我们使用 count(1) 来统计,效率会更高
select 1,id from t_student ;
select count(1) from t_student ;

# 2.统计班级中学生最大的年龄
select max(age) from t_student ;

# 3.统计班级中学习最小的年龄
select min(age) from t_student ;

# 4.统计班级中的学员的平均年龄
select avg(age) from t_student ;

# 5.统计班级中学员的年龄总和
select sum(age) from t_student ;

4.3 分组查询

语法规则

SELECT <字段列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序字段>]
[GROUP BY <分组字段>]
[HAVING <分组后的查询条件>]

分组查询通常用于统计,一般和聚合函数配合使用

:分组查询有一个原则,就是 select 后面的所有列中没有使用聚合函数的列,必须出现在group by后面

4.4 常用函数

4.4.1 数字函数

函数 说明
ABS(x) 返回x的绝对值
AVG(expression) 返回一个表达式的平均值,expression 是一个字段
CEIL(x)/CEILING(x) 返回大于或等于 x 的最小整数
FLOOR(x) 返回小于或等于 x 的最大整数
EXP(x) 返回 e 的 x 次方
GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值
LEAST(expr1, expr2, expr3, …) 返回列表中的最小值
LN 返回数字的自然对数
LOG(x) 返回自然对数(以 e 为底的对数)
MAX(expression) 返回字段 expression 中的最大值
MIN(expression) 返回字段 expression 中的最大值
POW(x,y)/POWER(x,y) 返回 x 的 y 次方
RAND() 返回 0 到 1 的随机数
ROUND(x) 返回离 x 最近的整数
SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
SQRT(x) 返回x的平方根
SUM(expression) 返回指定字段的总和
TRUNCATE(x,y) 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)

案例

# 数字函数
# abs函数 取绝对值
select abs(-100) ;

# avg() 取平均值
select avg(age) from t_student;

# CEIL(x)/CEILING(x)
select ceil(2.5) ;
select ceil(avg(age) ) from t_student;
select ceiling(3) ;
select ceil(3) ;

# floor
select floor(2.5) ;

# exp e的3次方
select exp(3) ;

# GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值
select GREATEST(1,4,5,3,9,2) ;

# LEAST(value1,value2,...) 返回列表中的最小值
select LEAST(1,4,5,3,9,2) ;

# LN 自然对数
select ln(2) ;

# LOG(x) 
select log(20) ;


# POW(x,y) 返回x的y次方
select POW(2,3) ;

# RAND() 返回0~1的随机值
select RAND() ;

# ROUND(x) 返回离x最近的整数
select round(5.12) ;

# SIGN(x) 判断x的符号 大于0 等于0 小于0 1 0 -1
select sign(99),sign(0),sign(-199);

# SQRT(x) x的平方根
select SQRT(9);

# TRUNCATE(x,y)
select TRUNCATE(3.15926,3),TRUNCATE(3.15926,2) ;

4.4.2 字符串函数

标签: dcl光伏电抗器三相功率电感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台

函数 说明
ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码
LENGTH/CHAR_LENGTH(s)/CHARACTER_LENGTH(s) 返回字符串 s 的字符数
CONCAT(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串
FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置
FORMAT(x,n) 函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入
INSERT(s1,x,len,s2) 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
LOCATE(s1,s) 从字符串 s 中获取 s1 的开始位置
LCASE(s)/LOWER(s) 将字符串 s 的所有字母变成小写字母
UCASE(s)/UPPER(s) 将字符串 s 的所有字母变成大写字母
TRIM(s) 去掉字符串 s 开始和结尾处的空格
LTRIM(s) 去掉字符串 s 开始处的空格
RTRIM(s) 去掉字符串 s 结尾处的空格
SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTR/SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
POSITION(s1 IN s) 从字符串 s 中获取 s1 的开始位置