数据库的数额增加和删除改SQL语句,如何创制索引

目录是身无寸铁在数额表上的,由此要求首先创造一张数据表,创设SQL 语句
如下:
MYSQL、MSSQLServer、DB2数据库:
CREATE TABLE T_Person (FNumber VARCHAR(20),
FName VARCHAR(20),FAge INT)
Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),
FName VARCHAR2(20),FAge NUMBER (10))
请在不相同的数据库系统中运维相应的SQL
语句。T_Person为记录人士音信的数据表,
里面字段FNumber 为人口的数码,FName 为人口姓名,FAge为人口年纪。
目录是本着字段的,因而创设索引索引的时候要求钦点要在特别字段上创立索引,还可
以为四个字段创造3个索引,那样仍是能够钦命索引相关的字段列表。创造索引的SQL
语句
是CREATE INDEX,其语法如下:
CREATE INDEX 索引名ON 表名(字段1, 字段2,……字段n)
其中【索引名】为被成立的目录的称号,那一个名称必须是绝无仅有的;【表名】为要创设索
引的表;【字段1,
字段2,……字段n】为组合那几个目录的字段列表,允许一到多个。
下面的SQL语句在T_Person表的FName字段上创建索引,索引名字为idx_person_name:
CREATE INDEX idx_person_name ON T_Person(FName)
下面的SQL 语句在T_Person 表的FName 和FAge 字段上创办索引,索引名叫
idx_person_nameage:
CREATE INDEX idx_person_nameage ON T_Person(FName,FAge)
目录创造后是足以被剔除的,删除索引使用的言辞为DROP
INDEX。差别的数据库系
统的DROP INDEX 语法是例外的,上面分别介绍:
MYSQL中的DROP INDEX 语法如下:
DROP INDEX 索引名ON 表名
举个例子上边包车型地铁SQL语句用来删除刚才大家创造了三个目录:
DROP INDEX idx_person_name ON T_Person;
DROP INDEX idx_person_nameage ON T_Person;
MSSQLServer 中的DROP INDEX 语法如下:
DROP INDEX 表名.索引名
比方上面包车型地铁SQL语句用来删除刚才大家创建了五个目录:
DROP INDEX T_Person.idx_person_name;
DROP INDEX T_Person.idx_person_nameage;
Oracle和DB第22中学的DROP INDEX
语句不须要钦点表名,只要钦赐索引名就能够,语法如
下:
DROP INDEX 索引名
譬如上面包车型地铁SQL语句用来删除刚才大家创立了多少个目录:
DROP INDEX idx_person_name;
DROP INDEX idx_person_nameage;
到此地,索引相关的知识点就介绍完结了,请推行上面包车型地铁SQL
语句删除刚才创制的
T_Person表:
DROP TABLE T_Person;

目录是手无寸铁在数据表上的,由此须求首先创制一张数据表,创立SQL 语句
如下:
MYSQL、MSSQLServer、DB2数据库:
CREATE TABLE T_Person (FNumber VARCHAR(20),
FName VARCHAR(20),FAge INT)
Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),
FName VARCHAR2(20),FAge NUMBER (10))
请在不相同的数据库系统中运作相应的SQL
语句。T_Person为记录人士消息的数据表,
里面字段FNumber 为人口的号子,FName 为人口姓名,FAge为人口年龄。
目录是针对性字段的,由此创设索引索引的时候供给钦赐要在十一分字段上创办索引,还可
感觉多个字段成立1个索引,那样还能钦命索引相关的字段列表。制造索引的SQL
语句
是CREATE INDEX,其语法如下:
CREATE INDEX 索引名ON 表名(字段1, 字段2,……字段n)
个中【索引名】为被创设的目录的名目,那些名称必须是绝无仅有的;【表名】为要成立索
引的表;【字段一,
字段二,……字段n】为组合那一个目录的字段列表,允许一到四个。
下面的SQL语句在T_Person表的FName字段上创立索引,索引名称为idx_person_name:
CREATE INDEX idx_person_name ON T_Person(FName)
下面的SQL 语句在T_Person 表的FName 和FAge 字段上创建索引,索引名叫
idx_person_nameage:
CREATE INDEX idx_person_nameage ON T_Person(FName,FAge)
目录创设后是足以被删去的,删除索引使用的言语为DROP
INDEX。不一致的数据库系
统的DROP INDEX 语法是不一致的,下边分别介绍:
MYSQL中的DROP INDEX 语法如下:
DROP INDEX 索引名ON 表名
譬如说上面包车型地铁SQL语句用来删除刚才大家创建了七个目录:
DROP INDEX idx_person_name ON T_数据库的数额增加和删除改SQL语句,如何创制索引。Person;
DROP INDEX idx_person_nameage ON T_Person;
MSSQLServer 中的DROP INDEX 语法如下:
DROP INDEX 表名.索引名
譬如说下边包车型大巴SQL语句用来删除刚才我们创制了三个目录:
DROP INDEX T_Person.idx_person_name;
DROP INDEX T_Person.idx_person_nameage;
Oracle和DB第22中学的DROP INDEX
语句不须要钦赐表名,只要钦赐索引名就能够,语法如
下:
DROP INDEX 索引名
比如上面的SQL语句用来删除刚才我们创立了三个目录:
DROP INDEX idx_person_name;
DROP INDEX idx_person_nameage;
到那里,索引相关的知识点就介绍实现了,请施行上边包车型客车SQL
语句删除刚才创造的
T_Person表:
DROP TABLE T_Person;

