#DDL
/*
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建:create
修改:alter
删除:drop
*/
一、库的管理
#1.库的创建
/*
语法:create batabase 库名
*/
#案例:
库的创建
CREATE DATABASE IF NOT EXISTS books;
#库的修改
ALTER DATABASE books CHARACTER SET gbk;
#库的删除
DROP DATABASE books;
#库中表的管理
#1.表的创建
/*
语法:
create table 表名(
列名 列的类型 【长度 约束】,
列名 列的类型【长度 约束】,
列名 列的类型【长度 约束】,
....
列名 列的类型 【长度 约束】
)
*/
#1.创建books
CREATE TABLE books(
id INT ,#编号
bname VARCHAR(20),#图书名
price DOUBLE, #价格
authorid INT ,#作者编号
publishdate DATETIME #出版日期
);
#2.表的修改
#1.修改列名
/*
语法:alter table 表名 change column 列名 新列名
*/
ALTER TABLE books CHANGE COLUMN publishdate publish DATETIME;#column 是列的意思
#2.修改列的类型或约束
语法:ALTER TABLE 表名 MODIFY COLUMN 列名 类型
ALTER TABLE books MODIFY COLUMN publish TIMESTAMP;
#3.添加新列
语法:
ALTER TABLE 表名 ADD COLUMN 新列名 列的类型
ALTER TABLE books ADD COLUMN annual DOUBLE;
#4.删除列
语法;
ALTER TABLE 表名 DROP COLUMN 列名
ALTER TABLE books DROP COLUMN price;
#5.修改表名
语法:
ALTER TABLE books RENAME TO bokk;
#3.表的删除
DROP TABLE book_author
#通用的写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE TABLE 表名
#4.表的复制
#仅仅复制表的结构
CREATE TABLE 表名 LIKE 被复制的表名
#复制表的结构及数据
CREATE TABLE 表名
#只复制部分数据
CREATE TABLE 表名
SELECT
FROM 被复制的表
WHERE nation =’中国‘;
#仅仅复制某些字段
CREATE TABLE 表名
SELECT 列名
FROM 被复制的表
WHERE 恒不成立的条件
#常见的数据类型
/*
数值型:整型
分类:tinyint(微整型)
smallint mediumint
int(无符号不能插入负数
有符号可以)
bigint(8)
特点:1.如果不设置有符号还是无符号默认有符号,
如果想设置无符号,需要添加unsigned关键词
2.如果插入的数值超出了整型的范围,
会报out of range警告,并且插入临界值
3.如果不设置长度,会有默认长度,
长度代表了显示的最大宽度,
如果不够会用0左边填充,但必须搭配zerofill使用。
小数:
定点型
dec(M,D)
decimal(M,D)
浮点数
float(M,D)
double(M,D)
特点;
M:代表整数+小数部位
D:代表小数部位
1.M和D都可以省略
2.如果是decimal,则默认为10,D默认为0
3.如果是float和double,则会根据插入的数值的精度来决定精度
4.定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用。
字符型 较短的文本:
char(不可变) 最大的字符数可以省略 比较耗费
varchar(可变) 不可以省略 比较节省
较长的文本:text bolb(较长的二进制数据)
日期型(日期的值需要用单引号引起来)
date只保存日期
time只保存时间
year 只保存年
datetime保存日期+时间
timestamp保存日期+时间
原则:选择的类型越简单越好,能保存数值的类型越小越好
*/
#常见约束
用于限制表中的数据,为了保证数据的准确性和可靠性
/*分类:六大约束
not null:非空,用于保证该字段的值不能为空
比如姓名,学号等
DEFAULT:默认,用于保证该字段有默认值
比如性别
PRIMARY KEY :主键,用于保证该字段的值具有唯一,并且非空
比如学号、员工编号等(系统默认主键就是非空,不可以更改)
UNQUE:唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号
check:检查约束【MySQL中不支持】
foreign key :外键,用于限制两个表的关系,
用于保证该字段的值必须来自主表关联列的值
添加约束的时机
1.创建表的时候
2.修改表的时候
约束的添加分类
列级约束:
六大约束语法上都支持,外键约束没有效果
表级约束:
除了非空、默认、其他的都支持。
主键和唯一:
保证唯一性 是否允许为空 一个表可以有多少个
主键 是 否 至多一个
唯一 是 是 可以有多个
允许组合
外键:
1.要求在从表设置外键关系
2.
*/
创建表添加约束
#1.添加列级约束
/*
语法:直接在字段名和类型后面追加约束类型即可。
*/
CREATE TABLE stuinfo(id INT PRIMARY KEY,#主键
stuname VARCHAR(20) NOT NULL,#非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18 ,#默默约束
majorid INT REFERENCES major(id)#外键
);
CREATE TABLE major(id INT PRIMARY KEY,
majorname VARCHAR(20)
);
#查看stuino中的所有索引,包括主键,外键,唯一
SHOW INDEX FROM stuinfo;
#添加列级约束
/*
语法:在各个字段的最下面
constraint 约束名 约束类型(字段名)
*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(id INT ,
gender CHAR(1),
seat INT,
age INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT un UNIQUE(seat),
CHECK(gender='男' OR gender='女'),
FOREIGN KEY(majorid) REFERENCES major(id)
);
#修改表时添加约束
#添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键
列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id)
#添加唯一
列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT UNIQUE;
表级约束
ALTER TABLE stuinfo ADD UNIQUE;
#修改表时删除约束
1、删除非空约束
ALTER TABLE emp5 MODIFY COLUMN stuname VARCHAR(20) NULL;
2、删除默认约束
ALTER TABLE emp5 MODIFY COLUMN age INT;
3、删除主键
ALTER TABLE emp5 DROP PRIMARY KEY;
4.删除唯一
ALTER TABLE emp5 DROP UNIQUE;
5.删除外键
ALTER TABLE emp5 DROP FOREIGN KEY;
#
ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY;