DDL语言
库和表的管理
/*
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建:create
修改:alter
删除:drop
*/
库的管理
/*
语法:
create database 库名;
drop database 库名;
*/
表的管理
#1.表的创建
#案例:创建表
CREATE TABLE book(
id INT,
bname VARCHAR(20),
price DOUBLE,
author VARCHAR(20),
author_id INT,
publishdDate DATETIME
);
#2.表的修改
/*
列名、类型或约束、添加删除列、修改表名
*/
#修改列名
ALTER TABLE book CHANGE COLUMN publishdDate pubDate DATETIME;
#修改类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
#添加新列
ALTER TABLE book ADD COLUMN annual DOUBLE;
#删除列
ALTER TABLE book DROP COLUMN annual;
#修改表名
ALTER TABLE book RENAME TO books;
#3.表的删除
DROP TABLE books;
#通用的写法
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 新表名;
#4.表的复制
#仅仅复制表的结构
CREATE TABLE copy LIKE books;
#复制表的结构和数据
CREATE TABLE copy2
SELECT * FROM books;
#复制部分数据
CREATE TABLE copy3
SELECT * FROM books
WHERE nation='中国';
#仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
FROM book
WHERE 0;
常见的数据类型
/*
数值型:
整型
小数:
定点型
浮点型
字符型:
较短的文本:char、varchar
较长的文本:text、blob(较长的数据类型)
日期型
*/
#一、整型
/*
分类:
tinyint、smallint、mediumint、int、bigint
t特点:
默认是有符号
如果插入数值超出范围,默认插入的是临界值
如果不设置长度,有默认长度(显示的宽度)
*/
#如何设置无符号和有符号
CREATE TABLE tab(
t1 INT,
t2 INT UNSIGNED
);
#二、小数
/*
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
1.M,D
M:整数部位+小数部位
D:小数部位
2.如果是decimal,M默认为10,D默认为0
3.定点型的精度较高
*/
#三、字符型
/*
特点:
char 固定长度的字符 效率高
varchar 可变长度的字符 效率低
*/
#四、日期型
/*
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间
timestamp 保存日期+时间
特点:
字节 范围 时区影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/
常见约束
/*
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
not null:非空
default:默认
primary key:主键,唯一性,并且非空
unique:唯一,可以为空
check:检查约束,MySQL不支持
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于
主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值
添加约束的时机:
1、创建表时
2、修改表时
约束的添加分类:
列级约束:
除了外键约束都可以
表级约束:
除了非空和默认都可以
主键和唯一的区别:
保证唯一性 是否允许为空 一个表可以有几个 是否允许组合
主键 是 否 至多有一个 是
唯一 是 是 可以有多个 是
外键:
1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列必须一直或兼容
3.主表的关联列必须是一个主键或唯一
4.插入数据时,应该先插入主表,在插入从表
删除数据时,先删除从表,再删除主表
*/
创建表时添加约束
#一、创建表时添加约束
#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)
)
#2.添加表级约束
/*
语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名)
*/
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(seat),
CONSISTENT ck CHECK(gender='男'OR gender='女'),
CONSISTENT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
)
#通用的写法:
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT UNIQUE,
majorid INT,
CONSISTENT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
)
修改表时添加约束
#二、修改表时添加约束
/*
列级约束
alter tale 表名 modify column 字段名 字段类型 新约束;
表级约束
alter table 表名 add 【constraint 约束名】约束类型(字段名)【外键的引用】;
*/
#1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2.添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
#3.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
修改表时删除约束
#三、修改表时删除约束
#1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2.删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3.删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4.删除唯一键
ALTER TABLE stuinfo DROP INDEX seat;
#5.删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
标识列
/*
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1.不是必须和主键搭配
2.一个表至多一个标识列
3.标识列的类型只能是数值型
4.标识列可以设置步长
*/
#一、创建表时设置标识列
CREATE TABLE tab(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)
#二、修改表时设置标识列
ALTER TABLE tab MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
#三、修改表时删除标识列
ALTER TABLE tab MODIFY COLUMN id INT;