MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
相关文章:
- 《MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令》
- 《MySQL学习记录 (二) ----- SQL数据查询语句(DQL)》
- 《MySQL学习记录 (三) ----- SQL数据定义语句(DDL)》
- 《MySQL学习记录 (四) ----- SQL数据管理语句(DML)》
- 《MySQL学习记录 (五) ----- 存储函数、存储过程和触发器》
库的管理
一、库的创建
create database [if exists] 库名;
二、库的修改
修改库名:rename database 旧库名 to 新库名;
修改库的字符集:alter database 库名 character set 字符集(如 gbk utf-8);
删库:drop [if exists] 库名;
表的管理
一、表的创建
-- 必须的结构:
create table 表名 (字段名1 数据类型,字段名2 数据类型,...
);-- 完整的结构
create table 表名 (字段名1 数据类型(长度) 列级完整性约束,字段名2 数据类型(长度) 列级完整性约束,...表级完整性约束,...表级完整性约束
);
二、表的修改
- 修改字段名
alter table book change column publishdate pubDate datetime;
- 修改数据类型或约束
alter table book modify column pubDate timestamp;
- 添加新的字段
alter table author add column annual double;
- 删除字段
alter table author drop column annual;
- 修改表名
alter table author rename to aut;
- 删表
drop table if exists book;
三、表的复制
- 只复制表的结构
# 所有字段结构都复制进去了 create table author_copy1 like author;# 复制部分字段 create table author_copy2 select id, au_name from author where 0;
- 用查询结果创建新表
create table author_copy3 select * from author;create table author_copy4 select id, au_name from author where nation = '中国';
数据类型
常用的数据类型
数据类型 | 说明 |
---|---|
int | 整数型(java中的int) |
bigint | 长整型(java中的long) |
float | 浮点型(java中的float double) |
char | 定长字符串(java中的String) |
varchar | 可变长字符串(最多255个字符,java中的StringBuffer/StringBuilder) |
date | 日期类型(java中的java.sql.Date) |
BLOB | 二进制大对象(存储图片、视频等流媒体信息) |
CLOB | 字符大对象(存储较大文本,如:存储4G的字符串) |
关于 char 和 varchar 特点和选取
char:定长字符串,占用空间大小永远为指定的char长度大小,如:name char(5)
,字段name长度大小永远都为5,即便姓名只输入2个字符后面也会自动补上达到5个字符长度。效率比varchar更高。
varchar:可变长字符串,占用空间大小为输入的字符串长度大小,如:name varchar(5)
,输入多长字符串就占用多少空间。效率比char低。
在实际开发中,当某个字段中的数据长度不发生改变,是定长的,如:性别、生日等都采用char,当一个字段的数据长度不确定,如:简介、姓名等都采用varchar。
例子:
create table t_stu(num bigint,name varchar(255),gender char(1),classNum varchar(255),birth char(10)
);
BLOB 和 CLOB
应用场景:
对于一个电影表,其中可能会有 poster字段(海报) 和 introduction字段(故事简介),那么对于poster字段,就可以将其数据类型设置为BLOB,对于introduction字段就可以将其数据类型设置为CLOB。
注意:对于大对象数据类型数据,不能使用insert语句进行插入,必须使用java中的IO流。
常见约束
一、约束的含义
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠。
二、六大约束
约束 | 解释 |
---|---|
not null
|
非空,限制该字段不能为 NULL ,比如价格
|
default
|
设置字段默认值,比如性别 |
primary key
|
主键,保证该字段具有唯一性,并且非空,比如学号 |
unique
|
保证该字段取值唯一,可以为空,比如座位号 |
foreign key
|
用于限制两表的关系,保证该字段的取值范围一定在关联主表对应字段取值范围中,比如学生表的专业编号关联专业表的专业编号 |
check
|
限制字段的取值,比如性别,可以限制其只能取值为’男’或’女’ |
三、定义约束的位置
create table 表名 (字段名1 数据类型(长度) 列级完整性约束,字段名2 数据类型(长度) 列级完整性约束,...表级完整性约束,...表级完整性约束
);
列级约束:除了 foreign key
其他都支持
表级约束:除了not null
和 default
其他都支持
四、创建表时添加约束
列级约束语法:直接在字段的数据类型后面加上 约束类型
表级约束语法:在定义完每个字段后的最下面加上 constraint 自定义约束名 约束类型(字段名)
或者 约束类型(字段名)
create table major (id int primary key,majorName varchar(20)
);-- 添加 主键、非空、检查、唯一、默认 的列级约束
-- 添加 外键 表级约束
create table stuinfo (id int primary key, #主键stuName varchar(20) not null, #非空gender char(1) check(gender IN('男', '女')), #检查约束,里面放置的内容等价于whereseatNum int unique, #唯一age int default 18, #默认18岁majorId int,#为 stuinfo 表中的 majorId 字段添加外键,参照 major 表中的 id 字段constraint fk_stuinfo_major foreign key(majorId) references major(id));-- 添加 非空、默认 的列级约束
-- 添加 主键、检查、唯一、外键 表级约束
create table stuinfo (id int,stuName varchar(20) not null, gender char(1), seatNum int,age int default 18,majorId int,primary key(id),check(gender IN('男', '女')),unique(seatNum)foreign key(majorId) references major(id)
);SHOW INDEX FROM stuinfo; #查看stuinfo表中的所有索引:包括主键、外键、unique 等
五、主键与唯一键的区别
保证唯一性 | 是否允许为空 | 为多个字段添加约束 | 是否允许组合 | |
---|---|---|---|---|
主键 | 是 | 否 | 否 | 是,但不推荐 |
唯一 | 是 | 是 | 是 | 是,但不推荐 |
注意:unique
约束虽然允许字段为空,但是不能重复为空,即受该约束限制的字段的取值只能有一个为空,其余记录就不能继续为空了
六、主键与唯一键的补充
关于主键和唯一的设置可以通过多个字段组合来确定
primary key(id, stuName) # 这里的意思是主键由 id 和 stuName 共同决定
unique(id, stuNname) # 这里的意思是字段但唯一性由 id 和 stuName 共同决定
七、外键
foreign key(majorId) references major(id)
上面的意思就是在从表为 majorId 字段设置外键,该字段的取值范围参照于 major 表中的 id 字段所有的取值
- 从表设置外键的字段数据类型必须和主表中关联的字段的数据类型一致
- 主表中关联的字段一般是 主键 或 唯一键
- 插入数据时,必须先插入主表中的数据,再插入从表中的数据
- 删除数据时,先删除从表数据,再删除主表数据
八、自增长
设置了自增长的字段其取值从 1 开始,随着表的记录条数增加。
create table stu(id int primary key auto_increment,name varchar(20)
)
注意点:
- 自增长必须和 key 搭配 (主键、唯一键、外键)
- 一个表中只能有一个字段可以自增长
- 自增长只能设置在数值类型的字段上面
MySQL学习记录 (三) ----- SQL数据定义语句(DDL)相关推荐
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- MySQL学习记录 (四) ----- SQL数据管理语句(DML)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL、数据操作语句DML、数据控制语句DCL、其他基本语句、流程控制语句、批处理语句)概念及其相关案例之详细攻略
Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL.数据操作语句DML.数据控制语句DCL.其他基本语句.流程控制语句.批处理语句)概念及其相关案例之详细攻略 目录 T-S ...
- MySQL学习记录 (五) ----- 存储函数、存储过程和触发器
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁
MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...
- mysql数据表交叉引用_数据定义语句
数据定义语句 MySQL 8.0支持原子数据定义语言(DDL)语句.此功能称为原子DDL.原子DDL语句将数据字典更新,存储引擎操作和与DDL操作相关联的二进制日志写入操作组合到单个原子事务中.即使事 ...
- mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...
添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...
- oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...
oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...
最新文章
- poj3259(SPFA算法)
- android 虚拟按键挡住布局,Android 关于导航栏(虚拟按键)遮挡PopupWindow底部布局的问题...
- win8.1系统用户看过来,0x80004005错误解决大法!
- php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。...
- Flink SQL Client注册SCALA UDF完整流程
- SAP UI5 应用开发教程之四十 - 如何制作包含了 component-preload.js 在内的 SAP UI5 发布版本
- 世上最简单的mysql_mysql这样学最简单|基本操作上
- ajax加载对应的json,jQuery:多个AJAX/JSON请求对应单个回调并行加载
- 编写适合于自己的代码生成器 (zhuan)
- python中引用javascript代码块
- 数字孪生技术协助信息物理系统构建数字化城市
- TD式创新:中国标准横空出世 回归主流的TDD LTE
- 水星怎么设置网速最快_设置水星无线路由器限制网速的实现方法
- android 剪切板监听_Android剪贴板操作
- XenServer 7.0基础命令及故障处理办法
- 树模型(四):随机森林
- 薛非《品悟C-抛弃C程序设计中的谬误与恶习》读后感part1【转】
- 手把手教你清理 windows C盘文件
- 蘑菇模拟器TV版 for Android,真实采集蘑菇模拟器
- ArcGis For JavaScript API Drawing Tool (绘图工具又称框选地图)
热门文章
- 表达式求值(NOIP2013 普及组第二题)
- Singleton 与 MonoState 模式
- AD域控exchange邮箱(三)——exchange2010卸载报错的解决方法全纪录
- js常用内建对象之:String对象
- Python Series库Api整理
- android源码中的ndk,如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?...
- 大学计算机张青答案,《大学计算机Ⅰ》实验报告实验一1
- mysql clr_SQLCLR Tips: 配置数据库使其支持SQLCLR
- java 交互式 shell_Java9 Shell工具(JShell)
- (第三章)查看数据库