[SQL基础]入门
目录
什么是SQL?
SQL能做什么?
RDBMS
SQL常见数据类型
SQL语法
什么是SQL?
结构化查询语言(Structured Query Language)简称SQL。
结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。
结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
SQL能做什么?
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
RDBMS
RDBMS 指的是关系型数据库管理系统。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表(tables)的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL常见数据类型
分类 |
备注和说明 |
类型 |
说明 |
二进制数据类型 |
存储非子符和文本的数据 |
Image |
可用来存储图像 |
文本数据类型 |
字符数据包括任意字母、符号或数字字符的组合 |
Char,8000 |
固定长度的非 Unicode 字符数据。固定长度的字符串相对于可变长度的字符串来说效率要高一些,在数据长度固定的情况下优先选用固定长度,省去了计算长度的过程,提高效率 |
Varchar,8000 |
可变长度非 Unicode 数据 |
||
Nchar,4000 |
固定长度的 Unicode 数据 |
||
Nvarchar,4000 |
可变长度 Unicode 数据 |
||
Text varchar(max) |
存储长文本信息(指针,2G) varchar(max),大字符串类型可以保存非常多的字符,但是对于这种类型的数据DBMS经常将它们保存到单独的空间中,这就导致了数据的保存和加载速度比较慢,因此除非必要,否则不要使用。 |
||
Ntext nvarchar(max) |
Nvarchar(max)代替 |
||
日期和时间 |
日期和时间在单引号内输入 |
Datetime |
日期和时间 |
数字数据 |
该数据仅包含数字,包括正数、负数以及分数 |
int smallint |
整数 |
float real |
数字 |
||
货币数据类型 |
用于十进制货币值,money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。 |
Money(C#:double) |
|
Bit数据类型 |
表示是/否的数据 |
Bit |
存储布尔数据类型(1-true 0-false) |
SQL语法
SQL主要分为:DDL(数据定义语言,建表、建库等语句。)、DML(数据操作语言)和DCL (数据库控制语言) 。Create Table、Drop Table、Alter Table等属于DDL,Select、Insert、Update、Delete等属于DML, GRANT 授权、REVOKE 取消授权属于DCL。
T-SQL创建数据库的语法:
CREATE DATABASE 数据库名
ON [PRIMARY]
(
<数据文件参数> [,…n]
)
[LOG ON]
(
<日志文件参数> [,…n]
)
实例:
CREATE DATABASE WolfyDB
ON PRIMARY --默认属于Primary主文件组,可省略
(
NAME='WolfyDB',--主数据文件的逻辑名
FILENAME='F:\Database\WolfyDB_data.mdf',--主数据文件的物理名
SIZE=5MB,--主数据文件初始大小,MS SERVER2012最低大小5M
MAXSIZE=10MB,--主数据文件的最大的容量
FILEGROWTH=10%--主数据文件的增长率
)
LOG ON
(
NAME ='WolfyDBLog',--不能和数据文件的逻辑名相同,否则报错
FILENAME='F:\Database\WolfyDB_log.ldf',
SIZE=5MB,--日志文件初始大小
MAXSIZE=20MB,
FILEGROWTH=1MB
)
GO
T-SQL创建数据表的语法:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
实例:
USE wolfydb
CREATE TABLE users
(
id INT IDENTITY(1,1) PRIMARY KEY,
NAME NVARCHAR(20) NOT NULL,
pwd VARCHAR(16) NOT NULL,
isLogin BIT NOT NULL DEFAULT(0)
)
GO
其中id为主键,并且自增。
主键:就是数据行的唯一标识。不会出现重复数据的列才能当主键。一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键。
主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号,银行帐号等。逻辑主键是使用没有任何业务意义的字段做主键,完全是给程序看的,业务人员不会看的数据。因为很难保证 业务主键不会重复(身份证重复)、不会变化(帐号升级),因此推荐使用逻辑主键。
主键的作用:唯一标识表中的一条记录。
选择多列同时作为一个主键->组合主键(复合主键)。(一般不建议采用)
尽量选择单列作为主键:
1、必须唯一(不能重复)
2、该列不能为Null
3、比较稳定的列(不经常更新,最好是建好以后再也不更新。)
4、选择主键的列的时候,推荐使用“逻辑主键”(例如:自动编号,guid等。)不推荐“业务主键”(选择有实际意义的列作为主键(例如:身份证号,工号,学号等))
go语句的作用:
向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。
将SQL语句分段执行。
GO 不是 Transact-SQL 语句;它是 sqlcmd 和 osql 实用工具以及 SQL Server Management Studio 代码编辑器识别的命令。
SQL Server 实用工具将 GO 解释为应该向 SQL Server 实例发送当前批 Transact-SQL 语句的信号。当前批语句由上一 GO 命令后输入的所有语句组成,如果是第一条 GO 命令,则由即席会话或脚本开始后输入的所有语句组成。
GO 命令和 Transact-SQL 语句不能在同一行中。但在 GO 命令行中可包含注释。
用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。
删除数据库,数据表:
USE WolfyDB;
DROP TABLE users--删除表
DROP DATABASE WolfyDB --删除数据库
数据库约束
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制。
约束类型:
主键约束(PK)Primary Key Constraint 唯一且不为空
唯一约束(UQ)Unique Constraint唯一,允许为空,但只能出现一次。
默认约束(DF)Default Constraint默认值
检查约束(CK)Check Constraint范围以及格式限制
外键约束(FK)Foreign key Constraint表关系保证外键值来源于主键表。(增加外键约束时,设置级联更新,级联删除)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
当创建了主外键关系后,如果在外键表中有任何记录引用了主键表中的某条记录,则在主键表中不能删除该记录。同时主键表也不能删除。
实例:
USE WolfyDB;
--新建一张表:员工信息表
create table Employees
(
EmpId int identity(1,1),
EmpName varchar(50),
EmpGender char(2),
EmpAge int,
EmpEmail varchar(100),
EmpAddress varchar(500)
)
create table Department
(
DepId int identity(1,1) primary key,
DepName varchar(50) unique not null
)
--============手动增加约束==========
--手动删除一列(删除EmpAddress列)
alter table Employees drop column EmpAddress
--手动增加一列(增加一列EmpAddr varchar(1000))
alter table Employees add EmpAddr11 varchar(500),AA int ,bb varchar(10)
--手动修改一下EmpEmail的数据类型(varchar(200))
alter table Employees alter column EmpAddr varchar(1000)
--为EmpId增加一个主键约束
alter table Employees add constraint PK_EmpId primary key(EmpId)
--非空约束,为EmpName增加一个非空约束
alter table Employees alter column EmpName varchar(50) not null
--为EmpName增加一个唯一约束
alter table Employees add constraint UQ_EmpName unique(EmpName)
--为性别增加一个默认约束,默认为'男'
alter table Employees add constraint DF_EmpGender default('男') for EmpGender
--为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。
alter table Employees add constraint CK_EmpAge check(EmpAge >=0 and EmpAge<=120)
--创建一个部门表,然后为Employee表增加一个DepId列。
alter table Employees add DeptId int
--增加外键约束
alter table Employees add constraint FK_DeptId_DepId foreign key(DeptId) references Department(DepId)
--用一条语句为表增加多个约束。
alter table Employees add
constraint PK_Employees_EmpId primary key(EmpId),--增加主键约束
constraint UQ_Employees_EmpName unique(EmpName),--增加唯一约束
constraint DF_Employees_EmpGender default('女') for EmpGender,--默认约束
constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),
constraint FK_Employees_Department_DepId foreign key(DepId) references Department(DepId)
--删除约束
alter table Employees drop constraint
CK_Employees_EmpAge,
FK_Employees_DepId --删除原有的外键约束
alter table Employees drop constraint FK_Employees_Department_DepId --设置主外键关系的级联删除
alter table Employees add constraint FK_Employees_Department_DepId
foreign key(DepId) references Department(DepId)
on delete CASCADE --设置级联删除
--on update cascade --设置级联更新
总结
这里总结了,sql的基础内容,隔了很久了,有写东西有点模糊了。
参考资料:
http://www.w3school.com.cn/sql/
黑马培训班ppt(网上搜集的)
[SQL基础]入门的更多相关文章
- Oracle pl/sql 基础入门语法
PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成:1 声明 此部分开头使用关键字DECLARE.它是一个可选的部分,并限定在该程序中使用的 ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
- MyBatis基础入门《十八》动态SQL(if-where)
MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...
- MyBatis基础入门《十七》动态SQL
MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...
- .NET零基础入门09:SQL必知必会
一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏, ...
- SQL基础语句入门
SQL语句入门 起因 学校开设数据库相关的课程了,打算总结一篇关于基础SQL语句的文章. SQL介绍 SQL最早版本是由IBM开发的,一直发展到至今. SQL语言有如下几个部分: 数据定义语言DDL: ...
- SQL从入门到基础–03 SQLServer基础1(主键选择、数据插入、数据更新)
一.SQL语句入门 1. SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法. 2. SQL语句中字符串用单引号. 3. SQL语句中,对于SQL关键字大小写不敏感,对于字符串值大小 ...
- 从零3D基础入门XNA 4.0(1)——3D开发基础
[题外话] 最近要做一个3D动画演示的程序,由于比较熟悉C#语言,再加上XNA对模型的支持比较好,故选择了XNA平台.不过从网上找到很多XNA的入门文章,发现大都需要一些3D基础,而我之前并没有接触过 ...
随机推荐
- python【项目】:选课系统【简易版】
功能要求 角色:学校.学员.课程.讲师要求:1. 创建学校2. 创建课程3. 课程包含,周期,价格,通过学校创建课程4. 通过学校创建班级, 班级关联课程.讲师5. 创建学员时,选择学校,关联班级5. ...
- BFC(块级格式化上下文)
渲染规则 1.内部的box会在垂直方向,一个接一个的放置 2.box垂直方向的距离由margin决定,属于同一个bfc的两个相邻box的margin会发生重叠 3.每个元素的margin box的左边 ...
- Android学习笔记(四) 定时器Timer
Android考虑到线程安全问题,不允许在线程中执行UI线程. 所以在线程中不允许有UI操作 可以利用Handler机制来接收Timer每隔一秒发出的信息,也可以直接利用handler机制的 1.方法 ...
- 计算 Python (list or array) 相同索引元素相等的个数
上代码: a = [2, 3, 3, 1, 1, 3, 3, 3, 2, 1, 3, 1, 3, 2, 2, 2, 3, 1, 2, 3, 2, 3, 1, 1, 2, 1, 1, 1, 2, 2, ...
- MySQL增删改数据
1.增加数据 ,); /*插入所有字段.一定依次按顺序插入--字符串与日期需要加单引号,数字不需要,各个字段之间用逗号分隔*//*注意不能少或者多字段值*/ ,) /*按字段名插入数据,中间用逗号隔开 ...
- [BZOJ4942][Noi2017]整数 线段树+压位
用线段树来模拟加减法过程,维护连续一段中是否全为0/1. 因为数字很大,我们60位压一位来处理. #include<iostream> #include<cstring> #i ...
- ubuntu sublime text 3 集成 nodejs 插件
下载nodejs插件地址:https://github.com/tanepiper/SublimeText-Nodejs 解压重命名文件夹为Nodejs打开sublime text : prefere ...
- ssh自动登录(免密)
创建公钥 1 ssh-keygen -t rsa 无视它出来的任何提示,欢快的一路回车到底吧~ 把公钥复制到远程主机 把公钥id_rsa.pub复制到远程机器的 /home/username/.ssh ...
- scrapy抓取拉勾网职位信息(六)——反爬应对(随机UA,随机代理)
上篇已经对数据进行了清洗,本篇对反爬虫做一些应对措施,主要包括随机UserAgent.随机代理. 一.随机UA 分析:构建随机UA可以采用以下两种方法 我们可以选择很多UserAgent,形成一个列表 ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...