您现在的位置是:首页 > 正文

数据库的基本语句(mysql举例)

2024-02-01 04:38:26阅读 4

一、基础的显示、建立、删除命令(对数据库和表)

1.显示数据库列表 

show databases;

2.使用此数据库

use mysql;

3.显示库中的数据表

show tables;

4.显示数据表的结构

DESC 表名;-- describe表名

5.建库

CREATE DATABASE [IF NOT EXISTS] 数据库名;

6.建表:

use库名create table表名(
字段名 数据类型(长度) 属性,
字段名 数据类型(长度) 属性,
...);

7.删库和删表:

drop database 库名drop table表名;
DROP TABLE [ IF EXISTS ] 表名;
-- IF EXISTS 为可选,判断是否存在该数据表,
-- 如果删除不存在的数据表会抛出错误,
-- 加入IF EXISTS后,表不存在不报错

8.将表中记录清空

delete from 表名;

9.显示表中的记录

select *from 表名;

二、数据库注释语句

MySQL支持三种注释方式:

1.从#字符到行尾。

2.从-- 序列到行尾。注意--(双破折号)注释,要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。

3.从/*序列到后面的*/序列。多行注释。

三、约束

1.主键约束

定义:

主键是用来唯一标识表中记录的,一个或组合的多个字

要求:

1.一个表最多一个主键,主键不能为空,不能重复

2.表中可以没有主键,但是通常情况下建议为表设置主键。

用法:

1.创建表时添加约束

字段定义时加上关键字PRIMARY KEY

CREATE TABLE xs (#学生表
xs_nolNT(6)NOT NULL PRIMARY KEY,xs_name VARCHAR(12),
xs_sex
CHAR(2),
xs_ageTINYINT(3),xs_dateDATE
)CHARSET=UTF8;

2.如何设置主键为自增字段?

指新记录插入表中时自增字段会自动创建值

默认初始值是1,每次插入记录增加1.

方法:

创建表时设置自增

步骤1.列定义时使用AUTO_INCREMENT

CREATE TABLE xs ( #学生表
xs_no INT(6) PRIMARY KEY AUTO_INCREMENT,
xs_name VARCHAR(12),
xs_sex CHAR(2),
xs_age TINYINT(3) ,
xs_idnum VARCHAR(11)
) CHARSET=UTF8;

步骤2.设置自增起始值(默认1)

ALTER TABLE <表名> AUTO_INCREMENT=开始数字
#例如:
ALTER TABLE xs AUTO_INCREMENT=100 #从100开始自增

修改表时设置自增

ALTER TABLE <表名> MODIFY 字段类型 [其他约束] AUTO_INCREMENT;
ALTER TABLE xs MODIFY xs_no INT(6) PRIMARY KEY AUTO_INCREMENT 
#xs_no列是主键列

2.外键约束

定义:

是表中唯一标识另一个或同一个表记录的,一个或组合的多个字段

外键用来强制引用完整性

“从表”中对应于“主表”的列,在从表中称为外键或者引用键

用法:

新建表时加外键:

CONSTRAINT 外键名 
FOREIGN KEY(字段名)
REFERENCES 主表名(主键名);
#例:
CONSTRAINT dept1
FOREIGN KEY(deptId) REFERENCES student(id)

 修改时加外键:

ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
#例:
ALTER TABLE tb_emp2
ADD CONSTRAINT fk_dept1
FOREIGN KEY(deptId)
REFERENCES student(id);

删除外键约束的语法格式如下所示:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
#例:
ALTER TABLE tb_emp2
DROP FOREIGN KEY fk_tb_dept1;

3.非空(NOT NULL) 约束

定义:

强制字段不接受 NULL 值(强制字段始终包含值)

如果不向字段添加值,就无法插入新记录或者更新记录。

用法:

创建表时添加约束(列级约束)

字段定义时加上关键字NOT NULL表示不可以为空

字段定义时加上NULL表示可以为空

CREATE TABLE xs ( #学生表
xs_no INT(6),
xs_name VARCHAR(12) NOT NULL,
xs_sex CHAR(2),
xs_age TINYINT(3),
xs_idnum VARCHAR(11)
) CHARSET=UTF8;

四、数据库的增删改查基本语句

(一)INSERT语句( 添加语句 )

语法:

INSERT [INTO] 表名 [(列名)] VALUES (值列表);

示例:

