Mysql

it2025-05-24  18

数据库的创建和删除

#DDL语言 /*

DDL:数据定义语言 Data Define Language

create 创建 alter 修改 drop 删除

*/

#库的管理(了解)

#一、库的创建 /* 语法: create database(if not exists) 库名 */

CREATE DATABASE IF NOT EXISTS studb;

#二、库的删除

/* 语法: drop database(if exists) 库名 */

DROP DATABASE IF EXISTS studb;

#表的管理(重点)

#一、创建表(重点) #1.简单语法 /*

核心语法: create table(if not exists) 表名( 字段名 字段类型 (字段约束), 字段名 字段类型 (字段约束), … ); */

#示例1:创建学员信息表

CREATE TABLE IF NOT EXISTS stuinfo( id INT PRIMARY KEY,#主键 stuname VARCHAR(20),#varchar叫可变长度字符串。根据实际字符数来决定长度。 borndate DATETIME, email VARCHAR(20), gender CHAR(1) DEFAULT ‘女’, age INT majorId INT );

DESC stuinfo;

#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的含义能保存的字符的最大个数,必写,可变长度的字符。 #日期型 DATETIME/DATE/TIME/TIMESTAMP#时间戳 DATE:#只有日期 TIME:#只有时间 DATETIME:#日期+时间,占8个字节,保存日期范围1900-1-1~9999-12-31,不受时区和服务器版本的影响 TIMESTAMP:#时间戳,日期+时间,占4个字节,保存日期范围1970-1-1~2038-12-31,受时区和服务器版本的影响

#3.常见的约束

/* 一、说明:用于额外限定表中的字段值,为了保证数据的完整性(准确性和可靠性) 二、常见的六大约束: NOT NULL非空:该字段的值为必填项 UNIQUE 唯一:该字段的值不能重复,可以为空,一个表中可以有多个 PRIMARY KEY 主键:该字段的值不能重复,不能为空,一个表中只能有一个,一般来讲,一个表最好有一个主键 DEFAULT 默认:该字段的值如果不手动插入,也有默认值 CHECK 检查【mysql不支持】:用于检测该字段的值是否满足某个条件 FOREIGN KEY 外键:用于限定两个表的关系,从表的某列值要来自于主表的某列值.作为外键的列必须同时满足两个条件,第一个是列值不能随便取,取值有范围 第二个条件是取值范围必须是另一个表的主键列值范围。一旦建立主外键联系,外键列不能出现主键列没有的列值。当某一个行的主键正在被引用,则这行数据不能删除。

三、分类

表级约束:只有外键、主键、唯一 列级约束:只有非空、默认、主键、唯一 */

#创建表时添加约束

CREATE TABLE IF NOT EXISTS major( id INT PRIMARY KEY, majorName VARCHAR(20) ); INSERT INTO major(id,majorname)VALUES(1,‘一年级’); INSERT INTO major(id,majorname)VALUES(2,‘二年级’); INSERT INTO major(id,majorname)VALUES(3,‘三年级’); INSERT INTO major(id,majorname)VALUES(4,‘四年级’);

DELETE FROM major; DELETE FROM student;

SELECT * FROM major; SELECT * FROM student;

DELETE FROM major WHERE id=3; DELETE FROM stuinfo WHERE majorid=4; DELETE FROM major WHERE id=4;

INSERT INTO stuinfo(id,stuname,seat,majorid)VALUES(1,‘Tom’,‘1000’,1); INSERT INTO stuinfo(id,stuname,seat,majorid)VALUES(2,‘Jerry’,‘1001’,2); INSERT INTO stuinfo(id,stuname,seat,majorid)VALUES(3,‘mary’,‘1002’,4);

DROP TABLE IF EXISTS stuinfo;

CREATE TABLE IF NOT EXISTS stuinfo( id INT PRIMARY KEY AUTO_INCREMENT,#主键,自增列,列值不需要手动插入,默认从1开始每次增长1。不要手动插入主键的值。 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就是外键列,外键列所在的表叫从表,REFERENCES引用 major是主表,主表必须出主键,id一定是major的主键。 CONSTRAINT fk_major_stuinfo FOREIGN KEY(majorid) REFERENCES major(id) );

#二、修改表(了解),表里不能有数据

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;

最新回复(0)