1. 前言
一般日常数据库工作会经常使用到增删改查,这里我们就来记录下他们的基础语法
2. 简介
SQL是结构化查询语言,可以使我们有能力访问数据库,是一门 ANSI(美国国家标准化组织) 的标准计算机语言,用来访问和操作数据库系统。
市面上有很多数据库如MySQL、SQL Server、Oracle等,这样就会存在着很多不同版本的 SQL 语言, 但是在ANSI标准下,它们会有相同的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等), 除了标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展.
3. SQL语法
SQL 对大小写不敏感。一些数据库系统要求在每条 SQL 语句的末端使用分号,分号是在数据库系统中分隔每条 SQL 语句的标准方法。
互联网上很多功能的实现离不开SQL的参与, 如本文档页面访问接口是用go语言实现的,页面上的访问数量是用数据库mysql存储的,下面是面访问数记录表结构:
CREATE TABLE `counter` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(36) DEFAULT NULL COMMENT '页面名称',
`url` varchar(255) NOT NULL COMMENT '链接',
`num` int(11) DEFAULT '0' COMMENT '访问数',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_url` (`url`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=413 DEFAULT CHARSET=utf8mb4 COMMENT='页面访问数记录';
页面访问记录IP表结构:
CREATE TABLE `counter_ip` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`counter_id` int(11) NOT NULL,
`ip` varchar(20) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_counter_id` (`counter_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7780 DEFAULT CHARSET=utf8mb4 COMMENT='页面访问记录IP表';
4. select
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
SELECT column_name FROM table_name;
SELECT * FROM table_name;
5. select distinct
用于返回唯一不同的值
SELECT DISTINCT a, b FROM table_name;
DISTINCT 必须写在字段最前面,会影响后面所有字段,搜索的字段组合成唯一的
6. where
用于帅选记录
如需在满足一定条件下地从表中获取数据:
SELECT column_name FROM table_name WHERE column_name operator value;
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)如果是数值字段,请不要使用引号。
实列
SELECT url,num FROM counter WHERE num > 100 AND url = '/doc/file/';
7. and & or
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来.
AND 两边条件都要成立
OR 两边有一个成立就可
8. order by
用于对结果集进行排序。默认按照升序(ASC)对记录进行排序,降序可用 DESC 关键字。
如对页面访问记录表进行降序查询
SELECT url, num FROM counter ORDER BY num DESC;
可接受多个排序
SELECT column_name FROM table_name ORDER BY column_name DESC, column_name ASC;
9. insert into
INSERT INTO 语句用于向表中插入新的行。
INSERT INTO 语句可以有两种编写形式。
第一种无需指定要插入数据的列名,只需提供被插入的值即可 (这种VALUES要列出插入行的每一列数据)
INSERT INTO table_name VALUES (value1,value2,value3,...);
第二种需指定列名及被插入的值:
INSERT INTO table_name (column1,column2,...)VALUES (value1,value2,...);
如增加本页面的访问数量记录counter表
insert into counter (name,url) values ('SQL基础','/SQL/SQL基础.html');
10. update
用于更新表中已存在的记录。
UPDATE table_name SET column=value,... WHERE column=value;
如更新记录counter表url
update counter set url = '/doc/file/SQL/SQL基础.html' where id = 1;
11. delete
用于删除表中的行。
DELETE FROM table_name WHERE column=value;
不带where,可删除所有行,表的结构、属性和索引都是完整的
DELETE FROM table_name;
DELETE * FROM table_name;