首页 > 代码库 > #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(除了这几个)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。