DDL语言
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建:create
修改:alter
删除:drop
一、库的管理
1、库的创建
语法:
create database 【if not exists】库名 【character set 字符集名】;
例:创建库books
create database books;
2、库的修改
rename database books to 新库名;(基本不用)
更改库的字符集、
alter database 库名 character set 字符集名;alter database books character set gbk;
3、库的删除
drop database 【if exists】 库名;
二、表的管理
1、表的创建
语法:
createtable 【if not exists】表名(列名 列的类型【(长度)约束】,列名 列的类型【(长度)约束】,…… 列名 列的类型【(长度)约束】 );
例:创建表book
createtable if exists book( id int, bname varchar(20),price double,author varchar(20)publishdate datetime);
2、表的修改
altertable 表名 add|drop|modify|change column 列名 【列类型 约束】;
(1)修改列名
altertable book change column publishdate pubdate datetime;
(2)修改列的类型或约束
altertable book modify column pubdate timestamp;
(3)添加新列
altertable author add column annual double;
(4)删除列
altertable author drop column annual;
(5)修改表名
altertable author rename to book_abc;
3、表的删除
droptable 【if exists】 表名;
通用的写法:
drop database if exists 旧库名;create database 新库名;droptable if exists 旧表名;createtable 表名();
4、表的复制
insertinto author values(1,‘小王’,‘西安’), (2,‘小李’,‘延安’), (3,‘小田’,‘渭南’), (4,‘小张’,‘安康’);
4.1、仅复制表的结构
createtable copy表名 like author旧表;
4.2、复制表的结构+数据
createtable copy2 select*from author;
只复制部分数据
createtable copy3 select id, au_name from author where nation='西安';
仅复制某些字段
createtable copy4 select id, au_name from author where0;
三、常见的数据类型
数值型:
整型
小数:定点数、浮点数
字符型:
较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)
日期型
(一)整型
分类:
tinyint(1)、smallint(2)、mediumint(3)、int/integer(4)、bigint(8)
特点:
(1)如果不设置无符号还是有符号,默认是有符号,如果想设置有符号,需要添加unsigned关键字
(2)如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
(3)如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
1、如何设置无符号和有符号
createtable tab_int(t1 int,t2 intunsigned);
(二)小数
分类:
1、浮点型
float(M,D)
double (M,D)
2、定点型
dec(M,D)
decimal(M,D)
特点:
(1)M和D
M:整数部位+小数部位
D:小数部位
如果超过范围,则报out or range异常,并插入临界值
(2)M和D都可以省略,
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
(3)定点型的精确度较高,如果要求插入数值的精确度较高如货币运算等则考虑使用
原则:
所选择的类型越简单越好,能保存数值的类型越小越好
(三)字符型
较短的文本:char、varchar
特点:
写法 |
M的意思 | 特点 | 空间的耗费 | 效率 | |
char | char(M) | 最大的字符数,可以省略,默认为1 | 固定长度的字符 | 比较耗费 | 高 |
varchar | varchar(M) | 最大的字符数,不可以省略 | 可变长度的字符 | 比较节省 | 低 |
较长的文本:text、blob(较长的二进制数据)
(四)日期型
分类:
date只保存日期
time只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性
分类:六大约束
not null:非空,用于保证该字段的值不能为空,比如姓名、学号等
default:默认,用于保证该字段有默认值,比如性别
primary key:主键,用于保证该字段的值具有唯一性,并且非空,比如字号、员工编号等
unique:唯一,用于保证该字段的值具有唯一性,所以为空,比如路径号
check:检查约束【MySQL中不支持】
foreign key:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值,比如主表的专业编号,员工表的部门编号,员工表的工种编号
添加约束的时机:
1、创建表时
2、修改表时
约束的添加分类:
列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认,其他的都支持
主键和唯一对比:(取前两行)
外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一键)
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
可以通过以下两种方式删除主表的记录
方式一:级联删除
altertable stuinfo add constraint fk_stu_major foreion key(majorid) peferences major(id)ondelete cascade;
方式二:级联置空
altertable stuinfo add constraint fk_stu_major foreion key(majorid) peferences major(id)ondeletesetnull;
4.1、创建表时添加约束
1、添加列级约束
语法:
直接在字段名和类型的后面追加约束类型即可
只支持:默认、非空、主键、唯一
createtable 类名( 字段名 字段类型 notnull,#非空 字段名 字段类型 primary key,#主键 字段名 字段类型 unique,#唯一 字段名 字段类型 default 值,#默认 constraint 约束名 foreign(字段名) references 主表(被引用例) );
注:
支持类型 | 可以起约束名 | |
列级约束 | 除了外键 | 不可以 |
表级约束 | 除了非空和默认 | 可以,但对主键无效 |
列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求
例:
createtable stuinfo(id int primary key ,#主键 stuinfo varchar(20)not ull,#非空 gender char(1) check(gender ='男'or gender ='女'),#检查 seat int unique,#唯一 age int default 18,#默认约束 majorid int foreign references major(id) #外键 );createtable major( id int primary key,majorname varchar(20));
2、添加表级约束
语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名) createtable stuinfo(id int,stuinfo varchar(20) , gender char(1) , seat int, age int , majorid int , constraint pk primary key(id),#主键 constraint uq unique(seat),#唯一键 constraint ck check(gender ='男'or gender ='女'),#检查 constraint fk_stuinfo_major foreign key(majorid) references major(id) #外键 );
通用的写法:
createtable if not exists stuinfo(id int primary key,stuname varchar(20)not full,sex char(1), age int default 18,seat int unique,majorid int,constraint fk_stuinfo_major foreign key(majorid) references major(id));
4.2、修改表时添加约束
1、添加列级约束
altertable 表名 nodify column 字段名 字段类型 新约束;
2、添加表级约束
altertable 表名 add 【constraint 约束名】约束类型(字段名) 【外键的引用】;
(1)添加非空约束
altertable stuinfo nodify column stuname varchar(20)not full;
(2)添加默认约束
altertable stuinfo nodify column age int default 10;
3、添加主键
(1)列级约束
altertable stuinfo nodify column id int primary key;
(2)表级约束
altertable stuinfo nodify add primary key(id);
4、添加唯一
(1)列级约束
altertable stuinfo nodify column seat int unique;
(2)表级约束
altertable stuinfo nodify add unique(seat);
5、添加外键
altertable stuinfo nodify add foreign key(majorid) references major(id);
4.3、修改表时删除约束
1、删除非空约束
altertable stuinfo nodify column stuname varchar(20)null;
2、删除默认约束
altertable stuinfo nodify age int;
3、删除主键
altertable stuinfo drop primary key;
4、删除唯一
altertable stuinfo drop index seat;
5、删除外键
altertable stuinfo drop foreign key majorid;
四、标识列
又称为自增长列,
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表中可以有多少个标识列?至多一个!
3、标识列的类型只能是数值型
4、标识列可以通过set auto_increment_increment=3;设置步长,可以通过手动插入值,设置起始值
(一)创建表时设置标识列
createtable tab_identity(id int primary key auto_increment,name varchar(20));
(二)修改表时设置标识列
altertable tab_identity modify column id int primary key auto_increment;
(三)修改表时删除标识列
altertable tab_identity modify column id int;