首页 > 代码库 > #2 SQL入门笔记(2)

#2 SQL入门笔记(2)

  这一笔记主要讲的是,创建表,创建约束、数据库的增删。
 
 


经验: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 StuInfoadd constraint PK_SIDprimary key([SID])go 

 

---------------建立默认约束-------------------
alter table StuInfo add constraint DF_Sexdefault 1 for [Sex]go

 

 
--------------------建立检查约束--------------
alter table StuMarkadd constraint CK_Score---------------------------------这个不会SQL的写法,所以用另外一个------check(Score>=0 and Score<=100)check(Score between 0 and 100)---这里必须从小到大.最好用这个go

 

 
 
----------------外键约束-----------------------
alter table StuMarkadd constraint FK_IDforeign key( [ID] ) references StuInfo( [ID] )go

 

 
------------唯一约束-----------------
alter table StuInfoadd constraint CK_SFZunique ( [SFZ] )    --SFZ 身份证字段

 

========================================
DML:增加
--------------1,单条插入----------------
insert into 表名
values(......表中所有的值(除了自动增长的))
 
eg:
insert into StuInfovalues(YL,default)            就算是默认的也要写default占位

 

 
 
---------------2,多条插入-------------------
insert into 表名select 值1,.....值n  unionselect 值1,.....值n  union....select 值1,.....值ngo

 

//注意这个多条插入不可以用默认值...就是不可以写default
 
eg: 
insert into StuInfoselect YL,1 unionselect ZX,0go

 

 
 
-------------从现有的表申城新的数据--------------
select * into  新表名
[where 筛选]
 
//这个代码要是运行两次就会出错,因为会显示新表已存在
 
 
================删除==============
delete from 表名  -----只是删除数据,不删除表,,删除表的用drop
[where 筛选]
 
=============修改=============
update 表名
set 字段1=...,字段2=.....
[where 筛选]
 
 
eg:
update StuMarkset Score+=5 update StuMarkwhere SName in(zs,yz,aaa....)

 

当然也可以是 not in(除了这几个)