数据库基本操作--增删改查
一、增:新增数据库、表、索引:
创建数据库
这样做就可以创建一个数据库:
- CREATE DATABASE 数据库名称
创建一个表
这样做就可以创建一个数据库中的表:
- CREATE TABLE 表名称
- (
- 列名称1 数据类型,
- 列名称2 数据类型,
- .......
- )
实例
本例演示如何创建名为 “Person” 的表,有四个列。列名是:”LastName”、”FirstName”、”Address” 以及 “Age”:
- CREATE TABLE Person
- (
- LastName varchar,
- FirstName varchar,
- Address varchar,
- Age int
- )
这个例子演示如何为某些列定义长度的最大值:
- CREATE TABLE Person
- (
- LastName varchar(30),
- FirstName varchar,
- Address varchar,
- Age int(3)
- )
数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:
数据类型 | 描述 |
---|---|
|
仅容纳整数。在括号内规定数字的最大位数。 |
|
容纳带有小数的数字。 “size” 规定数字的最大位数。”d” 规定小数点右侧的最大位数。 |
char(size) |
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) |
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
创建索引
索引被创建于已有的表中,它可使对行的定位更快速更有效。可以在表格的一个或者多个列上创建索引,每个索引都会被起个名字。用户无法看到索引,它们只能被用来加速查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常用于搜索的列上面创建索引。
唯一的索引 (Unique Index)
在表格上面创建某个一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
- CREATE UNIQUE INDEX 索引名称
- ON 表名称 (列名称)
“列名称” 规定你需要索引的列。
简单的索引
在表上创建一个简单的索引。当我们省略关键词 UNIQUE 时,就可以使用重复的值。
- CREATE INDEX 索引名称
- ON 表名称 (列名称)
“列名称” 规定你需要索引的列。
实例
本例会创建一个简单的索引,名为 “PersonIndex”,在 Person 表的 LastName 字段:
- CREATE INDEX PersonIndex
- ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
- CREATE INDEX PersonIndex
- ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
- CREATE INDEX PersonIndex
- ON Person (LastName, FirstName)
二、删、改:table的修改和删除
2、修改基本表
alert table <表名>
[add <新列名> <数据类型> [完整性约束]]
[drop <完整性约束名>]
[modify <列名><数据类型>];
add: 用于向表中增加新列及新列相关的完整性约束条件,新的列增加成功后不带任何数据
drop:用于删除指定的完整性约束条件
modify:用于修改原来的列定义,包括修改列名和数据类型,列数据类型修改后可能会丢失原有的数据
3、SQL中没有提供删除属性列的功能,若需要删除列,必须间接通过select语句来实现,将需要的列的内容复制到另一个表中,再删除原表,然后将新表的名字命名为原表名
4、删除基本表
drop table <表名>
- 5、删除索引 drop index <索引名>;
三、改、删:数据更新
1、数据插入
insert into <表名> [<列名>[,<列名>]….) values (value1, value2,…);
如果表中的每一列均有数据插入,则可不用指定任何表名
如:
- .插入职工数据:EmpTable(职工表)
insert into EmpTable(Name,Age,Duty,Salary) values(\'王明\',35,\'外贸总监\',12500)
insert into EmpTable(Name,Age,Duty,Salary) values(\'李勇\',24,\'外贸员\',6500)
insert into EmpTable(Name,Age,Duty,Salary) values(\'刘星\',25,\'外贸员\',7500)
insert into EmpTable(Name,Age,Duty,Salary) values(\'周平\',21,\'外贸员\',3500)
insert into EmpTable(Name,Age,Duty,Salary) values(\'杨兰\',20,\'外贸员\',3000)
2、数据修改
update <表名> set <列名>=新值 where <条件表达式>
3、数据删除
删除指的是删除数据库中的一个记录,而不是删除某一列
delete from <表名> where <条件表达式>
- 四、数据查询
select [distinct | distinctRow | all]
列名[,列名][,….]
[into {outfile | dumpfile} \’文件名\’ export_options]
[from 表名]
[where 查询条件]
[group by 列名[, ….]]
[having 条件定义]
[order by {无符号整数|列名|公式}[asc | desc],…]
[limit [偏移量,] 行数]
[procedure 过程名称]
注:select语句中所有使用的关键词必须精确的以上面的顺序给出
如果以降序排列,则在order by中加入关键字desc,升序则加入关键字asc,默认是升序
having子名能引用任何列或在查询中命名的别名,它最后运用,就在项目被送到客户之前是,没有变化。需要注意,不要对应该在where子句中的项目使用having.
limit子名被用来限制select返回的行数,如果给定1个参数,它指出返回行的最大数目;如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目,初始行的偏移量是0
select …. into outfile \’文件名\’ 格式的select语句将选择的行写入一个文件,文件在服务器上被创建,并且不能是已经存在的,且在服务器主机上还必须有file权限以使用这种select
distinct,使用了这个关键字后,再执行select语句的结果集中,如果有重复的值,则会在结果集中去掉重复的值而只保留一个值。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
INNER JOIN 语法:
INNER JOIN 连接两个数据表的用法:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号
INNER JOIN 连接三个数据表的用法:
SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号
INNER JOIN 连接四个数据表的用法:
SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN
表4 ON Member.字段号=表4.字段号
SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3
ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON
Member.字段号=表5.字段号