NOT NULL :限制列取值非空
DEFAULT:指定列的默认值
UNIQUE:限制列取值不能重复
CHECK:限制列的取值范围
PRIMARY KEY :指定本列为主码
FOREIGN KEY :定义本列为引用其他表的外码
FOR INSTANCES
1.创建表
CREATE TABLE student (
sno CHAR(7) PRIMARY KEY , //在列级完整性约束处定义主码约束
sname CHAR(10) NOT NULL ,
ssex CHAR(2) ,
sage TINYINT ,
sdept CHAR(20)
)
CREATE TABLE course(
cno CHAR(6) NOT NULL ,
cname CHAR(20) NOT NULL,
credit TINYINT,
semester TINYINT,
PRIMARY KEY(cno) //在表级完整性约束处定义主码约束
)
CREATE TABLE sc(
sno CHAR(7) NOT NULL,
cno CHAR(6) NOT NULL,
grade SAMLLINT,
PRIMARY KEY(sno,cno),
FOREIGN KEY(sno) REFERENCES student(sno),
FOREIGN KYE(cno) REFERENCES course(cno)
);
2. 删除表
删除test语句
DROP TABLE test
3.为L1的student 表添加“专业”列,此列的定义为:spec CHAR(10),允许为空
ALTER TABLE student
ADD spec CHAR(10) NULL
4.将新添加的“专业”列的类型改为CHAR(20)
原书:
ALTER TABLE student
ALTER COLUMN spec CHAR(20)
修正:
ALTER TABLE student
MODIFY COLUMN spec CHAR(20)
5.删除新添加的“专业”列
ALTER TABLE student
DROP COLUMN spec
L6.主键约束
雇员表(employees)
雇员编号(enumber):普通编码定长字符型,长度为7
雇员名(ename):普通编码定长字符型,长度为7
工作编号(worknumber):普通编码定长字符型,长度为8
工资(salary):整型
电话号码(phonecode):普通编码定长字符型,长度为8,非空
工作表(work)
工作编号(worknumber):普通编码定长字符型,长度为8,非空
最低工资(minsalary):整型
最高工资(maxsalary):整型
对雇员表和工作表分别添加主码约束
ALTER TABLE employees
ADD CONSTRAINT PK_EMP
PRIMARY KEY (enumber)
ALTER TABLE work
ADD CONSTRAINT PK_JOB
PRIMARY KEY(worknumber)
7.为雇员表的“电话号码”列添加UNIQUE约束
ALTER TABLE employees
ADD CONSTRAINT UK_SID
UNIQUE (phonecode)
8.为雇员表的工作编号添加外码引用约束,此列引用工作表的工作编号列
ALTER TABLE employees
ADD CONSTRAINT FK_job_id
FOREIGN KYE (worknumber) REFERENCES work (worknumber)
9.定义雇员表的工资的默认值为1000.
原书:
ALTER TABLE employees
ADD CONSTRAINT DF_SALARY
DEFAULT 1000 FOR salary
修正:
ALTER TABLE employees
ALTER salary SET DEFAULT 1000
10.CHECK 约束
在雇员表中,添加限制雇员的工资必须大于等于1000的约束
ALTER TABLE employees
ADD CONSTRAINT CHK_Salary
CHECK (salary >= 1000)
11.添加限制工作表的最低工资小于等于最高工资的约束
ALTER TABLE work
ADD CONSTRAINT CHK_job_salary
CHECK (minsalary <= massalary)
sum:
CREATE TABLE work(
worknumber CHAR(8) PRIMARY KEY,
minsalary int,
maxsalary int,
CHECK(minsalary <= maxsalary)
)
CREATE TABLE employees(
enumber CHAR(7) PRIMARY KEY,
ename CHAR(10),
worknumber CHAR(8) REFERENCES work (worknumber),
salary INT DEFAULT 1000 CHECK (salary >=1000),
phonecode CHAR(8) NOT NULL UNIQUE
)
test/TEST
1.TINYINT 数据类型定义的数据的取值范围是多少?
0~255的正整数
2.日期时间类型中的日期和时间的输入格式是什么?
日期是DATE 类型,时间是TIME 类型
3.SMALLDATETIME 类型精确到哪个时间单位?
精确到分钟(datetime 精确到百分之三秒即3.33ms)
4.定点小数类型numeric中的p和q 的含义分别是什么?
p为精度,指定可以存储的十进制数字的最大个数(即整数部分加小数部分的合计位数)
q为小数位数,指定小数点右边可以存储的十进制数字的最大个数,默认值为0
5.CHAR(10)和NCHAR(10)的区别是什么?它们各能存放多少个字符?占用多少空间?
CHAR 普通字符编码,长度取值范围1~8000,占用10个字节空间
NCHAR统一字符编码,采用双字节,长度取值范围1~4000,占用2*10=20个字节空间
6.CHAR(n)和VARCHAR(n)的区别是什么?其中n的含义是什么?各占用多少空间?
VARCHAR为可变长字符串类型,而CHAR不可变,VARCHAR可尽量节省空间
n的含义:表示字符串的最大长度
分别占用n个字节空间(固定)和占用n个字节空间(最多)
7.数据完整性的含义
指数据的正确性和相容性
数据的完整性是为了防止数据库中存在不符合应用语义的数据,为了维护数据的完整性,数据库管理系统提供了一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据之上的语义约束条件就是数据完整性约束条件。
8.在对数据进行什么操作时,系统检查DEFAULT约束?在进行什么操作时,检查CHECK约束?
只有在向表插入数据时系统才检查DEFAULT约束
在插入和进行更新数据时检查CHECK约束,CHECK约束用于限制列的取值在指定范围内,使数据库中存放的值都是有意义的
9.UNIQUE约束的作用是什么?
保证数据取值的不重复性
10.定义表,同时定义数据的完整性约束
图书表,book
书号,bnum,统一字符编码定长类型,长度为6,主码
书名,bname,统一字符编码可变长类型,长度为30,非空,
第一作者,writer,普通编码定长字符类型,长度为10,非空,
出版日期,pubday,小日期时间型
价格,price,定点小数,小数部分1位,整数部分3位
书店表,store
书店编号,bstorenum,统一字符编码定长类型,长度为6,pk
店名,sname,统一字符编码可变长类型,长度为30,非空,
电话,phonecode,普通编码定长字符类型,8位长,每一位的取值均是0~9的数字
地址,address,普通编码可变长字符类型,40位长
邮政编码,postalcode,普通编码定长字符类型,长度为6
图书销售表(sale)
书号,bnum,统一字符编码定长类型,长度为6,非空,
书店编号,bstorenum,统一字符编码定长类型,长度为6,非空,
销售日期,saleday,小日期时间型,PK
销售数量,salenum:微整型,大于等于1
pk:书店,书店编号,销售日期
其中,书号引用 图书表 的 书号 的外码
书店编号 为引用 书店表 书店编号 的外码
CREATE TABLE book(
-> bnum CHAR(6) PRIMARY KEY,
-> bname VARCHAR(30) NOT NULL,
-> writer CHAR(10) NOT NULL,
-> pubday DATETIME,
-> price NUMERIC(4,1)
-> );
mysql> CREATE TABLE store(
-> bstorenum CHAR(6) PRIMARY KEY,
-> sname VARCHAR(30) NOT NULL,
-> phonecode CHAR(8) CHECK(0<=phonecode<=9),
-> address VARCHAR(40),
-> postalcode CHAR(6)
-> );
mysql> CREATE TABLE sale(
-> bnum CHAR(6) NOT NULL,
-> bstorenum CHAR(6) NOT NULL,
-> saleday DATETIME PRIMARY KEY,
-> salenum SMALLINT CHECK(salenum>=1)
-> );
mysql> ALTER TABLE sale
-> ADD CONSTRAINT FK_bnum
-> FOREIGN KEY (bnum) REFERENCES book (bnum);
mysql> ALTER TABLE sale
-> ADD CONSTRAINT FK_bsnum
-> FOREIGN KEY (bstorenum) REFERENCES store (bstorenum);
11.为图书表增加“印刷数量,pushnum”,类型为整数,同时添加约束,要求此列的取值要求大于等于1000.
mysql> ALTER TABLE book
-> ADD pushnum SMALLINT CHECK (pushnum>=1000);
12.删除书店表中的 邮政编码,postalcode
mysql> ALTER TABLE store
-> DROP COLUMN postalcode;
13.将图书销售表的 销售数量,salenum 列的数据类型改为整型
mysql> ALTER TABLE sale
-> MODIFY COLUMN salenum INT;