一、SQL基础知识
SQL全称:Structured Query Language,结构化查询语言
1.1 SQL语句及种类
- DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表等对象。主要包括以下指令:
CREATE
创建数据库和表等对象DROP
删除数据库和表等对象ALTER
修改数据库和表等对象的结构
- DML(Data Manipulation Language,数据操作语言)用来查询或者变更表中的记录。主要包括以下指令:
SELECT
查询表中的数据INSERT
向表中插入新数据UPDATE
变更表中的数据DELETE
删除表中的数据
- DCL(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更,也可用来对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。主要包括以下指令:
COMMIT
确认对数据库中的数据进行的变更ROLLBACK
取消对数据库中的数据进行的变更GRANT
赋予用户操作权限REVOKE
取消用户的操作权限
1.2 SQL书写规则
- SQL语句要以分号
;
结尾 - SQL语句不分大小写,但插入到表中的数据是区分大小写的
- SQL语句中常量的书写是固定的,字符串和日期要用单引号
' '
包裹,数字则不需要任何记号标识 - SQL语句中单词之间要用半角空格或换行符进行分隔
1.3 数据库的创建
CREATE DATABASE <数据库名>;
1.4 表的创建
CREATE TABLE <表名>
(<列名1> <数据类型> <约束条件>,
<列名2> <数据类型> <约束条件>,
<列名3> <数据类型> <约束条件>,
...
<该表的约束1>, <该表的约束2>, ... );
命名规则:只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称,并且只能以半角英文字母开头
常用数据类型
数据类型表示数据的种类,常用的主要有:
-
字符串型
- VARCHAR:变长的字符串,需要在声明字段时指定能存储的最大字符数,真实占用的空间取决于存入的字符数,存入的越多占用空间越多。适合保存内容长度不定的字符类型数据。
注意:Oracle中一般使用VARCHAR2 - CHAR:定长字符串,需要在声明字段时指定固定字符数。即使存入的字符数少于该长度,该字段也会占用该固定长度。适合存储长度不变的字符类型数。
- VARCHAR:变长的字符串,需要在声明字段时指定能存储的最大字符数,真实占用的空间取决于存入的字符数,存入的越多占用空间越多。适合保存内容长度不定的字符类型数据。
-
大数据类型
-
BLOB:大二进制类型,可以存入二进制类型的数据,通过这个字段,可以将图片、音频、视频等数据以二进制的形式存入数据库。最大为4GB。
-
TEXT:
大文本,被声明为这种类型的字段,可以保存大量的字符数据,最大为4GB。
注意:TEXT属于MySQL的方言,在其他数据库中为CLOB类型
-
-
数值型
- TINYINT:占用1个字节,相对于java中的Byte
- SMALLINT:占用2个字节,相对于java中的Short
- INT:占用4个字节,相对于java中的Integer
- BIGINT:占用8个字节,相对于java中的Long
- FLOAT:4字节单精度浮点类型,相对于java中的Float
- DOUBLE:8字节双精度浮点类型,相对于java中的Double
-
逻辑型
BIT:位类型,可以存储指定位的值,可以指定位的个数,如果不指定则默认值为1位,即只能保存0或1,相当于java中的Boolean
-
日期型
- DATE:日期(Oracle中Date还包含时分秒)
- TIME:时间
- DATETIME:日期时间
- TIMESTAMP:时间戳
注意:DATETIME和TIMESTAMP的区别?
DATETIME和TIMESTAMP显示的结果是一样的,都是固定的"YYYY-MM-DD HH:MM:SS"的格式。但DATETIME支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。TIMESTAMP的显示范围是’1970-01-01 00:00:00’到2037年,且其实际的存储值为1970年到当前时间的毫秒数。在建表时,列为TIMESTAMP的日期类型可以设置一个默认值,而DATETIME不行。在更新表时,可以设置TIMESTAMP类型的列自动更新时间为当前时间。
约束
在 SQL 中,对表中的字段有如下约束:
- NOT NULL:指示某列不能存储 NULL 值
- UNIQUE: 保证某列的每行必须有唯一的值
- PRIMARY KEY:NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录
- FOREIGN KEY:保证一个表中的数据匹配另一个表中的值的参照完整性
- CHECK:保证列中的值符合指定的条件
- DEFAULT:规定没有给列赋值时的默认值
1.5 表的删除与更新
表的删除:
DROP TABLE <表名>;
注意:删除的表是无法恢复的,误删表的话只能重新建表、重新插入数据。因此在执行DROP TABLE
命令时务必要仔细确认。
表的更新:
-
添加列的操作
ALTER TABLE <表名> ADD COLUMN <列名> <数据类型> <约束条件>;
在Oracle和SQLServer中不需要写COLUMN
ALTER TABLE <表名> ADD <列名> <数据类型> <约束条件>;
另外在Oracle中同时添加多列时可以使用括号定义多个列
ALTER TABLE <表名> ADD ( <列名1> <数据类型> <约束条件>, <列名2> <数据类型> <约束条件>, <列名3> <数据类型> <约束条件>, ……);
-
删除列的操作
ALTER TABLE <表名> DROP COLUMN <列名>;
在Oracle和SQLServer中不需要写COLUMN
ALTER TABLE <表名> DROP <列名>;
在Oracle中同时删除多列时可以使用括号指定多个列
ALTER TABLE <表名> DROP (<列名1>,<列名2>,<列名3>, ……);
-
修改列的操作
# 修改列的属性及约束条件 ALTER TABLE <表名> MODIFY <列名> <数据类型> <约束条件>; # 修改列名称 ALTER TABLE <表名> RENAME COLUMN <列名> TO <新列名>;