【数据库原理】创建与维护表,DDL数据定义语言

数据描述语言(数据定义语言)

就是管理数据库整个库,整个表,表的属性列的语句。

常用词儿就是数据库或表的增删改查CREATE创建、DROP删除、ALTER修改、SHOW查看、USE进入表。
表的字段控制PRIMARY KEY主键、FOREIGN KEY外键、CONSTRAINT约束;ADD增加字段、RENAME表的重命名、MODIFY修改字段数据类型或约束、CHANGE修改字段名

  1. mysql数据库与表命名规则:当前字符集中的任意字符,下划线和$。最长为64字符。
  2. 文件系统对命名大小写敏感,则加以区分。windows中my_table与MY_TABLE是同一个表。UNIX中算两个不同的表。
  3. 表结构:列即字段,每个字段存储不同性质的数据。每一行各个字段数据构成一条数据记录。【就是属性和元组】
  4. 字段名:可以使用中文、英文、数字、下划线、井号、美元符号及at符号。字段名不能重复。【属性,就是属性】
  5. 字段的数据类型:字符串类型,长度表示容纳字符的数目。整型类型,长度为显示宽度。二进制类型,长度表示最大字节数。浮点数和定点数,长度表示数据的总长度。
  6. MySQL数据类型bit,二进制位。binary,二进制字符串。varbinary,可变长度二进制字符串。char,固定长度字符串。varchar,可变长度字符串。date,日期年月日。datetime,日期时间。tinyint,1B的整型。decimal,定点数。【常用的这些,tinyint只占1B,最大表示到255。var- 一般表示可变长度】
  7. 删除表
sql 复制代码
DROP TABLE [IF EXISTS] sc;#【如果存在,那么删除。加上这段话则不会报错:表不存在,无法删除表。】
  1. 创建表
sql 复制代码
CREATE TABLE sc( <字段1> <数据类型1> [列级完整性约束条件] [,表级完整性约束条件] );
  1. 列级完整性约束条件:只约束单个字段(属性)。
sql 复制代码
PRIMARY KEY:设置主键
NULL/NOT NULL:允许/不允许为空【相当于主键】
UNIQUE:字段取值唯一【相当于主键】
DEFAULT<默认值>:指定字段的默认值【默认在校】
AUTO_INCREMENT:字段自动增加【班级总人数】
CHECK(条件表达式):拒绝接受不满足条件的值【成绩为0-100】
  1. 表级完整性约束条件:对整个表的约束条件(需要有主键,存在外键,字段的约束都可)。
sql 复制代码
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之间】
  1. 查看表SHOW TABLES;【查看数据库中有哪些表】
  2. 查看表结构DESCRIBE sc;
  3. 查看详细表结构DESCRIBES CREATE TABLE sc;
  4. 复制表CREATE TABLE 表名 SELECT * FROM 现有表名;
  5. 复制表结构CREATE TABLE new_stu SELECT * FROM stu WHERE 1=0;【使得WHERE条件不成立,只保存表结构】
  6. 修改表结构
sql 复制代码
ALTER TABLE sc{  };
ADD <字段名> <数据类型 [列级完整性约束条件]>		#ADD增加字段:
DROP <字段名>|<完整性约束名> 		#DROP删除字段【删除字段或删除约束】
RENAME <表名>						#RENAME修改表名
MODIFY <字段名> <新数据类型> [列级完整性约束条件] #MODIFY修改字段的数据类型或完整性约束条件
CHANGE <旧字段名> <新字段名> <新数据类型>			#CHANGE修改表中字段名称
  1. MySQL数据文件:.frm描述表结构;.myd数据文件;.myi数据文件中的索引文件。
  2. 创建表栗子
sql 复制代码
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,cterm
	CONSTRAINT A2 CHECK(degree>=0 and degree<=100),		# 约束A2:检查分数0-100
	CONSTRAINT A3 FOREIGN KEY(sno) REFERENCES student(sno),		# 约束A3:外键sno来自学生表student
	CONSTRAINT A4 FOREIGN KEY(cno,cterm) REFERENCES course(cno,cterm)
	# 约束A4:外键cno,cterm来自课程表coures
);
  1. 修改表结构栗子
sql 复制代码
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
相关推荐
种花家的n次方33 分钟前
pymysql模块
数据库·python
2401_8576176234 分钟前
企业OA管理系统:Spring Boot技术深度探索
数据库·spring boot·后端
暮雨c1 小时前
阿里云VLDB顶会论文在Async-fork在redis中应用解读
数据库·redis·缓存
陌小呆^O^1 小时前
Cmakelist.txt之win-odbc-mysql
数据库·mysql
破z晓1 小时前
uni-app集成使用SQLite数据库
数据库·uni-app
恒辉信达1 小时前
hhdb数据库介绍(9-30)
服务器·数据库·mysql
冧轩在努力2 小时前
【redis】哈希类型详解
数据库·redis·哈希算法
小扳2 小时前
Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
java·前端·数据库·spring boot·mysql·spring·课程设计
小至尖尖2 小时前
某保险理赔核心OB SQL优化案例
sql·oceanbase·sql优化
Mephisto.java3 小时前
【大数据学习 | Spark-Core】详解分区个数
大数据·sql·oracle·spark·json·database