这一笔记主要讲的是,创建表,创建约束、数据库的增删。
经验:1,建表的时候最好考虑用什么数据,因为用不恰当的数据会浪费空间
2,每一个表都要有联系,没有联系的表是没有意义的..
3,把做表和做约束分开来做...看起来清晰,容易理解
4,字段最好用 [ ]扣起来
===========================================
知识点:
一,SQL中的数据类型有以下几种
1,精确数字: tinyint(0~255),smallint(-32768~32767),int(2^31的大小),bigint
2,近似数字: real(10^-38) float(10^-308) 就是小数点后面的位数不一样, 记住SQL没有double这个类型
3,日期,时间: datatime(1953.11~9999.12.31,精确到0.003,0.007,0.000(比如0.002就会舍入到0.003))
datatime2(0000.1.1~9999.12.31)(精确到100纳秒) smalldatatime(1990.1.1~2079.6.6精确到分钟)
4,字符串: char(固定长度,1~8000个) varchar(可变长度1~8000个) 如果大于8000个用text
5,Unicode字符串(中文字符串): nchar,nvarchar 一个汉字占占两个字节,所以nchar(10)就占了20个字节, 而char(10)就占10个字节
在国际化开发软件中要用Unicode的字符串,不然无法显示中文.........
=================================================
建表的的模板
create table 表名(
列名 类型 [约束],---加[]的是可以有可以没有
....
....
)
============================================
SQL的约束:
一,实体完整性约束
1,主键约束(PK):特点:不重复,不为空,每一个表都要有一个主键--primary key(...)
2,唯一约束(UK):特点:不重复,一个表可以有多个唯一约束,但是最多只能一个为空(两个为空就不唯一了.因为空==空) ..unique
3,标识列: 自动增长,种子N,增长量x ,只能用在整型中---identity(100,1) 初始值100,一次自增1
二,域完整性
1,非空 not null
2,默认约束(DF): default 值 for (列名)
3,检查约束(CK): check(条件)
4,外键(FK):外键创建在从表中,连接到主表中的主键----foreign key ..references ....
三,引用完整性约束
1,外键:还没讲
四,自定义约束(下学期学--->触发器)
注意:主表中不能删除从表的外键约束,只有级联删除才可以,但是级联删除有一个弊端,就是删错数据就不好恢复.
=====================================
--------------建立约束的模板---------------
alter table 表名
add constraint 约束名(名字开头用约束的字母打头 eg: PK_ID ,FK_ID)
具体的约束
go
eg:
---自增
create table user_info
(user_id int primary key identity(1,1), //主键初值为1,每次自增1,数值可变化,但要符合之前定义的类型
user_name varchar(20) not null,
....
)
-------------建立主键约束的模板------------------
alter table StuInfo
add constraint PK_SID
primary key([SID])
go
---------------建立默认约束-------------------
alter table StuInfo
add constraint DF_Sex
default 1 for [Sex]
go
--------------------建立检查约束--------------
alter table StuMark
add constraint CK_Score
---------------------------------这个不会SQL的写法,所以用另外一个------check(Score>=0 and Score<=100)
check(Score between 0 and 100)---这里必须从小到大.最好用这个
go
----------------外键约束-----------------------
alter table StuMark
add constraint FK_ID
foreign key( [ID] ) references StuInfo( [ID] )
go
------------唯一约束-----------------
alter table StuInfo
add constraint CK_SFZ
unique ( [SFZ] ) --SFZ 身份证字段
========================================
DML:增加
--------------1,单条插入----------------
insert into 表名
values(......表中所有的值(除了自动增长的))
eg:
insert into StuInfo
values(‘YL‘,default) 就算是默认的也要写default占位
---------------2,多条插入-------------------
insert into 表名
select 值1,.....值n union
select 值1,.....值n union
....
select 值1,.....值n
go
//注意这个多条插入不可以用默认值...就是不可以写default
eg:
insert into StuInfo
select ‘YL‘,1 union
select ‘ZX‘,0
go
-------------从现有的表申城新的数据--------------
select * into 新表名
[where 筛选]
//这个代码要是运行两次就会出错,因为会显示新表已存在
================删除==============
delete from 表名 -----只是删除数据,不删除表,,删除表的用drop
[where 筛选]
=============修改=============
update 表名
set 字段1=...,字段2=.....
[where 筛选]
eg:
update StuMark
set Score+=5
update StuMark
where SName in(‘zs‘,‘yz‘,‘aaa‘....)
当然也可以是 not in(除了这几个)
#2 SQL入门笔记(2),古老的榕树,5-wow.com