MySQL-4-DDL

DDL:数据定义语言

创建create

创建库

  • 语法:create database 【if not exists】库名
# 创建库
CREATE DATABASE IF NOT EXISTS books
## 通用写法
DROP DATABASE IF EXISTS 旧库名
CREATE DATABASE 新库名

创建表

  • 语法:
/*
create table 表名(
      列名 列的类型【(长度)约束】,
      列名 列的类型【(长度)约束】,
      ...
      列名 列的类型【(长度)约束】 # 最有一个不加逗号
)
*/
# 如
CREATE TABLE book(
	id INT,
	bName VARCHAR(20)
);
# 通用写法
DROP TABLE IF EXISTS 旧表名
CREATE TABLE 新表名();	

修改alter

修改库

# 一般不建议更改库
# 更改库的字符集
ALTER DATABASE books CHARACTER SET utf8;

修改表

核心语法: alter table 表名 add|drop|modify|change column 列名

  • 修改列名
  • 修改列的类型或约束
  • 添加新列
  • 删除列
  • 修改表名
# 修改列名
ALTER TABLE book CHANGE COLUMN bName bname VARCHAR(10)
# 修改列类型
ALTER TABLE book MODIFY COLUMN id VARCHAR(3)
# 修改列约束
   # 添加主键
   ALTER TAELE book MODIFY COLUMN id INT PRIMARY REY;
   ALTER TABLE book ADD PRIMARY KEY(id);
   # 添加外键 为主表stu的id添加外键约束,外键是从表major中的majorid
   ALTER TABLE stu ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid)REFERENCES major(id);
# 添加新列
ALTER TABLE book ADD COLUMN age INT;
# 删除列
ALTER TABLE book DROP COLUMN  age;
# 修改表名

删除drop

删除库

# 删除库
DROP DATABASE IF EXISTS books

删除表

DROP TABLE IF EXISTS books;

复制表

  • 仅仅复制表的结构
  • 复制表的结构和数据
# 仅仅复制表的结构
CREATE TABLE copy1 LIKE books;
# 复制表的结构和数据
CREATE TABLE copy2 SELECT * FROM books
# 还可以只复制 部分数据 加晒选条件即可

数据库中常见数据类型

数值型-整型/浮点型

整型

整型类型 字节 整型类型 字节
Tinyint 1 Smallint 2
Smallint 3 Int/integer 4
Bigint 4
  • 特点:
    ①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
    ②如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
    ③如果不设置长度,会有默认的长度]
    ④长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

浮点型

+ 分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
浮点类型 字节 浮点类型 字节
float 4 double 8

定点型 字节
dec(M,D),decimal(M,D) M+2
  • M:整数部位+小数部位
  • D:小数部位
  • 特点:
    ①如果超过范围,则插入临界值
    ②M和D都可以省略
    ③如果是decima1,则M默认为10,D默认为0;如果是floatdouble,则会根据插入的数值的精度来决定精度
    ④定点型的精确度较高

字符型-短型/长型

/*
较短的文本:
char
varchar
较长的文本:
text
blob(较大的二进制)
*/

日期型

/*
分类:
date只保存日期
time只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
特点:
字节范围时区等的影响
        字节     范围     时区影响
datetime  8   1000-9999    不受
timestamp 4   1970-2038     受  
*/

常见约束

  • NOT NULL:非空,用于保证该字段的值不能为空
  • DEFAULT:默认,用于保证该字段有默认值
  • PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
  • UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
  • CHECK:检查约束【mysq1中不支持】
  • FOREIGN KEY:外键,用于限制两个表的关系
    列级约束
CREATE TABLE IF NOT EXISTS stu(
	id INT PRIMARY KEY, # 主键
	sName VARCHAR(20) NOT NULL, # 非空
	gender CHAR CHECK(gender='男' OR gender='女'), #检查
	seat INT UNIQUE, # 唯一
	age INT DEFAULT 18, # 默认
	majorId INT REFERENCES major(id) #外键
);

CREATE TABLE major(
	id INT PRIMARY KEY,
	mName VARCHAR(20) NOT NULL
)

表级约束

CREATE TABLE stu(
	id INT,
	sName VARCHAR(20),
	gender CHAR,
	seat INT,
	majorId INT,
	
        # CONSTRAINT 别名 可省略
	CONSTRAINT Pk PRIMARY KEY(id), #外键
	CONSTRAINT uq UNIQUE(seat), #唯一
	CONSTRAINT fk_stu_major FOREIGN KEY(majorId) REFERENCES major(id) # 外键
);

主键和唯一区别

唯一性 是否为空 一个表中是否有多个 是否允许组合
主键 × 至多1个 √,不推荐
唯一 可以多个 √,不推荐

外键

  • 要求在从表设置外键关系
  • 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
  • 主表的关联列必须是一个key(一般是主键或唯一)
  • 插入数据时,先插入主表,再插入从表
  • 删除数据时,先删除从表,再删除主表

标识列即自增长

id INT PRIMARY KEY AUTO_INCREMENT, #设置id是自增长类型

/*
1、标识列不一定要和主键搭配,但要求是一个key
2、一个表可以有至多一个标识列
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment = 3;设置步长
*/
原文地址:https://www.cnblogs.com/huyuqing/p/14407436.html