📄 sql+
字号:
在这个例子中,字段comments被用来存放访问者对你站点的意见。注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。 当你从HTML form的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。
警告: 一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。 数值型数据 SQL Sever支持许多种不同的数值型数据。你可以存储整数、小数、和钱数。 通常,当你需要在表中的存放数字时,你要使用整型(INT)数据。INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数。下面是一个如何使用INT型数据的例子:
CREATE TABLE visitlog (visitor VARCHAR(40),numvisits INT)
这个表可以用来记录你站点被访问的次数。只要没有人访问你的站点超过2,147,483,647次,nubvisits字段就可以存储访问次数。 为了节省内存空间,你可以使用SMALLINT型数据。SMALLINT 型数据可以存储从-32768到32768的整数。这种数据类型的使用方法与INT型完全相同。 最后,如果你实在需要节省空间,你可以使用TINYINT型数据。同样,这种类型的使用方法也与INT型相同,不同的是这种类型的字段只能存储从0到255的整数。TINYINT型字段不能用来存储负数。 通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。 为了能对字段所存放的数据有更多的控制,你可以使用NUMERIC型数据来同时表示一个数的整数部分和小数部分。NUMERIC型数据使你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字段可以存储从-1038到1038范围内的数。NUMERIC型数据还使你能表示有小数部分的数。
例如,你可以在NUMERIC型字段中存储小数3.14。 当定义一个NUMERIC型字段时,你需要同时指定整数部分的大小和小数部分的大小。这里有一个使用这种数据类型的例子:
CREATE TABLE numeric_data (bignumber NUMERIC(28,0), fraction NUMERIC (5,4) )
当这个语句执行时,将创建一个名为numeric_data的包含两个字段的表。字段bignumber可以存储直到28位的整数。字段fraction可以存储有五位整数部分和四位小数部分的小数。 一个NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。 你可以使用INT型或NUMERIC型数据来存储钱数。但是,专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MONEY型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。 SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。下面的例子显示了如何使用这两种表示钱的数据类型:
CREATE TABLE products (product VARCHAR(40),price MONEY, Discount_price SMALLMONEY)
这个表可以用来存储商品的折扣和普通售价。字段price 的数据类型是MONEY,字段discount_price的数据类型是SMALLMONEY。 存储逻辑值 如果你使用复选框(CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。这里有一个如何使用这种字段的例子:
CREATE TABLE opinion (visitor VARCHAR(40),good BIT) 这个表可以用来存放对你的网点进行民意调查所得的信息。访问者可以投票表示他们是否喜欢你的网点。如果他们投YES,就在BIT型字段中存入1。反之,如果他们投NO,就在字段中存入0(在下一章里,你将学会如何计算投票)。
当心,在你创建好一个表之后,你不能向表中添加BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。 存储日期和时间 当你建立一个网点时,你也许需要记录在一段时间内的访问者数量。
为了能够存储日期和时间,你需要使用DATETIME型数据,如下例所示:
CREATE TABL visitorlog( visitor VARCHAR (40), arrivaltime DATETIME , departuretime DATETIME)
这个表可以用来记录访问者进入和离开你网点的时间和日期。一个DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。 如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。 DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。在下一章,你将学习怎样使用大量的SQL函数来读取和操作日期和时间(参见下面的“缺省值”一节)。你也可以在VBScript和JScript 中使用日期和时间函数来向一个DATETIME型字段中输入日期和时间。 字段属性 上一节介绍了如何建立包含不同类型字段的表。在这一节中, 你将学会如何使用字段的三个属性。这些属性允许你控制空值,缺省值和标识值。 允许和禁止空值 大多数字段可以接受空值(NULL)。当一个字段接受了空值后,如果你不改变它,它将一直保持空值。空值(NULL)和零是不同的,严格的说,空值表示没有任何值。 为了允许一个字段接受空值,你要在字段定义的后面使用表达式NULL。例如,下面的表中两个字段都允许接受空值:
CREATE TABLE empty (empty1 CHAR (40) NULL,empty2 INT NULL( 注意: BIT型数据不能是空值。一个这种类型的字段必须取0或者1。 有时你需要禁止一个字段使用空值。例如,假设有一个表
存储着信用卡号码和信用卡有效日期,你不会希望有人输入一个信用卡号码但不输入有效日期。为了强制
两个字段都输入数据,你可以用下面的方法建立这个表:
CREATE TABLE creditcards (creditcard_number CHAR(20) NOT NULL, Creditcard_expire DATETIME NOT NULL)
注意字段定义的后面跟有表达式NOT NULL。通过包含表达式NOT NULL,你可以禁止任何人只在一个字段中插入数据,而不输入另一个字段的数据。 你将会发现,在你建设自己的网点过程中,这种禁止空值的能力是非常有用的。
如果你指定一个字段不能接受空值,那么当你试图输入一个空值时,会有错误警告。这些错误警告可以为程序调试提供有价值的线索。 缺省值 假设有一个存储地址信息的表,这个表的字段包括街道、城市、州、邮政编码和国家。如果你预计地址的大部分是在美国,你可以把这个值作为country字段的缺省值。 为了在创建一个表时指定缺省值,你可以使用表达式DEFAULT。请看下面这个在创建表时使用缺省值的例子:
CREATE TABLE addresses (street VARCHAR(60) NULL, city VARCHAR(40) NULL,
state VARCHAR(20) NULL zip VARCHAR(20) NULL, country VARCHAR(30) DEFAULT ‘USA’)
在这个例子中,字段country的缺省值被指定为美国。注意单引号的使用,引号指明这是字符型数据。为了给非字符型的字段指定缺省值,不要把该值扩在引号中:
CREATE TABLE orders(price MONEY DEFAULT $38.00, quantity INT DEFAULT 50,
entrydate DATETIME DEFAULT GETDATE())
在这个CREATETABLE语句中,每个字段都指定了一个缺省值。注意DATETIME型字段entrydate所指定的缺省值,该缺省值是函数Getdate()的返回值,该函数返回当前的日期和时间。 标识字段 每个表可以有一个也只能有一个标识字段。一个标识字段是唯一标识表中每条记录的特殊字段。例如,数据库pubs中的表jobs包含了一个唯一标识每个工作标识字段:
job_id job_desc
…………………………………………………………….
New Hire Job not specified Chief Executive officer Bushness Operations Manager Chief Financial Officier Publisher 字段job_id为每个工作提供了唯一的一个数字。如果你决定增加一个新工作,新增记录的job_id字段会被自动赋给一个新的唯一值。 为了建立一个标识字段,你只需在字段定义后面加上表达式IDENTITY即可。你只能把NUMERIC型或INT型字段设为标识字段,这里有一个例子:
CREATE TABLE visitorID (theID NUBERIC(18) IDENTITY,name VARCHAR(40))
这个语句所创建的表包含一个名为theid的标识字段。每当一个新的访问者名字添加到这个表中时,这个字段就被自动赋给一个新值。你可以用这个表为你的站点的每一个用户提供唯一标识。
技巧: 建立一个标示字段时,注意使用足够大的数据类型。例如你使用TINYINT型数据,那么你只能向表中添加255个记录。如果你预计一个表可能会变得很大,你应该使用NUMERIC型数据。 标识字段的存在会使你想尝试许多不可能的事情。例如,你也许想利用标识字段来对记录进行基于它们在表中位置的运算。你应该抛弃这种意图。每个记录的标识字段的值是互不相同的,但是,这并不禁止一个标识字段的标识数字之间存在间隔。例如,你永远不要试图利用一个表的标识字段来取出表中的前十个记录。这种操作会导致失败,比如说6号记录和7号记录根本不存在。 使用SQL事务管理器创建新表你可以使用前面几节所讲的方法创建新表。但是,使用事务管理器创建新表会更容易。这一节介绍如何使用这个程序创建新表。 从任务栏的SQL Sever程序组中选择SQL Enterprise Manager,启动该程序,你会看到窗口。浏览服务管理器窗口中的树形结构,选择名为Database的文件夹。
打开文件夹Database后,选择你在第三章中所建立的数据库。 注意: 如果你还没有创建自己的数据库,创建它。你决不要向master,tempdb或任何其它系统数据库中添加数据。 在选择了数据库之后,你会看到一个名为Group/users的文件夹和一个名为objects的文件夹。打开文件夹objects,你会看到许多文件夹,其中一个名为Tables。用右键单击文件夹Tables并选择New table,就会出现新窗口。 你可以使用Manager Tables窗口来创建一个新表。Manager Tables窗口有7个列:
Key,Column,Name,Datatype,Size,Nulls和Default。Manager Tables窗口中的每一行标明表中一个字段的信息。建立一个新表,你至少要输入一行信息。在名为Column Name的列下面键入mycolumn。下一步,选择Datatype列,并从下拉列表中选择CHAR。当你在这两个列中输入信息后, 你已经建立了一个只有一个字段的简单的表。单击保存按扭保存这个新表。当要求你输入新表的名字时,输入mytable并单击OK。现在这个表已经保存到了你的数据库中。 如果你打开服务管理器窗口中的文件夹Tables,你会看到你所建立的新表被列出。你可以双击该表的图表来编辑它,这时Manager Tables窗口会重新出现,你可以增加新的字段并重新保存。 用SQL事务管理器可以做的工作,你都可以用SQL语句来实现。但是,事务管理器使得建表过程变得更加简单。 向表中添加数据 下一章将讨论如何使用SQL向一个表中插入数据。但是,如果你需要向一个表中添加许多条记录,使用SQL语句输入数据是很不方便的。幸运的是,Microsoft SQL Sever带有一个称为Microsoft Query 的客户端应用程序,这个程序使得向表中添加数据变得容易了。 启动位于任务栏SQL Sever程序组中的Microsoft Query程序。从窗口顶部的菜单中选择File|New Query。这时会显示一个Select Data Source对话框。选择你的数据源名字并单击Use。 输入你的登录帐号和密码后,程序要求你选择一个表和一个数据库。选择你在上一节中所建立的表(mytable ),单击按钮Add,然后单击按钮Close关闭该对话框。 在窗口的左上角会出现一个对话框,框中是取自表mytable的一列字段名。你可以双击任何一个字段,把它添加到主窗口中。如果你双击星号(*)字符,所有的字段都会被添加到主窗口中。 如果你的表中有记录,它们现在已经出现在主窗口的字段标题下面了。但是,因为你刚刚建立了这个表,表还是空的。要添加新记录,选择Records|Allow Editing,主窗口中就会出现一条新记录。输入一行数据完成这个记录,就向表中添加了一条新记录。 当你转到下一条新记录时,你向上一条记录中输入的值会自动被保存。如果你需要,你可以用Microsoft Query 向表中输入几百条记录。 删除和修改表 你应该在建立表之前仔细设计它们,因为你在改变一个已经存在的表时会受到很大的限制。例如,一旦已经建立了一个表,你就不能删除表中的字段或者改变字段的数据类型。在这种情况你所能做的是删除这个表,然后重头开始(参及中级SQL”中的“使用SQL创建记录和表”一节)。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -