数据库基本知识

创建数据表

 USE 数据库名 CREATE TABLE 表名 (列名 类型(大小) DEFAULT'默认值',

                                                         列名 类型(大小) DEFAULT'默认值',  

                                                         列名 类型(大小) DEFAULT'默认值',

                                                         ... ...);

数据字段类型

 1 一:Microsoft Access 数据类型
 2     Text            用于文本或文本与数字的组合。最多 255 个字符。   
 3     Memo            Memo 用于更大数量的文本。最多存储 65,536 个字符。  
 4     Byte            允许 0 到 255 的数字。                                      1 字节 
 5     Integer         允许介于 -32,768 到 32,767 之间的数字。                     2 字节 
 6     Long            允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字     4 字节 
 7     Single          单精度浮点。处理大多数小数。                                4 字节 
 8     Double          双精度浮点。处理大多数小数。                                8 字节 
 9     Currency        用于货币。支持 15 位的元,外加 4 位小数。                   8 字节 
10     AutoNumber      AutoNumber 字段自动为每条记录分配数字,通常从 1 开始。      4 字节 
11     Date/Time       用于日期和时间                                              8 字节 
12     Yes/No          逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。         1 比特 
13     Ole Object      可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects) 最多 1GB 
14     Hyperlink       包含指向其他文件的链接,包括网页。   
15     Lookup Wizard   允许你创建一个可从下列列表中进行选择的选项列表。            4 字节
16 
17 二:MySQL 数据类型
18     1: Text 类型:
19         CHAR(size)          保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 
20         VARCHAR(size)       保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。 
21         TINYTEXT            存放最大长度为 255 个字符的字符串。 
22         TEXT                存放最大长度为 65,535 个字符的字符串。 
23         BLOB                用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 
24         MEDIUMTEXT          存放最大长度为 16,777,215 个字符的字符串。 
25         MEDIUMBLOB          用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 
26         LONGTEXT            存放最大长度为 4,294,967,295 个字符的字符串。 
27         LONGBLOB            用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 
28         ENUM(x,y,z,etc.)    允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。
29         SET                 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 
30     2: Number 类型:
31         TINYINT(size)       -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 
32         SMALLINT(size)      -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 
33         MEDIUMINT(size)     -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 
34         INT(size)           -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
35         BIGINT(size)        -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 
36         FLOAT(size,d)       带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 
37         DOUBLE(size,d)      带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 
38         DECIMAL(size,d)     作为字符串存储的 DOUBLE 类型,允许固定的小数点。 
39     3: Date 类型:
40         DATE()          日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
41         DATETIME()      *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
42         TIMESTAMP()     *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
43         TIME()          时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'  
44         YEAR()          2 位或 4 位格式的年。 注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。
45          
46 三:SQL Server 数据类型
47     1: Character 字符串:
48         char(n)         固定长度的字符串。最多 8,000 个字符。  
49         varchar(n)      可变长度的字符串。最多 8,000 个字符。   
50         varchar(max)    可变长度的字符串。最多 1,073,741,824 个字符。   
51         text            可变长度的字符串。最多 2GB 字符数据。   
52     2: Unicode 字符串:
53         nchar(n)        固定长度的 Unicode 数据。最多 4,000 个字符。   
54         nvarchar(n)     可变长度的 Unicode 数据。最多 4,000 个字符。   
55         nvarchar(max)   可变长度的 Unicode 数据。最多 536,870,912 个字符。   
56         ntext           可变长度的 Unicode 数据。最多 2GB 字符数据。 
57     3: Binary 类型:
58         bit             允许 0、1 或 NULL   
59         binary(n)       固定长度的二进制数据。最多 8,000 字节。   
60         varbinary(n)    可变长度的二进制数据。最多 8,000 字节。   
61         varbinary(max)  可变长度的二进制数据。最多 2GB 字节。   
62         image           可变长度的二进制数据。最多 2GB。 
63     4: Number 类型:
64         tinyint       1 字节  允许从 0 到 255 的所有数字。  
65         smallint      2 字节  允许从 -32,768 到 32,767 的所有数字。  
66         int           4 字节  允许从 -2,147,483,648 到 2,147,483,647 的所有数字。  
67         bigint        8 字节  允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节 
68         decimal(p,s)  5-17 字节     固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。
69         numeric(p,s)  5-17 字节     固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。
70         smallmoney    4 字节        介于 -214,748.3648 和 214,748.3647 之间的货币数据。  
71         money         8 字节        介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。  
72         float(n)      4 或 8 字节   从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。  
73         real          4 字节        从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。  
74     5: Date 类型:
75         datetime        8 字节      从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 
76         datetime2       6-8 字节    1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。  
77         smalldatetime   4 字节      从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 
78         date            3 字节。    从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。  
79         time            3-5 字节    仅存储时间。精度为 100 纳秒。 
80         datetimeoffset  8-10 字节   datetime2 相同,外加时区偏移。  
81         timestamp                   存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。  
View Code

MySql基本语法

http://wenku.baidu.com/link?url=vj8p732Hk2M2dP4747M7euG7HOyCNYJUQ61gnUw32t6oPG7O-1nPEuf0XGBaFHfQU2CGSYbneYx78xIsuMUCX8vvIztPCpZ8MuBvQgVVI4e

