MSSQL编程:用SQL创立数据库
支持多种存储引擎。创立|数据|数据库用SQL创立数据库
起首说说怎样用SQL语句创立数据库,创立数据库的语句有以下几种:
1.CREATETABLE(创立新表)
2.CREATEINDEX(增添索引)
3.DROPINDEX(删除索引)
4.CONSTRAINT(束缚语句)
5.ALTERTABLE(修正表)
6.DROPTABLE(删除表)
CREATETABLE语句:
在数据库中天生新表,表中字段的范例能够为:INTEGER(整型)、LONG(长整型)、SINGLE(单精度浮点数)、DOUBLE(双精度浮点数)、DATETIME(日期型,也能够写成DATE)、BIT(布尔型)、TEXT(字符串型,最年夜255个字节)、MEMO(字符串型,最年夜可达1.2G字节)、COUNTER(主动递增加整型,可断定纪录的独一性)、CURRENCY(泉币型,准确到小数点右边15位,右侧4位)、BINARY(字节型,最年夜255个)、LONGBINARY(用于OLE工具)、GUID(全局独一标识符)。
天生表NewTable,该表有文本字段Field1和整型字段Field2,表名和字段名能够任意你取,不辨别巨细写,可是,有些保存字不克不及用作表名字段名,好比NumberCREATETABLENewTable(Field1TEXT(30),Field2INTEGER);CREATEINDEX语句:
INDEX是为了加速查找纪录的速率,大概是为了增添字段束缚干系而设置的。
创立索引语句实行前表中能够有纪录,但存在的纪录必需满意该索引语句的束缚干系,不然语句不克不及实行,别的要注重的是在统一个数据库中(而不单单是在统一个表中),索引名不克不及不异,不然语句也会失利。
天生字段Field1的索引字段NewIndex,两条语句感化不异
天生后Field1字段能够有不异的值,能够有空值(NULL)CREATEINDEXNewIndexONNewTable(Field1);
CREATEINDEXNewIndexONNewTable(Field1)WITHIGNORENULL;
天生字段Field1的索引字段NewIndex,注重,每一个内外只能有一个主索引(PRIMARY)。天生后Field1字段不克不及有不异的值,不克不及有空值(固然,假如是TEXT范例,能够有一个空串,可是空串不是空值)CREATEINDEXNewIndexONNewTable(Field1)WITHPRIMARY;
字段Field1不克不及有不异的值,但能够有空值(两个空值不算不异的值)CREATEUNIQUEINDEXNewIndexONNewTable(Field1);
字段Field1能够有不异的值,但不克不及有空值CREATEINDEXNewIndexONNewTable(Field2)WITHDISALLOWNULL
能够在索引语句中到场ASC(升序)或DESC(降序)来把持纪录分列按次假如不利用按次字,SQL则默许利用ASC按次CREATEINDEXNewIndexONNewTable(Field1ASC,Field2DESC);DROPINDEX语句:删除表NewTable中的索引NewIndex,语句实行前索引NewIndex必需存在DROPINDEXNewIndexONNewTable;
CONSTRAINT语句:
CONSTRAINT子句用于创立数据库完全性的索引,它和INDEX语句感化一样,有些中央能够相互替换,它可使用PRIMARYKEY(主关头字),UNIQUE(独一)和FOREIGNKEY(内部关头字),和INDEX比拟不克不及利用IGNORNULL和DISALLOWNULL,但多了FOREIGNKEY(这也是它最壮大的中央)。别的,CONSTRAINT语句必需和CREATETABLE或ALTERTABLE语句一同利用。
天生表NewTable,主关头字段是Field1,主索引是NewPKCREATETABLENewTable(Field1LONGCONSTRAINTNewPKPRIMARYKEY,Field2MEMO,Field3DATETIME);
天生索引为NewUK的表NewTable,Field1不克不及有不异值,能够有空值CREATETABLENewTable(Field1INTEGERCONSTRAINTNewUKUNIQUE);
天生多列的主索引,两笔记录的Field1和Field2不克不及全体不异,也不克不及为空值CREATETABLENewTable(Field1INTEGER,Field2CURRENCY,CONSTRAINTNewPKPRIMARYKEY(Field1,Field2));
天生多列的UNIQUE索引,两笔记录的Field1和Field2不克不及全体不异注重,假如两笔记录个中一个字段不异而另外一个字段都是空值,那也算两个字段分歧CREATETABLENewTable(Field1INTEGER,Field2CURRENCY,CONSTRAINTNewUKUNIQUE(Field1,Field2));
要在几个分歧的表之间创建接洽,就要利用FOREIGNKEYREFERENCES子句,它能够限制某个表的字段内容必需存在于别的一个表中。
第一个例子:
起首,天生主关头字段为Field1的表NewTable1CREATETABLENewTable1(Field1INTEGERCONSTRAINTNewPKPRIMARYKEY);
然后,再天生内部索引,两个表的Field1必需范例不异,而且第一个表的Field1是主关头字段或UNIQUE字段。天生内部索引后,表NewTable2要增添纪录,它的Field1字段值必需已存在于表NewTable1的Field1字段中。
上面两条语句感化不异,由于Field1是NewTable1的主关头字段,能够省略不写CREATETABLENewTable2(Field1INTEGERCONSTRAINTNewFKREFERENCESNewTable1);
CREATETABLENewTable2(Field1INTEGERCONSTRAINTNewFKREFERENCESNewTable1(Field1));
第二个例子:
起首,天生主关头字段为Field1和Field2的表NewTable1CREATETABLENewTable1(Field1INTEGER,Field2TEXT(20),CONSTRAINTNewPKPRIMARYKEY(Field1,Field2));
然后,天生多列内部索引CREATETABLENewTable2(Field1INTEGER,Field2TEXT(20),CONSTRAINTNewFKFOREIGNKEY(Field1,Field2)REFERENCESNewTable1(Field1,Field2));ALTERTABLE语句:
在表天生以后,假如想修正表的布局,就利用这条语句,它能增添或删除字段和束缚干系。
给表NewTable增添日期型字段Field3,语句实行前表NewTalbe必需没有字段Field3ALTERTABLENewTableADDCOLUMNField3DATE;
删除表NewTable中的字段Field3,语句实行前字段Field3必需存在表NewTable中ALTERTABLENewTableDROPCOLUMNField3;
给表NewTable增添NewUK束缚干系ALTERTABLENewTableADDCONSTRAINTNewUKUNIQUE(Field1,Field2);
删除表NewTable的NewUK束缚干系ALTERTABLENewTableDROPCONSTRAINTNewUK;DROPTABLE语句:删除表NewTable,语句实行前表NewTable必需存在DROPTABLENewTable;你看出了作者的深度?深处半米!当初是冲那么多的大牛给他写序才买的,后来才发现无啥内容,作者也只是才用几年的新手,百花了几十两银子,再次感叹当今社会的虚伪与浮躁 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上. 也可谈一下你是怎么优化存储过程的? 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
页:
[1]