关键字
create 创建
alter 修改
drop 删除
语法:
CREATE DATABASE IF NOT EXISTS 库名;
CREATE DATABASE IF NOT EXISTS studb;
语法:
DROP DATABASE IF EXISTS 库名;
DROP DATABASE IF EXISTS studb;
核心语法
CREATE TABLE (IF NOT EXISTS) 表名(
字段名 字段类型 (字段约束),
字段名 字段类型 (字段约束),
......
)
CREATE TABLE IF NOT EXISTS stuinfo(
id INT,
stuname VARCHAR(20), # VARCHAR 可变长度字符串,空间在给定的长度的范围之内,如果不超过的话,就把剩余的空间释放掉
borndate DATETIME,
email VARCHAR(20),
gender VARCHAR(20),
majorId INTmyemployeesstuinfo
);
DESC stuinfo;
# 整型
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,受时区和服务器的影响
一、说明:用于额外限定表中的字段值,为了保证数据的完整性(准确性和可靠性)
二、常见的六大约束
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;
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;
DROP TABLE IF EXISTS student;
#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;