DDL语言的学习
DDL语言的学习
数据定义语言:库和表的管理
一、库的管理(创建、修改、删除)
1.库的创建create
语法:
create database [if not exists] 库名; #if not exists,如果库存在了,就不创建了
create database db_name default charset = utf8;//创建库,且规定编码集是utf-8
2.库的修改alter
更改库的字符集
alter database books character set utf8;
3.库的删除drop
drop database [if exists]books; #if exists 如果库存在才删除
二、表的管理(创建、修改、删除)
1.表的创建
语法:
create table 表名(列名 列的类型 [(长度) 约束],
列名 列的类型 [(长度) 约束],
列名 列的类型 [(长度) 约束],
...
列名 列的类型 [(长度) 约束],
)
eg:
create table book(
id int primary key auto_increment #设置主键、数值自增
bName varchar(20) not null, #值不能为空
price double,
authorId int,
publishDate datetime #出版日期
) charset = utf8;#设置这个表的字符集为utf-8
2.表的修改
语法:alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;
-
修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
-
修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
-
添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE【FIRST|AFTER 字段名】; #默认添加到最后一列,AFTER 字段名:指定添加到谁后面
-
删除列
ALTER TABLE author DROP COLUMN annual;
-
修改表名
ALTER TABLE author RENAME 【TO】 book_author;
3.表的删除
语法:drop table [if exists] book_author
4.表的复制
-
仅仅复制表的结构
create table copy1 like author
-
复制表的结构+数据
create table copy2 select * from author[where 筛选条件];
三、常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:五大约束
-
NOT NULL: 非空,用于保证该字段的值不能为空(姓名、学号)
-
DEFAULT:默认,用以保证该字段有默认值(性别)
-
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空(学号、员工编号)
-
UNIQUE:唯一,用于保证该字段的值具有唯一性 ,可以为空(座位号)
-
FOREIGN KEY(不支持):外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。
在从表添加外键约束,用于引用主表中某列的值(学生表的专业编号)
添加约束的时机:
- 创建表时
- 修改表时
约束的添加分类:
- 列级约束
- 五大约束语法上都支持,但外键约束没效果
- 表级约束
- 除了非空、默认,其他都支持
主键和唯一的对比
保证唯一性 | 是否允许为空 | 一个表中可以有多少个 | 是否允许组合 | |
---|---|---|---|---|
主键 | √ | × | 至多有一个 | √,但不推荐 primary key(id,stuname) |
唯一键 | √ | √(但只能有一个null) | 可以有多个 | √,但不推荐unique(seat,seat2) |
一、创建表时添加约束
1.添加列级约束
语法:直接在字段名和类型后面追加约束类型即可
只支持:默认、非空、主键、唯一
CREATE TABLE stuinfo (
id INT PRIMARY KEY, #主键
stuName VARCHAR(255) NOT NULL, #非空
seat INT UNIQUE, #唯一
age INT DEFAULT, #默认
majorId INT REFERENCES major(id) #外键
);
2.添加表级约束
语法:在各个字段的最下面:【constraint 约束名】 约束类型(字段名)
CREATE TABLE stuinfo (
id INT
stuName VARCHAR(255),
seat INT,
CONSTRAINT pk PRIMARY KEY(id),#给约束起名字
UNIQUE(seat) #也可以不起名
);
二、修改表时添加约束
语法:
添加非空约束
alter table tb_stuinfo modify column stuname varchar(255) not null;
添加默认约束
alter table tb_stuinfo modify column age int default 12;
添加主键
alter table tb_stuinfo modify column id int primary key; #列级
alter table tb_stuinfo add primary key(id);#表级
三、修改表时删除约束
删除非空约束
alter table tb_stuinfo modify column stuname varchar(20) null;
删除默认约束
alter table tb_stuinfo modify column age int;
删除主键
alter table tb_stuinfo drop primary key;
删除唯一
alter table tb_stuinfo drop index seat;
四、标识列
又称自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点
- 标识列必须和key搭配使用(主键、唯一)
- 一个表至多一个标识列
- 标识列的类型只能是数值型(int、double…)
- 标识列可以通过 set auto_increment_increment = 3; 设置步长
创建表时设置标识列
CREATE TABLE stuinfo (
id INT PRIMARY KEY AUTO_INCREMENT, #自增
stuName VARCHAR(255),
seat INT,
);
修改表时设置标识列
alter table tb_stuinfo modify column id int primary key auto_increment;