mysql的外模式ddl_MySQL·DDL语言

DDL语言就是我们所说的数据库模式定义语言,用于对数据库或者数据表的创建定义、修改和删除,下面就从大方面去学习DDL:

一、库的管理

1、创建库:create database 【if not exists】库名 【character set 字符集名】

2、 修改库:alter database 库名 。。。。

3、 删除库:drop database 【if exists】库名;

二、表的管理

1、创建表: create table 【if not exists】表名(

字段名 字段类型【约束】,

字段名 字段类型【约束】,

........)

2、修改表

(1).添加列

alter table 表名 add column 列名 类型【first|after 字段名】;

(2).修改列的类型或约束

alter table 表名 modify column 列名 新类型 【新约束】;

(3).修改列名

alter table 表名 change column 旧列名 新列名 类型;

(4).删除列

alter table 表名 drop column 列名;

(5).修改表名

alter table 表名 rename 【to】 新表名;

3、删除表:drop table 【if exists】表名;

4、复制表

(1).复制表的结构

create table 表名 like 旧表;

(2).复制表的结果+数据

create table 表名

select 查询列表 from旧表 【where 筛选条件】;

三、数据类型

1、数值型

(1).整型:tinyint、smallint、midiumint、int/integer、bigint

特点:① 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号

② 超出范围会报out or range 异常,插入临界值

③ 长度可以不指定,默认会有一个长度。如果不够则左边用0填充,搭配zerofill

(2).浮点型

定点数:decimal(M,D)

浮点数:float(M,D) double(M,D)

特点:①M代表整数部位+小数部位的个数,D代表小数部位个数

②如果超出范围,则报out or range异常,并且插入临界值

③M和D都可以省略,但对于定点数,M默认为10,D默认为0

④如果精度要求较高,则优先考虑使用定点数

2、字符型

常用的char、varchar、binary、varbinary、enumerate、get、set、text、blob

(1).char:固定长度的字符,写法为char(M),最大长度不能超过M,M可省略默认1

(2).varchar:可变长度的字符,写法为varchar(M),最大长度不能超过M,M不可忽略

3、日期型

year 年 、date 日期、time 时间、datetime 日期时间、timestamp 日期时间

四、约束

1、约束类型分类

NOT NULL :非空,用于保证该字段的值不能为空

default:默认,用于保证该字段与默认值

primary key:主键,用于保证字段唯一性、非空性

unique:唯一,用于保证字段的唯一性,可以为空值

check:检测约束【mysql不支持】

foreign key:用于限制两个表的关系,用于保证该字段的值必须来自主表关联列的值

2、约束添加的分类

添加约束分为列级约束和表级约束,位置如下:

create table 表名(

字段名 字段类型 列级约束,

字段名 字段类型 列级约束,

表级约束

)

特点:

列级约束:语法上各种约束类型都支持,但外键约束没有效果

表级约束:除了非空和默认约束,其他约束都支持

3、添加约束

(1).添加列级约束——以创建学生表为例

create table student (

id int primary key , # 主键

stuName varvhar(10) not null,#非空

gender char(1) check( gender = '男' OR gender = '女'),#检测

seat int unique,# 唯一

age int default 18,# 默认

majorId int foreign key references major(id) # 引用major表id字段 外键

)

(2).添加表级约束

create table student(

id int,

studname varchar(20),

gender char(1),

seat int,

age int ,

constraint pk primary key(id),#pk为自定义名称,constraint 可以省略

constraint uq unique(seat)

)

(3).修改表时添加约束:alter table 表名 modify column 字段名 类型 新约束 [列级约束]

alter table 表名 add 【constraint 约束名】 约束类型(字段名) [表级约束]

4、主键与唯一键

(1).区别:①、一个表至多有一个主键,但可以有多个唯一键

②、主键不允许为空,但唯一键可以允许为空

(2).相同点:都具有唯一性,都支持组合键,但是不推荐

5、外键的特点

①、用于限制两个表的关系,从表的字段值引用看主表的某字段值

②、外键列和主表的被引用列要求类型一致,意义一样,名称无要求

③、外表的被引用列要求是一个key(一般是主键)

④、插入数据、先插入主表,删除数据需先删除从表

针对第④点的外键特点,我们可以使用更加快捷的方式进行数据的删除:

①、级联删除

alter table 从表 add constaint 外键名 foreign key (主表) references 主表(字段) on delete cascade; # 执行过后,我们删除主表中的数据时,从表包含被删除数据的记录也会一同删去

②、级联置空

alter table 从表 add constaint 外键名 foreign key (主表) references 主表(字段) on delete set null ; # 执行过后,从表中包含删除数据记录中的值会被NULL值代替

五、自增长列

自增长列的意思就会说无需手动插入值,可以自动提供序列值,默认从1开始,步长为1,关键变量名为:auto_increment_increment,如果想更改起始值则手动插入目标起始值的记录;如果要更改步长,可以更改系统变量,set auto_increment_increment = 值; 一个表至多有一个自增长列,且自增长列只支持数值型,自增长列必须为一个key。

①、创建表时设置自增长列

create table 表(

字段名 字段类型 约束 auto_increment;

)

②、修改表时设置自增长列

alter table 表 modify column 字段名 字段类型 约束 auto_increment;

③、删除自增长列

alter table 表 modify column 字段名 字段类型 约束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值