资源描述:
《sql语句创建表》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1.定义基本表语句 语法: USE 数据库名CREATETABLE表名(列名类型(大小)DEFAULT'默认值', 列名类型(大小)DEFAULT'默认值', 列名类型(大小)DEFAULT'默认值', ......); 注:绿色部份是可以省略的。 例:CREATETABLES(SNOchar(2),SNAMEchar(8),AGEdecimal(2),SEXchar(2)DEFAULT'男',DEPTchar(2)); 创建了一个五列的表,其中第四列的默认值为‘男’。2.定义完整性约束 语法: USE 数据库名CREATETABLE表名(列名类型(大小)DEFAULT'默认值'CONSTRAINT约束名约束定义, 列名类型(大小)DEFAULT'默认值'CONSTRAINT约束名约束定义, 列名类型(大小)DEFAULT'默认值'CONSTRAINT约束名约束定义, ......); 注:(1)绿色部份是可以省略的。 (2)一个列是可以有多个约束的。 约束定义: (1)NULL|NOTNULL 用于定义列的空值约束。(定义列) (下面的蓝色部份是单选其中之一) 语法:CONSTRAINT约束名NULL|NOTNULL 注意: a.NOTNULL约束强制列不接受NULL值。 b.NOTNULL约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。 例:下面的SQL语句强制"Id_P"列和"LastName"列不接受NULL值: CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255) ) (2)UNIQUE 约束唯一标识数据库表中的每条记录。(即可以定义列也可能定义表) 语法:CONSTRAINT约束名UNIQUE(列名,列名,......); 说明:用于指定基本表在某一个列或多个列的组合上取值必须唯一。定义了UNIQUE约束的那些列称为唯一键。如果为基本表的革一列或多个列的组合指定了UNIQUE约束,则系统将为这些列建立唯一索引,从而保证在表中的任意两行记录在指定的列或列组合上不能取同样的值。 注意: a.UNIQUE约束唯一标识数据库表中的每条记录。 b.UNIQUE和 PRIMARYKEY约束均为列或列集合提供了唯一性的保证。 c.PRIMARYKEY拥有自动定义的UNIQUE约束。 d.请注意,每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARYKEY约束。 例:下面的SQL在"Persons"表创建时在"Id_P"列创建UNIQUE约束: SQLServer/ Oracle /MS access: CREATETABLEPersons ( Id_PintNOTNULLUNIQUE, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255) )如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语法: MySQL/SQLServer/Oracle/MSAccess: CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255), CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName) ) (3)PRIMARYKEY约束唯一标识数据库表中的每条记录。(即可以定义列也可能定义表) 语法:CONSTRAINT约束名PRIMARYKEY(列名,列名,......); 说明:用于定义基本表的主键。与UNIQUE约束类似,PRIMARYKEY约束也是通过建立唯一索引来保证基本表在主键列(某一个列或多个列的组合)上取值的唯一性。然而它们之间也存在着很大差别:在一个基本表中只能定义一个PRIMARYKEY约束,却能定义多个UNIQUE约束。如果为基本表的某一个列或多个列的组合指定了PRIMARYKEY约束,那么其中在任何一个列都不能出现空值;而UNIQUE约束允许出现空值。 注意: a.主键必须包含唯一的值。 b.主键列不能包含NULL值。 c.每个表应该都一个主键,并且每个表只能有一个主键。 例:下面的SQL在"Persons"表创建时在"Id_P"列创建PRIMARYKEY约束: SQLServer/Oracle/MSAccess: CREATETABLEPersons ( Id_PintNOTNULLPRIMARYKEY, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255) ) 如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法: MySQL/SQLServer/Oracle/MSAccess: CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255), CONSTRAINTuc_PersonIDPRIMARYKEY(Id_P,LastName) ) (4)FOREIGNKEY外键(即可以定义列也可能定义表) 语法:CONSTRAINT约束名FOREIGNKEY(列名,列名,......) REFERENCES(列名,列名,......); 说明:指定某一个列或多个列的组合作为外部键,并在外部键和它所引用的主键或唯一键之间建立联系。在这种联系中,包含外部键的基本表称为从表,包含外部键引用的主键或唯一键的表称为主表。一旦为一列或列的组合定义了FOREIGNKEY约束,系统将保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。 注意: a.在REFERENCES中引用的列必须和FOREIGNKEY的外部键列一一对应,即列数目相等并且相应列的数据类型相同。 例: 下面的SQL在"Orders"表创建时为"Id_P"列创建FOREIGNKEY: SQLServer/Oracle/MSAccess: CREATETABLEOrders ( O_IdintNOTNULLPRIMARYKEY, OrderNointNOTNULL, Id_PintFOREIGNKEYREFERENCESPersons(Id_P) ) 如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法: MySQL/SQLServer/Oracle/MSAccess: CREATETABLEOrders ( O_IdintNOTNULL, OrderNointNOTNULL, Id_Pint, PRIMARYKEY(O_Id), CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P) ) (5)CHECK约束用于限制列中的值的范围。(即可以定义列也可能定义表) 语法:CONSTRAINT约束名CHECK(约束条件); 说明:用于指定基本表中的每一条记录必须满足的条件,可以对基本表在各个列上的值做进一步的约束,如成绩列的取值既不能大于100,也不能小于0。 注意: a.如果对单个列定义CHECK约束,那么该列只允许特定的值。 b.如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。 例: 下面的SQL在"Persons"表创建时为"Id_P"列创建CHECK约束。CHECK约束规定"Id_P"列必须只包含大于0的整数。 SQLServer/Oracle/MSAccess: CREATETABLEPersons ( Id_PintNOTNULLCHECK(Id_P>0), LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255) ) 如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法: MySQL/SQLServer/Oracle/MSAccess: CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255), CONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes') ) 例:USElijintaoCREATETABLES2 (SNOCHAR(2)CONSTRAINTS_PRIMPRIMARYKEY, SNCHAR(8)CONSTRAINTSN_CONSNOTNULL, AGENUMERIC(2)CONSTRAINTAGE_CONSNOTNULLCONSTRAINTAGE_CHKCHECK(AGEBETWEEN15AND45), SEXCHAR(2)DEFAULT'男'CONSTRAINTSEX_CHKCHECK(SEX='男'ORSEX='女'), DEPTCHAR(2)CONSTRAINTDEPT_CONSNOTNULL);