SQL语句中的表操作

  数据库中主要的部分是不同的表,在SQL语句中提供了一些对于表的操作。我们讨论的操作都是在SQL SERVICE中的

 一、新建表:

  新建表的语法格式为:CREATE TABLE 表名(列名 数据类型[完整性约束条件], 列名 数据类型 [完整性约束条件],...);其中完整性约束条件可以添加也可以不加,如果不加也可以在表定义完成后另外在添加,比如我们现在需要创建一个学生表,可以使用这样的代码来创建:

create table student(Sno char(10) PRIMARY KEY,
    Sname char(20),
    SSex char(2) UNIQUE,
    Sage int,
    Sdept char(20)
    );

PRIMARY KEY表示将Sno做为这个表的主码;

另外除了这种形式的约束条件,还有一种表级约束条件,表级约束条件一般都放在表的所有属性之后定义,当某个属性是外码或者某个主属性由多个属性组成时,外码定义的格式一般为:FOREIGN KEY (作为外码的属性) 所引用的表 (被引用的属性名);外码的例子如下:

REATE TABLE Course(Cno char(4) PRIMARY KEY,
    Cname CHAR(20),
    Cpno char(4),--注意做外码时数据类型要与被引用的数据类型相同
    Ccredit smallint,
    FOREIGN KEY (Cpno) REFERENCES Course(Cno)--Cpno引用本表中的Cno);

当有主码中包含多个属性时,主码的定义格式为:PRIMARY KEY (属性列,属性列,...)

比如现在我们有一个成绩表,表中课程号和学号为主码,并且学号引用学生表中的学号,课程号引用的是课程表中的课程号:

CREATE TABLE SC(
    Sno char(10),
    Cno char(4),
    Grade smallint,
    PRIMARY KEY(Sno, Cno),--表中有多个主码时必须使用表级约束条件
    FOREIGN KEY (Sno) REFERENCES student(Sno),
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
);

其中每个属性的取值范围称作域,我们可以根据实际情况定义出属性的域,根据域选择合适的数据类型,下面的表展示了主要的几种数据类型:

数据类型 含义
CHAR(n) 长度为n的字符串,所占内存固定,但是只显示用户存储的字符个数
VARCHAR(n) 最大长度为n的字符串,内存根据用户定义的字符串的长度来确定
INT 整型
SMALLINT 短整型
NUMBER(p, d) 小数,总位数为p(包括小数部分但是不包括小数点),小数位数为d
REAL   浮点数,取决于机器的浮点数精度
Double Precision 双进度浮点数,位数也取决于机器位数
FLOAT(n) 浮点数进度至少为n
DATA 日期,包含年、月、日。格式为YYYY-MM-DD
TIME 时间,包含时、分、秒。格式为HH:MM:SS

二、表定义的修改:

当我们定义好了一个表后,可能根据具体的需求变化需要更改表的定义,SQL同样提供了相关的操作,SQL一般用ALTER TABLE 语句修改,其格式如下:

ALTER TABLE 表名

[ADD 新列名 数据类型 [完整性约束条件]] //新增列

[DROP <完整性约束条件>]//删除某个完整性约束条件

[ALTER COLUMN <新列名><数据类型>]修改列

[DROP COLUMN <列名>]//删除某一属性

这些语句只能修改表结构,不能修改表中的数据,比如学号为00001,当我们将学号的一列的列名改为学生证号,这个00001不会改变。

下面是几个小例子:

ALTER TABLE student add Sentrance DATE;--向学生表中添加一个入学时间的选项

ALTER TABLE Course ADD UNIQUE(Cname);--向课程表中添加一个完整性约束条件
ALTER TABLE student DROP COLUMN Sentrance;--删除学生表中的入学时间选项

三、删除表:

删除表用到的语句为DROP TABLE 表名[RESTRICT | CASCADE]

其中选用RESTRICT选项时,删除表是有条件的,被删除的表不能被其他表的约束引用(CHECK FOREIGN KEY等约束),不能有视图、索引、触发器、存储过程

选用CASCADE时不关心这些限制条件,会将这些一并删除。

时间: 2024-11-03 22:18:43

SQL语句中的表操作的相关文章

SQL语句中----删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test 2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test   3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where test='test' 二.drop,tru

sql语句中---删除表结构drop,truncate和delete的异同点

参考别人总结,此内容仅供自己学习 一.sql中的语法 1.drop table 表名称                                      eg:drop table dbo.Sys_Test 2.truncate table 表名称                                eg:truncate table dbo.Sys_Test 3.delete from 表名称 where  列名称=值       eg:delete from dbo.Sys

sql语句中3表删除和3表查询

好久没来咱们博客园了,主要近期在忙一些七七八八的杂事,包括打羽毛球比赛的准备和自己在学jqgrid的迷茫.先不扯这些没用的了,希望大家能记得小弟,小弟在此谢过大家了. 回归正题:(以下的sql是本人在用yii框架开发项目时写的,希望对大家有些帮助) 首先是多表查询,为了简化我先贴出自己的代码,在贴出解释代码. select a.*, b.*, c.* from rlzy_payfeeinf a inner join rlzy_personinfo b on a.bid=b.bid join rl

sql语句中----删除表数据的&quot;三兄弟&quot;

说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大------drop 出没场合:drop table  tb --tb表示数据表的名字,下同 绝招:删除内容和定义,释放空间.简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表, 例如:一个班就是一个表,学生就是表中的数据,学生的职务就是定义 drop table class,就是把整

正则表达式匹配SQL语句中的所有表名

折磨了几个小时,写出匹配SQL语句中的所有表名,备忘记录 1 \*\s+from\s+[\w\[\]]*\.?[\w\[\]]*\.?\[?(\b\w+)\]?[\r\n\s]* 支持各种表达式 SELECT * FROM Config SELECT * FROM [dbo].IMEIUser SELECT * FROM dbo.LotteryLog SELECT * FROM [GreenPrize]SELECT * FROM [dbo].[Config]SELECT * FROM dbo.[

sql的基础语句-select语句中出现的操作符号

2. select语句中出现的操作符号 2.1 合并操作符select a.ename||' '||to_char(sal) from emp a; 2.2 消除重复的行 select distinct deptno from emp; 2.3 空格.空串.null的区别 select ascii(' '),ascii(null),ascii('') from dual; 区别:  从显式上看,空串跟null在数据库中存储的值是一样的,但是NULL可以赋给任何数据类型,而空串只能赋给字符串类型

回顾sql语句中的各种连接

1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 下面是ANSI SQL-92标准 select * from    t_institution i inner join t_teller t on i.inst_no = t.inst_no where i.inst_no = "5801" 其中inner可以省略. 等价于早期的连接语法 select * from t_institution i, t_telle

SQL语句之 多表管理

SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做外键. 例如,现在有两个表: 学生表 - 学号,姓名,性别,所在班级号 班级表 - 班级号,班级人数 在学生表中,学号是主键:在班级表中,班级号是主键,而学生表中‘所在班级号’是非主键.所以,所在班级号对学生表来说是一个外键. 语句:CONSTRAINT student_class_fk FOREI

SQL语句中 NOT IN 子句的“正确打开方式”

在写SQL语句的时候,若where条件是判断用户不在某个集合当中,我们习惯使用 where 列名 not in (集合) 子句,然而,当集合中存在空值时,返回的结果永远为空.如下所示: Oracle 或 MySQL select 1 from dual where 1 not in(2, null) 返回0条结果. SQL Server select 1 where 1 not in(2, null) 返回0条结果. 显然在上面例子中的结果并非我们希望得到的结果.对于数据库管理系统 select