学习MySQL_第三天_语言基础&数据定义功能

来源:互联网 发布:com域名删除的准确时间 编辑:程序博客网 时间:2024/06/04 18:43

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;

0 0
原创粉丝点击