我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第2章 sql语言概述
Sql是一种结构化的查询语言,他是实现与关系数据库通信的标准语言。
2.1 sql语言介绍
Sql主要用于完成对数据库的操作,增删改查、修改表结构等。
目前流行的sql的扩展版本主要有两个:
PL/SQL:基于oracle的数据库通信语言,已经被oracle公司集成到oracle的服务器中,可以作用于任何oracle的开发环境中。
Transact-SQL:基于sybase数据库和sql server数据库中的数据库通信语言。运行环境是sqlserver和sqlcmd。其中sqlcmd是一个命令脚本工具,作为sqlserver数据库的访问工具,他可以在数据库服务器的任何目录路径下的命令行提示符窗口中执行。
2.2 sql语句的分类
Sql语句主要包括:
数据定义语言(ddl):创建、修改、删除数据库对象(数据表、视图、索引),包括create(创建数据库对象,create view创建视图、create index创建索引、create table创建数据表)、alter(修改数据库对象,alter table修改表结构)、drop(删除数据库,drop table删除表、drop view删除视图、drop index删除索引)语句。
数据查询语言(dql):用于查询数据,主要的语句为select,select包括5个子句from、where、group by、having、with。
数据操作语言(dml):用于更新数据,包括insert(插入数据)、update(修改数据)、delete(删除数据)语句。
数据控制语言(dcl):用于授予和回收访问数据库的某种权限,包括grant(授予权限)、revoke(收回权限)语句。
事务控制语言:用于控制数据库事务,保证数据库数据的一致性,包括commit(事务的提交)、rollback(事务的回滚)语句。
2.3 sql语言的特点
Sql是操作数据库的标准语言,是一种非过程化语言。Sql的特点主要体现在以下几个方面:
1. 简单易学,语言结构简便。
2. 非过程化语言,不用操心数据是如何存取的。即不用考虑桌子是怎么做的用就行。
3. 采集集合操作方式,无论是执行数据的增删改查操作,都可以是集合的操作方式。
4. Sql语言能够嵌入到高级语言中,sql语言可以作为嵌入式语言,嵌入到高级语言中执行。
2.4 常用数据类型
在创建数据表时,除了需要创建数据表的表名、列名之外,还需要为数据表中的每一列选择合适的数据类型。
2.4.1 整数类型和浮点类型
整数类型 |
取值范围 |
整数类型 |
取值范围 |
Minyint |
-128~127(1字节) |
int |
-2(31次方)~-2(31次方)-1(4) |
Smallint |
-32768~32767(2) |
Bigint |
-2(63次方)~-2(63次方)-1(8) |
mediumint |
-2(23次方)~-2(23次方)-1(3) |
|
|
在mysql中,整数类型可以带一个参数来表示数据最大的显示宽度。例:int(4),表示显示数据列的列宽为4。使用参数不影响整数类型的取值范围。参数是可选的
浮点数类型 |
取值范围 |
Float(m,n) |
-2.4e38~2.4e38(4个字节)精确到小数点后7位 |
double(m,n) |
-2.7e308~2.7e308(8个字节)精确到小数点后15位 |
在mysql中,浮点数类型还可以包括两个参数。其中,参数m表示存储数据的有效数字的位数;参数n表示小数点后的位数。例如float(5,2)第一个参数表示显示的数字总位数为5,第二个参数表示小数点后数字的个数为2个。如果把122.456插入到例中的数据列中,则实际放入到该列的数据为122.45。可知mysql数据库在使用参数进行插入时会对插入数据进行四舍五入的操作。
Sql server的整数类型和mysql完全一样,浮点类型只是名字不一样,对应float和double分别是real和float。
Orcale用number(m,n)定义数字类型,定义方式跟mysql的float一样。
2.4.2 字符类型
字符类型用于存储字符串值。三种数据库中字符类型的定义方法:
Oracle数据库
字符类型 |
取值范围 |
Char(n) |
定义定长的字符串(以字节为单位)1~字节 |
Char(n char) |
定义定长的字符串(以字符为单位)1~2000字节 |
Varchar2(n) |
定义可变长的字符串(以字节为单位)1~4000字节 |
Varchar2(n char) |
定义可变长的字符串(以字符为单位)1~4000字节 |
如果不指定n的长度,默认值为1个字节的长度。
如果在定义为字符类型的列中存储汉字,则一个汉字占2个字节。
对于Varchar2类型,实际储存字符长度比n小,则会自动调节n到实际长度,如果前后有空格oracle会自动删除。
如果存储大量字符信息,建议使用clob。
Mysql数据库
字符类型 |
取值范围 |
Char(n) |
定义定长的字符串1~255个字符 |
Varchar(n) |
定义可变长的字符串1~65535个字符 |
tinytext |
定义可变长的字符串1~65535个字符 |
text |
定义可变长的字符串1~2(16次方)-1个字符 |
mediumtext |
定义可变长的字符串1~2(24次方)-1个字符 |
longtext |
定义可变长的字符串1~2(32次方)-1个字符 |
带参数的定义的时候需要带参数。
如果定义字符类型的列中储存汉字,则1个汉字两个字节。
Sql server,用char定义定长字符,varchar和text定义可变长字符,数据超过8kb,使用text
2.4.3 日期与时间类型
日期和时间类型用于存储日期和时间值。
Oracle使用date、timestamp等定义日期时间类型数据:
Date类型在英文版本中默认格式为DD-MON-YY。例:10-sep-09中文版本为10-9月-09。
Temestamp类型在英文版默认格式为YYYY-MM-DD HH.MM.SS.AM。例:10-sep-09 12.22.000000pm中文版本为09-8月-10 12.22.000000下午。秒值精确到小数点后6位。
Mysql使用date、time、datetime等定义日期时间类型数据:
Date类型默认格式YYYY-MM-DD。例:2009-08-10。
Time类型默认格式HH:MM:SS。例:18:13:23。
datetime类型默认格式YYYY-MM-DD HH:MM:SS。例:2009-08-10 18:13:23。
Sql server使用datetime、smalldatetime定义日期时间类型数据:
Datetime需要8个字节存储空间,取值范围从1753年1月1日-9999年12月31日,时间部分可以精确到2.33毫秒。
Smalldatetime需要4个字节存储空间,取值范围从1900年1月1日-2079年6月6日,时间部分精确到分钟。
Sql server2008中增加了4中定义方式:
Date储存日期,取值范围0001-01-01~9999-12-31.。
Time储存时间,取值范围00:00:00.0000000~23:59:59.9999999。
Datetimeoffset保证储存的日期和时间的时区一致性。
Datetime2是datetime的扩展,取值范围更大,并且参数可以设定小数点位数,最大是7位。
2.4.4 二进制类型
二进制类型用于存储二进制数据。
Oracle用blob,最大存储4gb。
Mysql用blob和tinyblob、mediumblob、longblob。
Sql server用binary、varbinary、image(存储数据是以位字符串存储的,要通过程序来解释)。
2.5 sql语句书写规范
Sql语言不区分关键字大小写,一般情况下关键字大写。
不区分列名和对象名大小写。
对数据库中的数据大小写敏感。
单行注释--,使用时后面至少要一个空格。
多行注释/* */。
Sql的语句可以写一行也可以多行。