第六章 数据定义语言
一、库的管理
1 . 库的创建
Create database if exits 库名;
例:Create database if not exits students;
2 . 库的修改
更改库的字符集:Alter database character set 新名称
3 . 库的删除(删库跑路???)
Drop database if exits 库名;
4. 修改库名
停止服务
电脑C盘-programdata文件夹-MySQL文件夹-data文件夹-要改名的库-重命名
重启服务-刷新
二、表的管理
1.表的创建
Create table 表名(
列名,列的类型(长度),约束,
列名,列的类型(长度),约束,
……);
例:create students(
Student_id,varchar(5 ),
Name,varchar(6),
Grade,int(2));
2.表的修改
Alter table 表名 add|drop|modify|change column 列名 列的类型、约束;
① 修改列名
Alter table 表名 change column 旧列名 新列名 列的类型;
② 修改列的类型或约束
Alter table 表名 modify 列名 列的新类型;
③ 添加新列
添加到所有列最后:Alter table表名add column 新列名 列的类型;
添加到指定位置:Alter table表名add column 新列名 列的类型 first/after字段;
④ 删除列
Alter table表名drop column 列名;
⑤ 修改表名
Alter table表名rename to 新表名;
3.表的删除
Drop table if exits表名;
4.表的复制
① 复制表的结构
Create table 新表名 like 要复制的表的表名;
②复制表的结构+数据
Create table 新表名
Select* from 要复制的表的表名;
③ 只复制部分数据
Create table 新表名
Select列名1,列名2
from 要复制的表的表名
where 筛选条件;
④ 只复制某些字段
Create table 新表名
Select列名1,列名2
from 要复制的表的表名
where 恒不成立的条件;
三 、常见的数据类型
1.数值型
1)整数
Tinyint :1字节,范围:有符号-128127;无符号0255
Smallint: 2字节
Mediumint :3字节
Int : 4字节
Bigint :8字节
特点:
① 如果不设置是否有符号,默认有符号,若想设置无符号,需要添加关键字unsigned
② 如果插入的数值超出了整形的范围,会报out of range异常,且插入临界值
③ 如果不设置长度,则会有默认的长度,长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配关键字zerofill,并且变为无符号整型
2)小数
定点型
Dec(M,D) / Decimal:m+2字节,最大取值范围与double相同,给定Decimal的有效取值范围由m和D决定。
浮点数
Float(M,D) : 4字节
Double(M,D) : 8字节
(M,D)可省略,M代表整数+小数部位总位数,D代表小数部分位数
Decimal中M默认为10,D默认为0、
Float和Double会根据插入的数值的精度来决定精度
2.字符型
1)较短的文本:char、varchar
Char/ varchar (M):M是最多字符数,varchar是可变长度的字符,比较节省空间,但其效率较低。
2)较长的文本:text、blob
Binary/var Binary :保存较短的二进制数据
Enum : 保存枚举(不区分大小写)
Set :保存集合不区分大小写)
3.日期型
日期的值必须用单引号引起来
Date只保存日期
Time 只保存时间
Year 只保存年
Datetime和timestamp保存日期+时间
Datetime和timestamp的区别:
Timestamp支持的时间范围较小,为1970-2038;Datetime范围为1000-9999
Timestamp 和实际时区有关,更能反映实际的日期,Datetime只能反映出插入时的当地时区
Timestamp 的属性受MySQL版本和模式影响很大
四、常见约束
约束是一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性。
1.六大约束
①非空约束:Not Null 用于保证字段的值不能为空
② 默认约束:Default 用于保证该字段有默认值
③ 主键约束:Primary Key用于保证该字段的值具有唯一性,并且非空
④ 唯一约束:Unique 用于保证该字段的值具有唯一性,可以为空
⑤检查约束:Check(MySQL不支持)例:性别只能为男女,当值为其他时报错
⑥外键约束:Foreign Key用于限制两个表的关系,保证该字段的值必须来自于主表的关联字段的值。在从表添加外键约束,用于引用主表中某列的值。
2.列级约束和表级约束
列级约束:六大约束在语法上都支持,但外键约束无效果
①添加列级约束
1)创建表时添加约束
直接在字段名和类型后面追加约束类型,只支持默认、非空、主键、唯一约束
例:
create table stu(
Id int primary key
Name varchar(20) not null
Age int default);
2)修改表时添加约束
Alter table stu modify column name varchar(20) not null;
表级约束:除了非空、默认约束,其他约束都支持
在各个字段最下边Constraint 约束名 约束类型(字段名)
例: create table stu(
Id int
Name varchar(20)
Age int
Constraint pk primary key(id) ,
Constraint nn not null(name),
Constraint dt default(age));
敲黑板,面试常考 !!!
3.主键约束和唯一约束

在从表设置外键关系
从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
主表的关联列必须是一个key(一般是主键或唯一)
插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,在删除主表
5,修改表时删除约束
①删除非空约束
Alter table stu modify column name varchar(20) null;
②删除主键约束
Alter table stu drop primary key;
五、标识列
自增长列,可以不用手动插入值,系统提供默认的序列值
1.创建表时设置标识列
Create table stu(
Id int primary key auto_increment,
Name varchar(20));
设置步长:set suto_increment_increment=3;
设置起始值:insert into stu(id,name) values (10,’lily’);
标识列不一定和主键搭配,但必须要求是一个key
一个表至多有一个标识列
标识列的类型必须是数值型
2.修改表时设置标识列
Alter table stu modify column id int primary key auto_increment;
3.修改表时删除标识列
Alter table stu modify column id int primary key;