*******************MYSQL:

机动拉长字段

CREATE TABLE T_Person (FName VARCHAR(20),FAgeINT,FRemark
VARCHAR(20),PRIMARYKEY (FName));

在准备数据库的时候,有时必要表的有些字段是自动增加的,最常使用机动增进字段的正是表的主键,使用机动拉长字段能够简化主键的浮动。分裂的DBMS中自行增加字段的落到实处机制也有分歧。

CREATE TABLE T_Debt (FNumber VARCHAR(20),FAmountDECIMAL(10,2) NOT
NULL,FPerson VARCHAR(20),PRIMARY KEY (FNumber),FOREIGN KEY (FPerson)
REFERENCES T_Person(FName)) ;

 

*************

MYSQL

一、数据的插入

INSERT INTO T_Person(FName,FAge,FRemark) VALUES(‘Tom’,18,’USA’)

INSERT INTO T_Person(FAge,FName) VALUES(22,’LXF’)>>FRemark的值为

INSERT INTO T_Person
VALUES(‘luren1′,二三,’China’)>>不点名插入的表列,将遵守定义表中字段顺序来插入

**非空约束对数据插入的熏陶

INSERT INTO T_Debt (FNumber, FPerson) VALUES (‘1’,
‘Jim’)>>执行此SQL会报错:’FAmount’不可能为空

**主键对数据插入的震慑

INSERT INTO T_Debt (FNumber,FAmount, FPerson) VALUES (‘一’,300,
‘吉米’)>>不可能在’FNumber’中插入重复键(如若FNumber中1度存在FNumber=壹的记录)

**外键对数据插入的熏陶

外键是指向另一个表中已有数据的自律,因别的键值必须是在对象表中存在的。借使插入的数目在目的表中不设有的话则会产生违反外键约束卓殊

INSERT INTO T_Debt (FNumber,FAmount, FPerson) VALUES (‘3’,100,
‘Jerry’)>>由于在T_Person
表中不存在FName字段等于“杰里”的数据行,所以会报出接近如下的错误消息:INSERT
语句与 FOREIGN KEY
约束”FK__T_Debt__FPerson__一A14E3玖伍”争执。该顶牛发生于数据库“demo”,表”dbo.T_Person”,
column ‘FName’。

MYSQL中设定3个字段为自发性增加字段分外轻易,只要在表定义中折定字段为AUTO_INCREMENT就可以。比如下边包车型客车SQL语句成立Person表,当中主键Fid为自行

2、数据的革新

UPDATE T_Person

SET FRemark = ‘SuperMan’ >>

将表T_Person 中有所人士的FREMAEscortK字段值更新为“SuperMan”

UPDATE T_Person

SET FRemark = ‘Sonic’,FAge=25 >>将有所人士的FRemark
字段更新为“Sonic”,并且将年龄更新为二五

UPDATE T_Person

SET FAge = 12

WHERE FNAME=’汤姆’>>将汤姆的岁数修改为拾1虚岁

UPDATE T_Person

SET FRemark = ‘BlaBla’

WHERE FAge =25>>将富有年龄为二五的人口的备考消息修改为“BlaBla”

UPDATE T_Person

SET FAge = 22

WHERE FName =’jim’ O凯雷德FName=’LXF’>>将FNAME等于’吉姆’或然’LXF’的行的FAge字段更新为2二

**非空约束对数据更新的熏陶

UPDATE T_Debt set FAmount = NULL WHERE
FPerson=’汤姆’>>实行此SQL会报错,FAmount无法为空

**主键对数码更新的熏陶

UPDATE T_Debt set FNumber = ‘二’ WHERE
FPerson=’汤姆’>>由于表中已经存在一条FNumber 字段为2的笔录,所以运维那句SQL
的时候会报出近似如下的错误新闻:不能在目标’dbo.T_Debt’ 中插入重复键。

**外键对数据更新的影响

UPDATE T_Debt set FPerson = ‘Merry’ WHERE
FNumber=’1′>>由于在T_Person表中不存在FName
字段等于“Merry”的数量行,所以会数据库系统会报出类似如下的错误音讯:

UPDATE 语句与FOREIGN KEY
约束”FK__T_Debt__FPerson__一A1四E395″顶牛。该争辩时有发生于数据库”demo”,

表”dbo.T_Person”, column ‘FName’

抓好字段:

三、数据的删减

997755.com澳门葡京 ,亟需注意的就是借使被剔除的数据行是有个别外键关联关系中的被引述数据来讲,则开始展览删除的时候会倒闭,倘使要删减成功则必须首先删除引用者才能够。

DELETE FROM T_Debt;

DELETE FROM T_Person;

