【数据库原理】创建与维护表,DDL数据定义语言
数据描述语言(数据定义语言)
就是管理数据库整个库,整个表,表的属性列的语句。
常用词儿就是数据库或表的增删改查:CREATE
创建、DROP
删除、ALTER
修改、SHOW
查看、USE
进入表。
表的字段控制:PRIMARY KEY
主键、FOREIGN KEY
外键、CONSTRAINT
约束;ADD
增加字段、RENAME
表的重命名、MODIFY
修改字段数据类型或约束、CHANGE
修改字段名
- mysql数据库与表命名规则:当前字符集中的任意字符,下划线和$。最长为64字符。
- 文件系统对命名大小写敏感,则加以区分。windows中my_table与MY_TABLE是同一个表。UNIX中算两个不同的表。
- 表结构:列即字段,每个字段存储不同性质的数据。每一行各个字段数据构成一条数据记录。【就是属性和元组】
- 字段名:可以使用中文、英文、数字、下划线、井号、美元符号及at符号。字段名不能重复。【属性,就是属性】
- 字段的数据类型:字符串类型,长度表示容纳字符的数目。整型类型,长度为显示宽度。二进制类型,长度表示最大字节数。浮点数和定点数,长度表示数据的总长度。
- MySQL数据类型:
bit
,二进制位。binary
,二进制字符串。varbinary
,可变长度二进制字符串。char
,固定长度字符串。varchar
,可变长度字符串。date
,日期年月日。datetime
,日期时间。tinyint
,1B的整型。decimal
,定点数。【常用的这些,tinyint只占1B,最大表示到255。var- 一般表示可变长度】 - 删除表:
DROP TABLE [IF EXISTS] sc;#【如果存在,那么删除。加上这段话则不会报错:表不存在,无法删除表。】
- 创建表:
CREATE TABLE sc( <字段1> <数据类型1> [列级完整性约束条件] [,表级完整性约束条件] );
- 列级完整性约束条件:只约束单个字段(属性)。
PRIMARY KEY:设置主键
NULL/NOT NULL:允许/不允许为空【相当于主键】
UNIQUE:字段取值唯一【相当于主键】
DEFAULT<默认值>:指定字段的默认值【默认在校】
AUTO_INCREMENT:字段自动增加【班级总人数】
CHECK(条件表达式):拒绝接受不满足条件的值【成绩为0-100】
- 表级完整性约束条件:对整个表的约束条件(需要有主键,存在外键,字段的约束都可)。
CONSTRAINT <约束名> PRIMARY KEY(cno,sno),#【多个字段为表的主键】CONSTRAINT <约束名> FOREIGN KEY(cno,cterm) REFERENCES course(cno,cterm),
#【cno,cterm字段为外键,来自于course表】CONSTRAINT <约束名> UNIQUE (cno)CONSTRAINT <约束名> CHECK(degree>=0 and degree<=100)#【检查分数满足0-100之间】
- 查看表:
SHOW TABLES;
【查看数据库中有哪些表】 - 查看表结构:
DESCRIBE sc;
- 查看详细表结构:
DESCRIBES CREATE TABLE sc;
- 复制表:
CREATE TABLE 表名 SELECT * FROM 现有表名;
- 复制表结构:
CREATE TABLE new_stu SELECT * FROM stu WHERE 1=0;
【使得WHERE条件不成立,只保存表结构】 - 修改表结构
ALTER TABLE sc{ };
ADD <字段名> <数据类型 [列级完整性约束条件]> #ADD增加字段:
DROP <字段名>|<完整性约束名> #DROP删除字段【删除字段或删除约束】
RENAME <表名> #RENAME修改表名
MODIFY <字段名> <新数据类型> [列级完整性约束条件] #MODIFY修改字段的数据类型或完整性约束条件
CHANGE <旧字段名> <新字段名> <新数据类型> #CHANGE修改表中字段名称
- MySQL数据文件:.frm描述表结构;.myd数据文件;.myi数据文件中的索引文件。
- 创建表栗子
CREATE TABLE sc( sno CHAR(10) NOT NULL, # 学号字段char类型,非空cno CHAR(3) NOT NULL, # 课程号字段char类型,非空degree DECIMAL(4,1), # 分数字段decimal定点小数,小数点后1位cterm TINYINT NOT NULL, # 学期字段tinyint类型,非空CONSTRAINT A1 PRIMARY(sno,cno,cterm), # 约束A1:主键sno,cno,ctermCONSTRAINT A2 CHECK(degree>=0 and degree<=100), # 约束A2:检查分数0-100CONSTRAINT A3 FOREIGN KEY(sno) REFERENCES student(sno), # 约束A3:外键sno来自学生表studentCONSTRAINT A4 FOREIGN KEY(cno,cterm) REFERENCES course(cno,cterm)# 约束A4:外键cno,cterm来自课程表coures
);
- 修改表结构栗子
ALTER TABLE sc ADD class CHAR(10) AFTER sno; # 在表sc中sno字段后添加字段class
ALTER TABLE sc DROP FOREIGN KEY A4; # 在表sc中删除外键A4
ALTER TABLE sc RENAME sc1; # 修改表sc名为sc1
ALTER TABLE sc MODIFY degree INT; # 修改表sc中degree数据类型为int
ALTER TABLE sc CHANGE degree scores DECIMAL; # 修改表sc中degree字段为scores,类型为decimal