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 字段名 字段类型 约束