【数据库原理】创建与维护表,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
相关推荐
睡觉的时候不会困5 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂7 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程7 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
JAVA不会写7 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)7 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea8 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~9 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员9 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly219 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql
不宕机的小马达10 小时前
【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用
数据库·mysql