SQL-DDL
DDL概述
数据(结构)定义语言DDL(Data Definition Language),是用于创建和修改数据库表结构的语言。
常用的语句:create(创建);alter(更改);drop(删除);rename(重命名),由于sql语言不区分大小写,一些数据库的软件会自动把关键字便为大写,因此我们这里的语句都使用小写。
操作数据库
[ ]内的可以写也可以不写
1.创建数据库并设置编码格式
create database [if not exists] 数据库名 [charset utf8];
2.删除数据库
drop database [if exists]数据库名
3.修改字符集
alter database 数据库名 charset 编码格式;
数据库表
数据库表的基本概念
1、数据表
表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。表的最简单形式是由行和列构成,每个表都有一个表头和表体,表头定义表名和列名。表中的行被看作文件中的记录,表中的列被看作是这些记录的字段。
2、记录
记录也被称为一行数据,是表里的一行。在关系型数据库的表里,一行数据是指一条完整的记录。
3、字段
字段是表里的一列,用于保存每条记录的特定信息。数据表的一列包含了特定字段的全部信息。
综上所述,当我们在设计一个具体的表之前,我们需要确定表的下列特征:
(1)表中的字段。
(2)字段的数据类型和长度。、
(3)哪些约束。
设计表
数据类型
1、char(n):长度为n的定长字符串;
2、varchar(n):最大长度为n的可变长字符串。
3、date:日期,包含年月日;
4、datetime:日期,包含年月日时分秒。
5、整数
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
6、浮点
类型 | 字节 |
---|---|
float | 4 |
double | 8 |
浮点数据类型的使用
数据类型(M,D)
M:精度,数据的总长度
D:标度,小数点后的长度
7、其它
BLOB是一个二进制大对象,可以容纳可变数量的数据,用于存储图片视频信息。有四种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGOLOB。它们只是可容纳值的最大长度不同。
TEXT列字符字符串,有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。
TEXT和BLOB的长度
TINY:最大长度255个字符(2^8-1)
BLOB或TEXT:最大长度65535(2^16-1)
Medium:最大长度16777215(2^24-1)
LongTEXT:最大长度4294967295(2^32-1)
约束
1、主键:在一张表中唯一的一条记录,不可为空,不能重复。
设置主键约束
primary key
2、不为空约束
not null
3、唯一性约束
unique
4、条件约束
check(条件)
5、外键约束
6、其它
(1)主键自动增长
auto_increment
(2)默认值
default'默认值'
(3)字段注释
comment'注释'
操作数据库表
创建、删除、修改
1、创建表语法
create table 表名(列名 数据类型 [约束] [默认值] [注释],.....)
/*
创建表
create table 表名(列名 数据类型 [约束] [默认值] [注释],.....)
*/
CREATE TABLE t_student(
stu_id SMALLINT PRIMARY KEY AUTO_INCREMENT COMMENT'学号',
stu_name VARCHAR(10) NOT NULL COMMENT'姓名',
stu_sex CHAR(1) DEFAULT'男' COMMENT'性别',
stu_age INT(3) CHECK(stu_age>18),
stu_grade FLOAT(4,1) CHECK(stu_grade<=100 AND stu_grade>0) COMMENT'成绩'
)
2、删除表语法
drop table [if exists] 表名;
3、修改表名
rename table 旧表名 to 新表名
4、复制表结构
create table 新表名 like 被复制的表名
/*
复制表结构
create table 新表名 like 被复制的表名
*/
CREATE TABLE t_stu LIKE t_student;
/*
修改表名
rename table 旧表名 to 新表名;
*/
RENAME TABLE t_stu TO t_sd;
/*
删除表
drop table [if exists] 表名;
*/
DROP TABLE IF EXISTS t_sd;
修改表结构
1、主键约束
添加主键约束
alter table 表名 add primary key(列名);
删除主键
alter table 表名 drop primary key;
2、设置自动增长
设置自动增长(比如序号的每一行自动+1)
alter table 表名 modify 列名 类型 auto_increment;
3、设置不能为空
设置字段不能为空
alter table 表名 modify 列名 类型 not null;
设置字段为空
alter table 表名 change column 列名 列名 类型 mull;
4、添加唯一约束
添加唯一性约束
alter table 表名 add unique(列名);
取消唯一性约束
alter table 表名 drop index 索引;
5、添加检查约束
添加检查约束,需要为这个约束起一个名,即约束名
alter table 表名 add constraint 约束名 check(条件);
删除检查约束,按照约束名删除
alter table 表名 drop check 约束名;
6、添加列
添加列到末尾
alter table 表名 add 列名 数据类型;
添加列到最前面
alter table 表名 add 列名 数据类型 first;
添加列到某一列的后面
alter table 表名 add 列名 数据类型 after 列名;
7、删除列
alter table 表名 drop 列名;
8、修改列名
alter table 表名 change 旧列名 新列名 数据类型;
9、修改列的数据类型
alter table 表名 modify 列名 新数据类型;
CREATE TABLE t_stu(
stu_id SMALLINT COMMENT'学号',
stu_name VARCHAR(10) COMMENT'姓名',
stu_sex CHAR(1) COMMENT'性别',
stu_age INT(3),
stu_grade FLOAT(4,1) COMMENT'成绩'
)
#添加主键约束
ALTER TABLE t_stu ADD PRIMARY KEY(stu_id);
#设置自动增长
ALTER TABLE t_stu MODIFY stu_id SMALLINT AUTO_INCREMENT;
#设置不能为空
ALTER TABLE t_stu MODIFY stu_age INT(3) NOT NULL;
#添加唯一性约束
ALTER TABLE t_stu ADD UNIQUE(stu_name);
#添加检查约束
ALTER TABLE t_stu ADD CONSTRAINT grade_check CHECK(stu_grade>0 AND stu_grade<=100);
#添加列
ALTER TABLE t_stu ADD stu_phone INT(11) AFTER stu_age;
#删除列
ALTER TABLE t_stu DROP stu_phone;
#修改列名
ALTER TABLE t_stu CHANGE stu_phone stu_ph INT(11);
#修改列的数据类型
ALTER TABLE t_stu MODIFY stu_ph INT(10);