SQL-what
1.结构化查询语言
2.ANSI标准计算机语言
3.访问数据库
区别:
关系型数据库系统,oracle,mysql,sql server等都是增加自定义语句
作用:
CRUD
create,drop,update
创建数据库;
库中创建新表;
库中创建存储过程;
库中创建视图;
设置表、存储过程和视图的权限;
SQL数据库体系结构
基本表
关系模式(模式),Excel表格行列,多个实体+实体属性形成的表
存储文件
内模式(存储模式),数据存放的物理文件
视图
子模式(外模式),视图,
用户角度:查看数据库中的数据:表
数据库系统内部:虚拟表,使用查询语句构成的表
- 有用?因为复杂查询语句将查询的表保存在数据库中
行
一条记录,元组,实体
列
属性,字段,实体人-属性(名字等)
-- 可以在视图或表的基础上建立新视图,导出新的视图。
SQL语言从功能上可以分为数据查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)和数据控制语言(DCL)四部分,具体介绍如下:
- DQL (Data Query Language),主要是SELECT。
- DML(Data Manipulation Language),包括UPDATE、INSERT和 DELETE,用来对数据库里的数据进行操作。
- DDL(Data Definition Language),DDL比DML要多,主要的命令有CREATE、ALTER、DROP等。主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,大多在建立表时使用。
- DCL(Data Control Language),用来设置或更改数据库用户或角色权限,包括grant,deny,revoke等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。
-- 修改结构,DDL,重新定义
-- 创建呢,DML,uid ,update,insert,delete
create 数据库的语法
1.window 少于24个字符,特殊字符不可创建 /,<>,符合文件夹名称
2.mysql 不区分大小写,
3.character set 字符集,可省略,使用默认
4.collate指的是校验规则,可省略,使用默认
5.show databases 展示当前all的数据库
6.show create database <数据库名 db_name> 查看该数据库的信息
show create database studentinfo ;查看数据库studentinfo的信息
例如:
-
创建studentinfo 数据库之前检查是否存在
CREATE database IF NOT EXISTS studentinfo ;
create database studentinfo; -
检验all 数据库
show databases;
修改数据库ALERT
修改名称
- 不安全操作,容易丢失和损坏
- 先导出 sql dump, 后导入
修改字符集和校验规则
-
修改字符集默认字符集utf-8-> gbk
ALERT database studentinfo character set gbk; -
查看是否修改成功
show create database studentinfo;
删除数据库
DROP database if exists db_name;
-
删除数据库系统中已存在的数据库(表,数据),原来分配的空间会回收
-
创建一个big5 字符集,名为studentinfo 数据库,然后查看数据库的详细信息,修改为gbk字符,然后删除数据库
create database if no exists studentinfo character set big5;
show create database studentinfo;
alert database studentinfo character gbk;
drop database studentinfo;
数据库的数据类型
各个字段的类型:
- 整数类型-年龄
- 小数类型
-- 定点数(DECIMAL)
-- 浮点数- (双精度double-8字节,单精度float-4字节)成绩、余额
整数类型
- 根据取值范围不同,可分为TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT5种。
其中,占用字节数最小的是TINYINT0(0-255无符号,-128~127有符号),最大的是BIGINT
-
注意:不同整数类型的取值范围可以根据字节数计算出来。例如,TINYINT类型的整数占用1个字节,1个字节是8位,那么,TINYINT类型无符号数的最大值就是:2 *8-1
-
DEC(M,D)
-DECMIAL(M,D)
M > D ,字节数M+2,
M <=D,字节数D+2,
总结大的数D/M+2
- 注意,数字类型的选择应遵循如下原则:
(1) 优先选择最小的可用类型,如果该字段的值不会超过127,则使用TINYINT比INT效果好。
(2) 在无小数点时,可以选择整数类型,比如年龄。
(3) 浮点类型用于包含小数部分的数,比如学生成绩。
(4) 在需要表示 金额 等货币类型时,优先选择DECIMAL数据类型。另外:DEC和DECIMAL这两个定点数类型是同名词。
时间和日期数据类型被广泛使用,MySQL主要支持DATE、TIME, YEAR、DATATIME和TIMESTAMP5种类型。
DATE表示日期,默认格式为’YYYY-MM-DD’;
TIME表示时间,默认格式为’HH: ii: ss’;
YEAR表示年份;
DATETIME是日期和时间的混合类型,默认格式为’YYYY-MM-DD HH: ii: ss’。
- DATE 类型
DATE 类型用于表示日期值,不包含时间部分。可以使用以下4种格式指定 DATE 类型的值:
(1)以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示。
例如,输入‘2014-01-21’或‘20140121’,插入数据库的日期都为 2014-01-21。
(2)以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示。
YY 表示的是年,范围为‘00’~‘99’,其中‘00’~‘69’范围的值会被转换为 2000~2069 范围的值,‘70’~‘99’范围的值会被转换为 1970~1999范围的值。例如,输入‘14-01-21’或‘140121’,插入数据库的日期都为 2014-01-21。
(3)以 YY-MM-DD 或者 YYMMDD 数字格式表示。
例如,输入 14-01-21 或 140121,插入数据库的日期都为 2014-01-21。
(4)使用 CURRENT_DATE 或者 NOW()表示当前系统日期。
- TIME 类型
TIME 类型用于表示时间值,它的显示形式一般为 HH:MM:SS,其中,HH 表示小时,MM 表示分,SS 表示秒。可以使用以下3种格式指定 TIME 类型的值。
(1)以‘D HH:MM:SS’字符串格式表示。其中,D 表示日,可以取 0~34 之间的值,插入数据时,小时的值等于(D*24+HH)。 例如,输入‘2 11:30:50’,插入数据库的日期为 59:30:50。
(2)以‘HHMMSS’字符串格式或者 HHMMSS 数字格式表示。例如,输入‘345454’或 345454,插入数据库的日期为 34:54:54。
(3)使用 CURRENT_TIME 或 NOW()输入当前系统时间。
- YEAR 类型
YEAR 类型用于表示年份,可以使用以下3种格式指定 YEAR 类型的值。
(1)使用 4 位字符串或数字表示,范围为‘1901’~‘2155’或 1901~2155。
例如,输入‘2014’或 2014,插入到数据库的值均为 2014。
(2)使用 2 位字符串表示,范围为‘00’‘99’,其中,‘00’‘69’范围的值会被转换为 2000~2069
范围的 YEAR 值,‘70’~‘99’范围的值会被转换为 1970~1999 范围的 YEAR 值。例如,输入‘14’,插入到数据库的值为 2014。
(3)使用 2 位数字表示,范围为 199,其中,169 范围的值会被转换为 2001~2069 范围的 YEAR 值, 70~99 范围的值会被转换为 1970~1999 范围的 YEAR 值。例如,输入 14,插入到数据库的值为2014。
注意:使用 YEAR 类型时,一定要区分‘0’和 0。因为字符串格式的‘0’表示的是 YEAR 值是 2000,而数字格式的 0 表示的 YEAR 值是 0000。
- DATETIME 类型
DATETIME 类型用于表示日期和时间,它的显示形式为‘YYYY-MM-DD HH:MM:SS’,其中,YYYY表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分,SS 表示秒。可以使用以下4种格式指定 DATETIME 类型的值:。
(1)以‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为‘1000-01-01 00:00:00’~‘9999-12-3 23:59:59’。
例如,输入‘2014-01-22 09:01:23’或20140122090123,插入数据库的DATETIME值都为2014-01-22 09:01:23。
(2)以'YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMS S’字符串格式表示的日期和时间,其中YY表示年,取值范围 为‘00’一‘99'。与DATE类型中的YY相同,‘00’一‘69’范围的值会被转换为2000~2069范围的值,’70’一‘99’范围的值会被转换为 1970~1999范围的值。
(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。例如,插入20140122090123或者 140122090123,插入数据库的DATETIME值都为2014-01-22 09:01:23。
(4)使用NOW来输入当前系统的日期和时间。
5、TIMESTAMP 类型
TIMESTAMP 类型用于表示日期和时间,它的显示形式与 DATETIME 相同,但取值范围比 DATETIME小。下面介绍3种 TIMESTAMP 类型与 DATATIME 类型不同的形式,具体如下:
(1)使用 CURRENT_TIMESTAMP 来输入系统当前日期和时间。
(2)输入 NULL 时,系统会输入系统当前日期和时间。
(3)无任何输入时,系统会输入系统当前日期和时间。
字符串
字符串类型的数据分为普通的文本字符串类型(CHAR和VARCHAR)和可变类型(TEXT和BLOB)。
BLOB 二进制长文本
- CHAR和VARCHAR
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式,CHAR把这个大小视为值的准确大小(用空格填补比较短的值),而VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。所以,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短 )。
varchar (len=实际大小+长度一字节)
- TEXT和BLOB
TEXT和BLOB类型,大小可以改变。其中TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,如文本、声音和图像等。BLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。
3.字符串类型的选取原则
在创建表时,使用字符串类型时应遵循以下原则:
(1) 从速度方面考虑,要选择固定的列,可以使用CHAR类型。
(2) 要节省空间,使用动态的列,可以使用VARCHAR类型。
(3) 如果要搜索的内容不区分大小写,可以使用TEXT类型。
(4) 如果要搜索的内容区分大小写,可以使用BLOB类型。
字符串_1.png
网友评论