森縱培訓第二十七天課程總結

2021-06-20 13:55:32 字數 4397 閱讀 8151



約束:為了增強表的安全性(在資料庫中建立的使用者表必須安全),需要對錶中的每列數進行約束。

約束方式有兩種: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任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...