DDL语言(数据定义语言)
库和表的管理
库的管理
-
创建
- 修改
删除
表的管理
创建
修改
删除
- 修改
-
相关关键字
- 创建 create
修改 alter
删除drop
- 创建 create
-
管理
- 库的管理
库的创建
语法:
create database 库名#(一般不会去更改)
RENAME DATABASE books TO 新库名;
- 库的管理
-
更改库的字符集
ALTER DATABASE books CHARACTER SET gbk;# gbk代表的是例如utf8的效果
-
库的删除
- DROP DATABASE IF EXISTS books;
表的管理
- 表的创建
- create table 表名(
列名 列的长度【(长度) 约束】
列名 列的长度【(长度) 约束】
………………
)
- create table 表名(
- 表的修改
- 修改列名
alter table 表名 chage [column] 原列名 列名 datetime;
修改列的类型和约束
alter table 表名 modify [column] 列名 timestamp;
添加新列
alter table 表名 add column annual double(类型);
删除列
alter table 原表名 rename to 修改后的表名
修改表名
核心语法 alter table 表名 add|drop|modify|change coulum 列名 【列类型 约束】
- 修改列名
- 表的删除
Drop 表名 if exists 库名/表名
表的复制
-
1、仅仅复制表结构
-
CREATE TABLE copy LIKE beauty;#复制表的结构加数据
CREATE TABLE copy2
SELECT * FROM beauty;
-
-
只复制部分数据
- CREATE TABLE copy3
SELECT NAME
FROM beauty
WHERE id=2;
- CREATE TABLE copy3
-
仅仅复制某些字段
CREATE TABLE copy4
SELECT NAME,sex
FROM beauty
WHERE 0;
常见的数据类型
-
数值型
整型
小数: -
浮点型
- float
- double
-
定点型:
- DEC(M,D)
- DECMAL(M,D)
M为有效数字能有几位(整数部位+小数部位)
D是代表小数点后保留几位
超过范围则插入临界值
可以不加D,M默认D=0,M=10
如果是float和double,则根据插入数值的精度来决定精度
定点型的精确度较高,如果要求插入的精度较高入货币运算则考虑使用
字符型
较短的文本:char、varchar -
较长的文本: text 、blob(较长的二进制数据)
-
日期型
time 只保存时间
year 只保存年datetime 日期+时间
timeStmp 日期+时间
常见约束
-
六大约束
not null 非空,用于保证该字段的值不能为空,比如姓名,学号等 -
DEFAULT 默认,用于保证该字段有默认值
-
PRIMARY KEY 主键,用于保证该字段的值具有唯一性,并且非空
-
UNIQUE 唯一,用于保证该字段的值具有唯一性,可以为空比如座位号
-
check :检查约束【mySQL中不支持】
-
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
-
在从表添加外键约束,用于引用主表中某列的值
- 添加约束的时机:
创建表时
修改表时
约束的添加分类
列级约束
六大约束语法上都支持,但外键约束没有效果
表级约束
除了非空、默认,其他都支持
- 添加约束的时机:
-
主键和唯一的大对比
保证唯一性 | 是否允许为空 | 一个表中是否可以有多个 | 是否允许组合 | |
---|---|---|---|---|
主键 | √ | × | 至多有一个 | 可以,但不推荐 |
唯一键 | √ | √ | 可以有多个 | 可以 |
- 外键
要求从表设置外键关系
从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
主表的关联列必须是一个key(一般是主键或唯一)
插入数据时,先插入主表,在插入从表删除数据时,先删除从表,再删除主表
删除唯一:alter table 表名 drop index 列名删除外键:alter table 表名 drop foreign 外键列名 - 标识列又称为自增长列
含义:可以不用手动插入值,系统提供默认的序列值
特点:标识列必须和主键搭配吗?不一定,但要求时一个key
2、一个表可以有几个标识列?至多一个!!!
3、 标识列的类型只能是数值型
4、标识符可以通过set auto_increment_increment=步长值;设置步长
可以通过手动插入值设置初始值
修改表时设置标识列
Alter table 表名 modify column 列名 int_primary key auto_increment
修改表示删除标识列
Alter table 表名 modify column 列名 int;
通用的写法
Drop database if exists 旧库名
create database 新库名
有符号和无符号
加入unsigned关键字为无符号
创建表并添加约束的常见格式
用法:
CREATE TABLE 表名(
字段名 字段类型 约束,
字段名 字段类型,
表级约束
);
举例:
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)
)
DML(语言数据操作语言)
插入
-
insert
相关知识
插入语句
语法:
表名
列名
新值 -
插入方式
- 在beauty表中插入数据
- 插入的值的类型要与列的类型一致或兼容
- 不可以为null的列必须插入值.可以为null的列可以不插入
- 列的顺序可以调换
- 列数和值的个数必须一致
- 可以省略列名,默认所有列,而且列的顺序和表的顺序一致
- 方式一: insert into 表名(列名) values(值1.…………) values(值1);
- 方式二 :insert into 表名set 列名=值,列名=值,……
- 在beauty表中插入数据
-
两种插入方式大pk
-
update
相关知识
修改单表的记录
语法:
update 表名
set 列=新值,列=新值……
where 筛选条件
修改多表的记录【补充】 -
sql92语法
语法:
update 表1 别名,表二 别名
set 列=值,……
where 连接条件
and 筛选条件; -
sql99语法
update 表名 别名
inner|lest|right join 表名 别名
on 连接条件
set 列=值,……
where 筛选条件;
删除
-
delete
- 语法
单表的删除
delete from 表名 where 筛选条件
多表的删除【补充】
delete删除 - sql92语法
delete 表一的别名,表二的别名
from 表1 别名,表二 别名
where 连接条件
and 筛选条件 - sql99语法
delete 表一的别名,表二的别名
from 表1 别名
inner|lest|right join 表名 别名
on 连接条件
where 筛选条件 - truncate table 表名;
- 语法
-
区别
- delete:可以加where条件,truncate不可以加truncate 删除,效率更高
- 假如要删除的表中右自增长列,如果用delete删除后,再插入数据,自增长列的值冲断点开始而truncate删除后,再插入数据,自增长列的值从1开始