1、视图中可以进行基本的增删改查,也可以定义新的视图,却无法创建表,因为视图是个虚表,
- 视图所引用的表称为视图的基表
- 注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新
- ①包含分组函数、group by、distinct、having、union、
- ②join
- ③常量视图
- ④where后的子查询用到了from中的表
- ⑤用到了不可更新的视图
2、UPDATE更新语法为:
-
UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
更新多列数据的间隔符号是逗号,不是AND语句
3、修改表:ALTER TABLE 表名 修改选项 。选项集合:
-
{ ADD COLUMN <列名> <类型> -- 增加列
-
| CHANGE [COLUMN] <旧列名> <新列名> <新列类型> -- 修改列名或类型
-
| ALTER [COLUMN] <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
-
| MODIFY [COLUMN] <列名> <类型> -- 修改列类型
-
| DROP [COLUMN] <列名> -- 删除列
-
| RENAME TO <新表名> -- 修改表名
-
| CHARACTER SET <字符集名> -- 修改字符集
-
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
4、REPLACE函数虽然可以批量修改数据,但是REPLACE的正确语法应该是:
REPLACE INTO tab_name(field1, field2...) VALUES (value1, value2)...;
5、insert into 表名(表名.字段名)select 列名 from 数据表名
6、STUFF(原字符, 开始位置, 删除长度, 插入字符)
- 从指定的起点处开始删除指定长度的字符,并在此处插入另一组字符
7、SQL中如何删除触发器
-
DROP TRIGGER 触发器名称
8、连接
-
内连接、外连接(左、右、全)、交叉连接 。
-
内连接(inner join/join):只有两个元素表相匹配的才能在结果集中显示。inner join时只会对非NULL的记录做join,并且两边都有的才会匹配上
-
外连接outer join:可进一步分为左外连接left outer join和右外连接right outer join,(简称左连接left join,右连接 right join)。
-
左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
-
右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
-
全外连接(full join/full outer join):连接的表中不匹配的数据全部会显示出来。mysql不支持
-
交叉连接(cross join): 笛卡尔效应,即不加任何条件,达到 M*N 的结果集。
9、as可以做重命名,不过也可以省略as,空格隔开新名称即可 【mysql,oracle】
-
as = 新名 【sql server】
10、null值不会和任何值相等,也就不能用' <> '来比较是否相等,要想选择是否为null的列,可以用is null 或 is not null
11、区块链本质上是种数据库技术。区块链大致可以分为公有链(Public Blockchain)、私有链(Private Blockchain)以及联盟链(Consortium Blockchain)三大类。
where筛选、group by分组、having与group by连用,用于筛选。
12、count()函数有两种使用方式:
- 使用count(*)对表中的行数进行计数,此种用法不忽略null值;
- 使用count(column)对特定列中具有值的行进行计数,此种用法忽略null值。
13、存储过程在存储的过程中可以同时执行多个sql语句,所以可以提高执行速度。同时执行多个sql语句构成的复杂操作也是基础成立的,存储过程本身就是一种封装手段,减少了代码行的同时就意味着减少了网络流量(Network traffic)
14、 SQL合法标识符 第一个字必须是 字母 、下划线 、@和#开头,不能是数字开头
- SQL 标识符和关键字必须以一个字母(a-z 以及带变音符的字母和非拉丁字母)或下划线(_)开头, 随后的字符可以是字母、下划线、数字(0-9)、 美元符号($)。需要注意的是,根据 SQL 标准,美元符号不允许出现在标识符中, 因此使用美元符号将不易移植。SQL 标准不会定义包含数字或者以下划线开头或结尾的关键字, 因此按照这种格式定义的标识符是安全的,不会和将来标准的扩展特性冲突。
15、SQL Server中每一条select、insert、update、delete语句都是隐形事务的一部分,显性事务用BEGIN TRANSACTION明确指定事务。
16、SQL里的正则表达式查询
选项 | 说明 | 例子 | 匹配值示例 |
---|---|---|---|
^ | 匹配文本的开始字符 | '^b' 匹配以字母 b 开头 的字符串 | book、big、banana、 bike |
[^] | 匹配不在括号中的任何字符 | '[^abc]’ 匹配任何不包 含 a、b 或 c 的字符串 | desk、fox、f8ke |
- MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
[^charlist] 通配符表示 不在字符列中的任一单一字符。
MySQL中选取不以charlist中任一字符开头的语法为:
SELECT * FROM tab_name WHERE col_name REGEXP '^[charlist]';
同理,不以某、或另一某字符开头的语法为:
SELECT * FROM tab_name WHERE col_name REGEXP '^[^charlist]';
SELECT * FROM tab_name WHERE col_name NOT REGEXP '^[charlist]';