【MySQL学习】DDL:数据定义语言 Data Define Language

DDL数据定义语言

  • 一、库的管理(了解)
      • 1.库的创建
      • 2.库的删除
  • 二、表的管理(了解)
      • 1.创建表(重点)
        • 1.1 简单语法
          • 示例1:创建学员信息表
        • 1.2 常见的数据类型
        • 1.3.常见的约束
      • 2.修改表(了解),表里不能有数据
      • 3.删除表(重点)
      • 4.复制表(了解)

关键字
create 创建
alter 修改
drop 删除

一、库的管理(了解)

1.库的创建

语法:

CREATE DATABASE IF NOT EXISTS 库名;
CREATE DATABASE IF NOT EXISTS studb;

2.库的删除

语法:

DROP DATABASE IF EXISTS 库名;
DROP DATABASE IF EXISTS studb;

二、表的管理(了解)

1.创建表(重点)

1.1 简单语法

核心语法

CREATE TABLE (IF NOT EXISTS) 表名(
          字段名   字段类型   (字段约束),
          字段名   字段类型   (字段约束),
          ......      
)
示例1:创建学员信息表
CREATE TABLE IF NOT EXISTS stuinfo(
      id INT,
      stuname VARCHAR(20), # VARCHAR 可变长度字符串,空间在给定的长度的范围之内,如果不超过的话,就把剩余的空间释放掉
      borndate DATETIME,
      email VARCHAR(20),
      gender VARCHAR(20),
      majorId INTmyemployeesstuinfo
      );

DESC stuinfo;

1.2 常见的数据类型

# 整型
TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT 
# 浮点型
FLOAT(n,m)/DOUBLE(n,m)/DECIMAL(n,m)
# n:代表整数部位 + 小数部位 的最大长度
# m:代表小数部位的最大长度
# 举列: FLOAT(5,3)  :-99.999 ~ 99.999
# 字符型
CHAR(n)/VARCHAR(n)/TEXT
TEXT: # 用于保存较长的文本,比如备注文字,协议文字
CHAR(n):# 参数n的含义能保存的字符的最大个数,可选,默认是1,固定长度的字符
VARCHAR(n)# 参数n的含义能保存的字符的最大个数,必写,可变长度的字符
# P.S:VARCHAR 可变长度字符串,空间在给定的长度的范围之内,如果不超过的话,就把剩余的空间释放掉,如果超过了预定的长度也不会扩容 
# 日期型
DATETIME/DATE/TIME/TIMESTAMP
DATE # 只有日期
TIME # 只有时间
DATETIME #日期+时间,占八个字节,保存日期范围1900-1-1~9999-12-31,不受时区和服务器版本的影响
TIMESTAMP #时间戳,日期 + 时间,占4个字节,保存日期范围1970-1-1~2038-12-31,受时区和服务器的影响

1.3.常见的约束

一、说明:用于额外限定表中的字段值,为了保证数据的完整性(准确性和可靠性)
二、常见的六大约束

NOT NULL 非空:该字段的值为必填项
UNIQUE   唯一:该字段的值不能重复,可以为空,一个表中可以有多个,比如是学号
PRIMARY KEY 主键:该字段的值不能重复,不能为空,一个表中只能有一个,一般来讲,一个表最好有一个主键
DEFAULT 默认:该字段的值如果不是手动插入,也有默认值
CHECK 检查[mysql不支持]:用于检测该字段的值是否满足某个条件
FOREIGN KEY 外键:用于限定两个表的关系,从表的某列值要来自于主表的某列值 

作为外键的列必须同时满足两个条件:
1.列值不能随便取,
2.列值必须是另一个表的主键列值

一旦建立主外键联系,外键列不能出现主键列没有的列值,当某一个行的主键正在被引用,则这行数据不能被删除

# 演示主键不可以重复
CREATE TABLE IF NOT EXISTS major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
    );
    