外键

  1 SQL的主键和外键的作用:
  2 
  3    外键取值规则:空值或参照的主键值。
  4 
  5 (1)插入非空值时,如果主键表中没有这个值,则不能插入。
  6 
  7 (2)更新时,不能改为主键表中没有的值。
  8 
  9 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
 10 
 11 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。
 12 
 13 简而言之,SQL的主键和外键就是起约束作用。
 14 
 15 
 16 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
 17 
 18 比如:
 19 
 20 学生表(学号,姓名,性别,班级)
 21 
 22     其中每个学生的学号是唯一的,学号就是一个主键;
 23 
 24 课程表(课程编号,课程名,学分)
 25 
 26     其中课程编号是唯一的,课程编号就是一个主键;
 27 
 28 成绩表(学号,课程号,成绩)
 29 
 30     成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。
 31 
 32 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。
 33 
 34  
 35 
 36 定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
 37 
 38 一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
 39 
 40 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
 41  
 42 二、主键、外键和索引的区别
 43 定义:
 44 
 45  主键--唯一标识一条记录,不能有重复的,不允许为空
 46 
 47  外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
 48 
 49  索引--该字段没有重复值,但可以有一个空值
 50 
 51 作用:
 52 
 53  主键--用来保证数据完整性
 54 
 55  外键--用来和其他表建立联系用的
 56 
 57  索引--是提高查询排序的速度
 58 
 59 个数:
 60 
 61  主键--主键只能有一个
 62 
 63  外键--一个表可以有多个外键
 64 
 65  索引--一个表可以有多个唯一索引
 66 
 67 
 68 创建SQL的主键和外键约束的方法:
 69 
 70 create table Student --建表格式:create table 自定义的表名
 71 
 72 ( --字段名一般为有一定意义的英文
 73 
 74 StudentName nvarchar(15), -- 格式:字段名类型()括号里面的是允许输入的长度
 75 
 76 StudentAge int, --int型的后面不需要接长度
 77 
 78 StudentSex nvarchar(2) --最后一个字段后面不要逗号
 79 
 80 )
 81 
 82 --在创建表时就可以对字段加上约束:
 83 
 84 create table Student
 85 
 86 (
 87 
 88 StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)
 89 
 90 StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空
 91 
 92 StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)
 93 
 94 StudentAge int DEFAULT ((0)), --加默认值约束
 95 
 96 StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式)
 97 
 98 )
 99 
100 --如果在表创建好了以后再加约束,则格式分别为:
101 
102 -- 主键:
103 
104 alter table 表名
105 
106 add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名
107 
108 primary key (字段名) --字段名同上
109 
110 --唯一约束:
111 
112 alter table 表名
113 
114 add constraint UQ_字段名
115 
116 unique (字段名)
117 
118 --外键约束:
119 
120 alter table 表名
121 
122 add constraint FK_字段名--"FK"为外键的缩写
123 
124 foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'
125 
126 alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)
127 
128 alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)
129 
130 alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)
131 
132 ON UPDATE CASCADE ON DELETE CASCADE
133 
134 级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。
135 
136 --检查约束:
137 
138 alter table 表名
139 
140 add constraint CK_字段名
141 
142 check (条件表达式) --条件表达式中的条件用关系运算符连接
143 
144 --默认值约束:
145 
146 alter table 表名
147 
148 add constraint DF_字段名
149 
150 default '默认值' for 字段名--其中的'默认值'为你想要默认的值,注意'for'
151 
152 --删除创建的约束:
153 
154 alter table 表名
155 
156 drop constraint 约束名--约束名为你前面创建的如:PK_字段这样的约束名
157 
158 --注意:如果约束是在创建表的时候创建的,则不能用命令删除
159 
160 --只能在'企业管理器'里面删除
161 
162  
163 
164 -- 获取SqlServer中表结构
165 
166 SELECT syscolumns.name,systypes.name,syscolumns.isnullable,
167 
168 syscolumns.length
169 
170 FROM syscolumns,systypes
171 
172 WHERE syscolumns.xusertype = systypes.xusertype
173 
174 AND syscolumns.id = OBJECT_ID('Student')
175 
176  
177 
178 -- 单独查询表递增字段
179 
180 SELECT [name] FROM syscolumns WHERE
181 
182 id = OBJECT_ID(N'Student') AND COLUMNPROPERTY(id,name,'IsIdentity')=1
183 
184  
185 
186 -- 获取表主外键约束
187 
188 EXEC sp_helpconstraint 'StuResults'
189 
190 
191 -- 查询表主键外键信息
192 
193 SELECT sysobjects.id objectId,OBJECT_NAME(sysobjects.parent_obj) tableName,
194 
195 sysobjects.name constraintName, sysobjects.xtype AS constraintType,
196 
197 syscolumns.name AS columnName
198 
199 FROM sysobjects INNER JOIN sysconstraints
200 
201 ON sysobjects.xtype in('C', 'F', 'PK', 'UQ', 'D')
202 
203 AND sysobjects.id = sysconstraints.constid
204 
205 LEFT OUTER JOIN syscolumns ON sysconstraints.id = syscolumns.id
206 
207 WHERE OBJECT_NAME(sysobjects.parent_obj)='StuResults'
View Code

 

数据库重复删除数据

 

有两个意义上的重复记录,

一是完全重复的记录,也即所有字段均重复的记录,

二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

这样就可以得到无重复记录的结果集。

然后通过临时表实现对数据的维护。

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

#Tmp为什么系统参数,tableName为要操作的表名。

2、第二类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

  假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)。

 删除表:delete、drop、truncate

看:http://www.cr173.com/html/40708_1.html

来自:

http://blog.csdn.net/qingqinglanghua/article/details/5051563

http://wenku.baidu.com/link?url=vj8p732Hk2M2dP4747M7euG7HOyCNYJUQ61gnUw32t6oPG7O-1nPEuf0XGBaFHfQU2CGSYbneYx78xIsuMUCX8vvIztPCpZ8MuBvQgVVI4e

http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html

http://www.cnblogs.com/EleMMent/p/3625183.html

posted on 2016-09-11 17:04  羽溪夜  阅读(199)  评论(0)    收藏  举报

导航