INSERT INTO comments 
(cmtId,newsId,cmtContent,cmtDate,cmtIP,cmtAuthor) 
VALUES (1,1,'有深度','2018-12-03','192.168.1.2','张三’);

注意事项:

1: 字段名是可选的,如省略则依次插入所有字段

INSERT INTO comments 
VALUES (1,1,'有深度','2018-12-03','192.168.1.2’); 

2: 插入的数据项,要求符合外键约束

3: 值列表和字段名列表一一对应

4: 具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值

5: 插入的数据项,要求符合主键约束

插入多行数据:

INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);

INSERT INTO comments 
(cmtId,newsId,cmtContent,cmtDate,cmtIP,cmtAuthor) 
VALUES (1,1,'有深度','2018-12-03','192.168.1.2', '张三') ,
(2,1,'有深度','2018-12-03','192.168.1.2','张三’); 

 为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

(二)UPDATE语句( 更新语句 )

语法:

UPDATE 表名 SET 字段1=值1,字段2=值2,…,字段n=值n [WHERE 条件];

示例:

UPDATE comments SET cmtContent= '喜欢邓超', cmtDate='2019-
01-01’ WHERE cmtid=1;

 注意:

1、更新多列数据使用逗号隔开

2、勿忘条件限制,以防有效数据的丢失

(三)DELETE语句( 删除语句 )

语法:

DELETE FROM 表名 [WHERE条件];

示例:

DELETE FROM comments WHERE cmtId=1;

注意:

有主外键关联表,先删外键表数据,再删除主键表数据

(四)SELECT语句(查询语句)

语法:

SELECT 列名 FROM 表名;

示例:

SELECT * FROM comments;-- 查询所有comments表格中数据
SELECT cmtId,cmtDate,cmtAuthor FROM comments;

 经验:

查询全部列使用*

功能示例:

功能 :给数据列取别名

 SELECT cmtId AS 评论编号, cmtAuthor AS 评论者名称 FROM comments;

功能 :给表取别名

SELECT com.newsId,cmtAuthor FROM comments AS com ;

功能 :把经计算或总结的结果用另外一个新名称来代替

SELECT cmtId+1 AS 评论编号 FROM comments ;

功能 :查询值1和值2区间的数据,并且包含值1和值2

SELECT * FROM comments WHERE cmtId BETWEEN 1 AND 10;

五、查询扩展

模糊查询

定义:

模糊查询是使用SQL 通配符替代一个或多个字符的条件查询

通配符:

一类字符,代替一个或多个真正的字符,与LIKE关键字一起使用

 语法:

SELECT * FROM 表名 WHERE 字段 like ‘包含通配符的值’;

示例:

SELECT * FROM comments WHERE cmtAuthor LIKE '%东%’;
-- 如何查询’张’某的新闻评论信息?
SELECT * FROM comments WHERE cmtAuthor LIKE ‘张_’;

DISTINCT去重

去掉SELECT查询返回的记录结果中重复的记录, 相同记录只返回一条:

SELECT DISTINCT 字段名1, 字段名2... FROM 表名

SELECT DISTINCT cmtContent FROM comments

升序降序

 一组数据按照升序或降序排列:

SELECT<字段名列表>FROM<表名>

[WHERE<查询条件>]

[ORDER BY<排序的列名>[ASC或DESC]

DESC表示按倒序排序(即:从大到小排序) ---降序排列

ACS表示按正序排序(即:从小到大排序)---升序排列

SELECT * FROM comments ORDER BY newsId,cmtId DESC;

 默认不写是升序排列

LIMIT子句限制

MySQL查询语句中使用LIMIT子句限制结果集:

SELECT<字段名列表>FROM<表名>

[WHERE<查询条件>]

[ORDERBY<排序的列名>[ASC或DESC]]

[LIMIT[位置偏移量,]行数];

SELECT * FROM comments LIMIT 2,5;
-- 查询从第三行开始接下来五条数据

NULL

特点:

区别空字符串

只能出现在定义允许为NULL的字段

须使用 IS NULL 或 IS NOT NULL 比较操作符去比较

语法:

SELECT * FROM comments WHERE cmtAuthor IS NULL;

聚合函数

定义:

聚合函数是可以对一组值进行计算,并返回单个值的函数 

语法: 

SELECT 聚合函数 FROM 表名; 

示例: 

SELECT COUNT(*) AS 总数 FROM comments;

分组查询

定义:

是按照指定的字段分类汇总结果的查询方式

语法:

SELECT<字段名列表>FROM<表名>

[WHERE<查询条件>]

[GROUP BY<分组的字段名>

[ORDER BY<排序的列名>[ASC或DESC]]

[LIMIT[位置偏移量,]行数];

示例:

SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId;

 注意:

SELECT列表中只能包含: 1、被分组的列 2、为每个分组返回一个值的表达式,如聚合函数

HAVING关键字

功能:

分组后条件筛选

语法:

SELECT<字段名列表>FROM<表名>[WHERE<查询条件>]
[GROUP BY<分组的字段名>]HAVING条件
[ORDERBY<排序的列名>[ASC或DESC]][LIMIT[位置偏移量,]行数];

示例:

SELECT newsId 新闻编号,COUNT(*) AS 数量
FROM comments 
GROUP BY newsId
HAVING COUNT(*)<5;

网站文章

  • javascript 数组转二维数组

    问题:有一个51个数的数组,每17个转换成一个数组,最终转换成一个二维数组 例子 var list = [&quot;1101&quot;, &quot;1102&quot;, &quot;1103&...

    2024-02-01 04:38:21
  • PLSQL调试

    PLSQL调试

    以下文章:可以获取的内容,调PLSQL的行号,使用常用的快捷敲代码的方式(部分),初步调试存储过程,dual部分技巧,去重方式 1.调行号 tools(工具)----SQlWindow(窗口类型下)--show gutter line(显示行号) ,即可获得想要的行号 2.使用“字母+空格 ”比如说 sf 敲出“select * from ”,至于想要的什么样的输出...

    2024-02-01 04:38:14
  • 一套优雅的 Spring Boot + vue后台管理系统

    一套优雅的 Spring Boot + vue后台管理系统

    如何写一个优雅的项目?为了让更多人学习前后端分离项目,特意录制了一个基于Spring security + Jwt + Vue的前后端分离后台管理系统VueAdmin,手把手完整教学,另外...

    2024-02-01 04:38:08
  • 伪分布/集群搭建的详细过程

    伪分布/集群搭建的详细过程

    2024-02-01 04:37:42
  • solidity[1]-HelloWorld

    solidity介绍 以太坊拥有多种高级语言,可用于编写智能合约,每种语言都受到另一种广泛使用的语言的启发。最流行的一种叫做Solidity,它基于JavaScript。由于Solidity是迄今为止...

    2024-02-01 04:37:35
  • vite &amp; FormData &amp; mock,跨域&amp;无法上传

    mock模式开启时,我这里是无法请求通过FormData,浏览器New Work上显示padding中,关闭mock后就可以了;

    2024-02-01 04:37:29
  • appnode怎么样_Linux面板AppNode免费开放使用,你还在用宝塔吗? - 立金哥

    AppNode 简介AppNode 是一款用于管理 Linux 服务器的软件,它基于 Web 页面进行可视化操作,不但可以帮助不熟悉 Linux 命令的用户无障碍地管理他们的 Linux 服务器,也可...

    2024-02-01 04:36:59
  • linx 6.0.60 x64 绿色部署mysql5.7.25

    Linx凝思操作系统是一个基于debian6的很老的平台很多新的软件都没有deb包,只能自己手工编译部署下面介绍如何部署mysql5.7.25,并且保证所有文件都在/home/mysql下1.安装Linx操作系统,使用国网定制版(d5000版)2.在终端使用root用户,删除系统自带的mysqldpkg --list | grep mysql | awk -F'[ ]' '{...

    2024-02-01 04:36:53
  • Protobuf 原理大揭秘

    Protobuf 原理大揭秘

    Google推出的一种 结构化数据 的数据存储格式(类似于XML、Json多个版本的源码地址一种变长的编码方式,优点是对于小的数值可以用很少的字节表示,从而进行数据压缩。存储方式是T - V。Zigzag编码是弥补Varint在对负数编码时的不足,从而更好的帮助Protobuf进行数据的压缩。

    2024-02-01 04:36:45
  • 广域网和局域网对比?

    总之,广域网和局域网各有优缺点,在特定的场景中都有其适合的应用范围。而广域网则适用于跨越较大地理范围的不同机构和公司之间进行数据通讯和信息交换等需求约束较少的情况下应用。接入速率:由于其规模大小不同,...

    2024-02-01 04:36:16