約束:為了增強表的安全性(在資料庫中建立的使用者表必須安全),需要對錶中的每列數進行約束。
約束方式有兩種:1.建表時設定約束 2建表後追加約束
當應用程式訪問資料庫時,還要注意的是,如果是資料庫設計方面的操作,一定要在資料庫中
完成,而不能借用其他形式(如在應用程式中操作);
單錶五類約束,多表一類約束;
第一類單錶約束:可空、非空約束
null,預設可空,用來約束列的,標明這列資料可有可無;
not null,非空,用來約束列的,標明這列資料必須有;
例:在資料庫mydb中設計student表:
if exists(select name from sysobjects where name='student' and
xtype='u')
drop table student
gocreate table student
(sid char(10) not null,
sname nvarchar(10) not null,
sage int not null,
s*** nchar(1) not null,
sdesc nvarchar(500),)go
建立表之後,向表中新增行記錄,使用關鍵字insert(新增一條記錄);
insert into student values('2009010470','索強',26,'男','無')
go再向表中新增一條資料
insert into student(sid,sname,sage,s***) values('2009010444','索小強',24,'男')
go再向表中新增一條資料
insert into student(sid,sage,sname,s***) values('2009010010',23,'張三','男')
go以上三條插入語句都是正確的,再向表中插入一條資料:
insert into student(sid,sname,sage) values('2009000111','李四',21)
go執行後出現錯誤,因為表中定義s***不允許為空值
以上用到的可空約束和非空約束是幾類約束最簡單的,也是最常用的,這類約束需要在建表時就
設定,不合適用於追加。
第二類單錶約束:
主鍵約束:primary key
它的作用是用來標記行的唯一性,即某行記錄與其他所有行記錄不同。
要求對於任何乙個表,都要設計主鍵約束,而且乙個表中只有乙個主鍵約束。
選擇主鍵約束時是按照實際邏輯關係進行選擇哪一列為主鍵約束
表中做為主鍵的列,可以是單列,也可以是多列(稱為復合主鍵或聯合主鍵),在sqlserver中不建議
使用復合主鍵
約束的要素:
1.約束名稱,可以由使用者定義,如果使用者不定義,則由伺服器自動命名;
2.約束型別
給student表中的sid列新增主鍵約束的**:
create table student
(sid char(10) not null constraint pk_student primary key,
sname nvarchar(10) not null,
sage int not null,
s*** nchar(1) not null,
sdesc nvarchar(500) null,
)sid也可以改為:sid char(10) not null primary key,
還可以改為:sid char(10) primary key,與not null約束存在時沒有任何變化
表中符合主鍵約束列的條件:1.唯一 2.非空
sqlserver中使用中文的一些問題:
1.全方位支援中文,各類資料庫物件的名稱,
2.如果物件名或列名使用了中文,通常按照習慣,用括起來。
3.[my table] select * from [我的table]
主鍵列的幾種形式:
1.字元型主鍵列資料,其內容需要使用者輸入,無論是否包括中文;
a.如果不包括中文,則使用單位元組字元編碼
b.如果資料中有中文存在,則一定要使用雙位元組編碼
c.如果是變長的資料,也以按照以上兩點執行。
2.整數自增型資料作為主鍵
a.sqlserver中的自增屬性,此技術在mysql(increment)和oracle(sequence)也都存在;用法為提供
乙個種子和乙個增量,每新增一行記錄,此列就會增大或減小。
b.在資料值資料中,只有整型資料可以作主鍵,實數不行。
c.整數作主鍵,只是唯一非空即可,不一定非自增。
例:建表worker
use mydb
goif exists(select name from sysobjects where name='worker' and xtype='u')
drop table worker
gocreate table worker
(wid int identity(1,1) primary key,
wname nvarchar(6) not null,)go
一旦表中的主鍵列設定為identity自增屬性,則在新增資料時,此列資料不需要新增,它會自動插入資料。
向表中新增兩行記錄:
insert into worker(wname) values('張三')
insert into worker(wname) values('李四')
go當自增中的種子和增量都為1時,顯式體現可以省略。
3.用全域性唯一性識別符號型別作主鍵:
建立**上常用的註冊使用者表,包括了主鍵,使用者名稱,密碼等資訊。
if exists(select name from sysobjects where name='users'
and xtype='u')
drop table users
gocreate table users
(userid uniqueidentifier primary key,
username nvarchar(20) not null,
password varchar(20) not null,
--..)go
向表中新增若干記錄:
insert into users values(newid(),'admin','admin')
insert into users values(newid(),'member','member')
go主鍵約束的另一種操作形式,建表後向表中追加。
如果表中已經存在了主鍵約束,就不能繼續向表中追加了;當追加約束時,如果表中已經有了記錄,
如果記錄中有不符合主鍵約束的條件,仍然追加不上。
向表中追加約束的過程,相當於修改了表的結構,使用關鍵字alter
例:建立student表如下
create table student
(sid char(10) not null,
sname nvarchar(10) not null,
--....)go
此表中沒有主鍵約束,按照sqlserver的要求追加乙個
alter table student add
constraint pk_student
primary key(sid)
go刪除約束:(可刪除任何型別的約束,只需要提供約束名稱,可以一次性刪除多個、多種);
alter table student drop constraint pk_student
go批量插入記錄:
將提供的資料,將其存入乙個文字檔案f:/data.sql文字中,如下
2001010010 張三
2001020020 李四
建表如下:
if exists(select name from sysobjects where name='emp' and xtype='u')
drop table emp
gocreate table emp
(eid char(10) primary key,
ename nvarchar(10) not null,)go
將資料檔案中的資料批量匯入到表中:
bulk insert emp from 'f:/data.sql'
go如果文字中的資料列與列之間不是用預設的tab鍵間隔,是其他字元,則使用bulk insert命令中更全面的部分;
如列與列之間的間隔為分號:
2001010010;張三
2001020020;李四
使用批量插入命令:
bulk insert emp from 'f:/data.sql'
with
(fieldterminator=';',
rowterminator='\n')go
第二十七天
今天主要學習了linux的程序通訊 程序通訊可分為 管道通訊 訊號通訊 共享記憶體和訊息佇列 管道通訊 分無名管道和有名管道,無名管道一般用於父子程序之間 訊號通訊的產生方式 1.按鍵產生 2.硬體異常產生 除數為0,無效儲存訪問等 3.程序用kill函式給另乙個程序發訊號 4.使用者用kill命令...
學習第二十七天
一 this關鍵字 this關鍵字 this動態繫結物件 1 this所在的函式是否是通過new呼叫使用的,如果是指向當前new的物件 2 this是通過物件.函式名 使用,this指代當前呼叫的物件 3 this預設指代window,window指全域性物件 定義的全域性變數,預設定義window...
第二十七天 客服支援
問 產品穩定,產品也有亮點,培訓也上檔次,文件也齊全。確實,客服這回清閒了。那客服的作用是什麼呢?答 客服當然有用了。首先,對於上一講的需求,計算機室人員要交給客服部而不是直接交給開發部。客服部會首先把需求記錄進 需求與bug任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...