由于T_Debt表中FPerson字段是指向表T_Person
的FName字段的外键,所以必须首先删除T_Debt表中的数据后才具删除T_Person中的数据。DELETE语句仅仅是剔除表中的多少行,而表的协会还设有

DROP TABLE T_Debt;

DROP TABLE T_Person;

DROP TABLE语句则不仅将表中的数目行全体删除,而且还将表的协会也删除

DELETE FROM T_Person WHERE FAge > 20 or FRemark =
‘马尔斯’;>>删除年龄超越20岁依旧来自Saturn(马尔斯)的人士

以上摘自《程序猿的SQL 金典》

CREATE TABLE T_Person

(

FId INT PRIMARY KEY AUTO_INCREMENT,

FName VARCHAR(20),

FAge INT

);

插入数据:语句未有为Fld字段设定任何值,因为DBMS会活动为Fld字段设定值。

INSERT INTO T_Person(FName,FAge)VALUES(‘Tom’,18);

INSERT INTO T_Person(FName,FAge)VALUES(‘Jim’,81);

INSERT INTO T_Person(FName,FAge)VALUES(‘Kerry’,33);

 

SQLServer

SQLServer中设定三个字段为活动拉长字段只要在表定义中钦命字段为IDENTITY就可以,格式为:IDENTITY(startvalue,step),在那之中的startvalue参数值为早先数字,step参数值为宽度,即每一遍活动增加时扩充的值。

CREATE TABLE T_Person

(

FId INT PRIMARY KEY IDENTITY(100,3),              //100,103,106…

FName VARCHAR(20),

FAge INT

);

 

Oracle

Oracle中不像MYSQL和SQLServer中那么钦命2个名列自动增加列的不二等秘书技,不过在Oracle中能够通过SEQUENCE种类来完毕机关增进字段。在Oracle中SEQUENCE被喻为体系,每回取的时候它会自动扩充,一般用在需求按系列号排序的地点。

 

在利用SEQUENCE前须要首先定义一个SEQUENCE,定义SEQUENCE的语法如下:

CREATE SEQUENCE seq_PersonId

INCREMENT BY 1

START WITH 1;

其中seq_PersonId为种类的名字,每个连串都不能够不有唯一的名字,STARTWITH
一为发端数字,INCREMENT BY 1参数值为宽度,即每一趟活动增加时扩展的值。

 

若果定义了SEQUENCE,就能够用CU哈弗GL450VAL来赢得SEQUENCE的脚下值,也足以由此NEX电视AL来充实SEQUENCE,然后回到新的SEQUENCE值。比方:

sequence_name.CURRVAL

sequence_name.NEXTVAL

 

设若SEQUENCE不须求的话就足以将其除去:DROP SEQUENCEseq_PersonId

 

例子:

CREATE TABLE T_Person

(

FId NUMBER (10) PRIMARY KEY,

FName VARCHAR2(20),

FAge NUMBER (10)

);

 

INSERT INTOT_Person(FId,FName,FAge)
VALUES(seq_PersonId.NEXTVAL,’Tom’,18);

INSERT INTO
T_Person(FId,FName,FAge)VALUES(seq_PersonId.NEXTVAL,’Jim’,81);

 

选拔SEQUENCE完成自动增进字段的弱项是每一遍向表中插入记录的时候都要显式的到SEQUENCE中获得新的字段值,要是忘记了就会促成错误。为了减轻这一个难点,大家得以运用触发器来解决,创造三个T
Person表上的触发器:

CREATE OR REPLACE TRIGGER trigger_personIdAutoInc

  BEFORE INSERT ON T_Person

  FOR EACH ROW

DECLARE

BEGIN

   SELECT seq_PersonId.NEXTVAL INTO:NEW.FID FROM DUAL;

END trigger_personIdAutoInc;

 

INSERT INTO T_Person(FAge) VALUES(‘Wow’,22);

INSERT INTO T_Person(FName,FAge) VALUES(‘Herry’,28);

 

DB2

DB第22中学贯彻自动增加字段有三种办法:定义带有IDENTITY属性的列,使用SEQUENCE对象。

 

概念带有IDENTITY属性的列:

CREATE TABLE T_Person

(

FId INT PRIMARY KEY NOT NULL

GENERATED ALWAYS

      AS IDENTITY

      (STARTWITH 1

      INCREMENT BY 1

         ),

FName VARCHAR(20),

FAge INT

);

 

INSERT INTO T_Person(FName,FAge)VALUES(‘Tom’,18);

INSERT INTO T_Person(FName,FAge)VALUES(‘Jim’,81);

 

动用SEQUENCE对象:DB第22中学的SEQUENCE和Oracle中的SEQUENCE一样,只是概念格局和采用方法略有差异。

 

创建SEQUENCE:

CREATE SEQUENCE seq_PersonId AS INT INCREMENT BY 1 START WITH 1;

 

INSERT INTOT_Person(FId,FName,FAge) VALUES(NEXTVALUE FOR
seq_PersonId,’Kerry’,33);

 

注:也足以参考Oracle达成触发器来机关插入数据。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website