DESC major;
INSERT INTO major(id,majorname)VALUES(1,'研一');
SELECT * FROM major;
INSERT INTO major(id,majorname)VALUES(2,'研二');
SELECT * FROM major;
INSERT INTO major(id,majorname)VALUES(3,'研三');
SELECT * FROM major;
DROP TABLES IF EXISTS stuinfo;
USE myemployees;
CREATE TABLE IF NOT EXISTS stuinfo(
      id INT PRIMARY KEY,  # auto_increase 主键
      stuname VARCHAR(20) NOT NULL, # 非空
      borndate 	DATETIME ,
      email VARCHAR(20) CHECK (email LIKE '%@%'), # 检查
      gender CHAR(1) DEFAULT '男', # 默认
      seat INT UNIQUE ,# 唯一
      majorId INT,  # 这个是外键
      # FOREIGN KEY(majorid)majorId就是外键列,外键所在的表叫从表,REFERENCE引用 major 是主表,主表必须出主键,id 一定是 major 的主键。   
      
      CONSTRAINT fk_major_studio FOREIGN KEY (majorid) REFERENCES major(id)  
      # 在这里是majorId引用 major 的id来充当外键,fk_major_studio 起名字起的 见名知意
      );

INSERT INTO stuinfo(id,stuname,seat,majorid)VALUES(1,'Tom','1000',1);
SELECT * FROM stuinfo;
INSERT INTO stuinfo(id,stuname,seat,majorid)VALUES(2,'Jerry','1001',3);
SELECT * FROM stuinfo;

2.修改表(了解),表里不能有数据

DROP TABLE IF EXISTS student;
CREATE TABLE IF NOT EXISTS student(
	id INT ,
	stuname VARCHAR(20),
	borndate DATETIME,
	email VARCHAR(20) ,
	gender CHAR(1),
	seat INT,
	majorId INT 
);
语法:alter table 表名 add/drop/modify/change column 列名 字段类型 新约束;
DESC student;
#1.修改表名
ALTER TABLE stuinfo RENAME TO student;

#2.修改列名
ALTER TABLE student CHANGE COLUMN gender sex CHAR(1);

#3.修改列的类型

ALTER TABLE student MODIFY COLUMN borndate TIMESTAMP;
#4.添加约束
#添加主键
ALTER TABLE student MODIFY COLUMN id INT PRIMARY KEY;-- 列级约束的添加语法
ALTER TABLE student ADD PRIMARY KEY(id);-- 表级约束的添加语法

#添加非空

ALTER TABLE student MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

#添加唯一
#ALTER TABLE student MODIFY COLUMN seat INT UNIQUE;-- 列级约束的添加语法
ALTER TABLE student ADD UNIQUE(seat);-- 表级约束的添加语法

#添加默认
ALTER TABLE student MODIFY COLUMN gender CHAR(1) DEFAULT '男';

#添加外键
ALTER TABLE student ADD CONSTRAINT fk_m_s FOREIGN KEY (majorid) REFERENCES major(id);


#5.删除约束

#删除主键
ALTER TABLE student DROP PRIMARY KEY;
ALTER TABLE student MODIFY COLUMN id INT NULL;

#删除唯一
ALTER TABLE student DROP INDEX seat;

#删除非空
ALTER TABLE student MODIFY COLUMN stuname VARCHAR(20);

#删除默认
ALTER TABLE student MODIFY COLUMN gender CHAR(1);

#删除外键
ALTER TABLE student DROP FOREIGN KEY fk_m_s;

#6.添加新列
ALTER TABLE student ADD COLUMN phone VARCHAR(20);
DESC student;

#7.删除列
ALTER TABLE student DROP COLUMN phone;

3.删除表(重点)

DROP TABLE IF EXISTS student;

4.复制表(了解)

#1.仅仅只是复制表的结构,没有数据
CREATE TABLE newTable1 LIKE stuinfo;
#2.复制表的结构+数据
CREATE TABLE newTable2 SELECT * FROM stuinfo;
#案例:复制一个新表copy,里面的列是email和stuname,但没有数据

CREATE TABLE copy 
SELECT email,stuname
FROM stuinfo
WHERE 1=2;

SELECT * FROM copy;

你可能感兴趣的:(MySQL学习,mysql,数据库)