菜单
本页目录

进入MySQL

D:
cd D:\Program Files (x86)\MySQL\MySQLInstalls\bin
mysql -u root -p
root

DDL

查询所有数据库
show databases;
查询当前数据库
select database();
创建数据库
create database [ if not exists ] 数据库名;

案例: 创建一个itcast数据库。

create database itcast;
使用数据库
use 数据库名 ;

案例:切换到itcast数据

use itcast;
删除数据库
drop database [ if exists ] 数据库名 ;

案例:删除itcast数据库

drop database if exists itcast; -- itcast数据库存在时删除

DML

DQL

DCL

数据库的概念

数据库的概念

数据库DataBase简称DB是按照数据结构来组织、存储和管理数据的仓库。 只不过这个仓库是在计算机存储设备上的。 三个特点:有组织、永久存储、可共享

数据表的概念

表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。表的最简单形式是由行和列组成,分别都包含着数据。表在数据库占据实际的物理空间,可以是永久的或是临时的。 行 一行 元祖 记录 列 一列 数据元素 包含了相同类型的数据。 表:数据的主要存储方式

数据库管理系统概念

数据库管理系统简称DBMS,是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理与控制,以保证数据库的安全性和完整性。

DBMS的主要功能 (1)数据定义功能DDL (2)数据组织、存储和管理 (3)数据操作功能DML (4)数据库的事务管理和运行管理 (5)数据库的建立和维护功能 (6)通信功能

数据库系统

数据库系统简称DBS,它是由用户、应用程序、数据库管理员、数据库(Data)、数据库管理系统(DBMS)所构成的。

人工管理阶段 没有操作系统 没有专门处理数据的软件 批处理 科学计算 不需要长期将数据保存 无软件系统

文件系统阶段 使用磁盘等设备存储数据 有专门的数据库管理软件称为文件系统 批处理和联机试处理 数据长期保存 数据共享性差 数据冗余度高 浪费存储空间 数据独立性差

数据库管理阶段 数据结构话 数据冗余度低 数据独立性高 数据由DBMS统一管理和控制

概念数据模型 逻辑数据模型 物理数据模型

常用的逻辑数据模型 非关系模型 包括层次模型和网状模型 关系模型 面向对象模型

数据库操作DDL

数据库创建

create database mytest;
create database  if not exists mytest;
create database  if not exists mytest character set utf8;

数据库查询

show database; //查询所有数据库
show create database mytest;//查询已创建的数据库

数据库更新

alter database mytest character set utf8; 

数据库删除

drop database mytest;
drop database if exists mytest;

数据库使用

use mytest;

数据操作DML(增删改查)

数据表创建与删除

use 库名;
create table 表名(字段列表);
drop table 表名;

表中数据查询

select * from 表名;

表中数据插入

insert into 表名 values (字段列表);

表中数据更新

update 表名 set 字段="值" where 子句 order by 子句 limit 子句;

WHERE 子句:可选项。用于限定表中要修改的行。若不指定,则修改表中所有的行。 ORDER BY 子句:可选项。用于限定表中的行被修改的次序。 LIMIT 子句:可选项。用于限定被修改的行数。

表中数据清除

delete from 表名;

MySQL数据库

创建数据库

CREATE DATABASE registration DEFAULT CHARACTER SET gbk;

显示所有数据库

SHOW DATABASES;

显示指定数据库的信息

SHOW CREATE DATABASE registration;

选择当前数据库

use registration;

修改数据库

ALTER DATABASE registration DEFAULT CHARSET utf8;

删除数据库

DROP DATABASE registration;

MySQL数据库表

MySQL数据库表结构的创建

创建数据库registration,并指定默认字符集为gbk

CREATE DATABASE registration DEFAULT CHARACTER SET gbk;

创建数据表

use registration;

CREATE TABLE Department(
  DId CHAR(3) PRIMARY KEY COMMENT '系号',
  DName VARCHAR(10) NOT NULL UNIQUE COMMENT '系名',
  DHeader CHAR(4) COMMENT '系主任'
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='系部表';



CREATE TABLE Major(
  MId char(3) COMMENT '专业编号',
  MName char(20) NOT NULL UNIQUE COMMENT '专业名称',
  MDept char(3) DEFAULT NULL COMMENT '所属系部',
  PRIMARY KEY (MId),
  FOREIGN KEY (MDept) REFERENCES Department (DId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='专业表';



CREATE TABLE Teacher(
  TId char(4) PRIMARY KEY COMMENT '教师编号',
  TName varchar(10) NOT NULL COMMENT '教师姓名',
  TGender enum('男','女') COMMENT '性别',
  TDept char(3) COMMENT '所在系部',
  TRank enum('助教','讲师','副教授','教授') DEFAULT NULL COMMENT '职称',
  CONSTRAINT fk_tdept FOREIGN KEY (TDept) REFERENCES Department (DId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='教师表';



CREATE TABLE Student( 
  SId char(4) PRIMARY KEY COMMENT '学号',
  SName varchar(10) NOT NULL COMMENT '姓名',
  SGender enum('男','女') DEFAULT '男' COMMENT '性别',
  SBirth date COMMENT '出生日期',
  SMajor char(3) COMMENT '所属专业',
  CONSTRAINT fk_smajor FOREIGN KEY (SMajor) REFERENCES Major (MId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='学生表';



CREATE TABLE Course(
  CId char(3) COMMENT '课程号',
  CName char(20) NOT NULL COMMENT '课程名',
  CCredit int DEFAULT NULL COMMENT '学分',
  CLimit int DEFAULT 60 COMMENT '限选人数',
  PRIMARY KEY(CId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='课程表';



CREATE TABLE Register (
  SId char(4) COMMENT '学号',
  CId char(3) COMMENT '课程号',
  Score decimal(5,2) COMMENT '成绩',
  RDate datetime DEFAULT NOW() COMMENT '选课时间',
  PRIMARY KEY (SId,CId),
  CONSTRAINT fk_CId FOREIGN KEY (CId) REFERENCES Course (CId),
  CONSTRAINT fk_SId FOREIGN KEY (SId) REFERENCES Student (SId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='注册表';



ALTER TABLE Department
ADD CONSTRAINT fk_dheader FOREIGN KEY (DHeader) REFERENCES Teacher (TId);

MySQL数据库表结构的修改

use registration;

修改表名

ALTER TABLE 表名 RENAME TO 表名
ALTER TABLE Register RENAME TO Choose;
ALTER TABLE Choose RENAME TO Register;

字段的修改

增加字段
ALTER TABLE 表名
ADD [COLUMN] 字段名 数据类型 [列级约束] [First | AFTER 字段名];
ALTER TABLE Register
ADD RId INT AUTO_INCREMENT UNIQUE FIRST;
删除字段
ALTER TABLE 表名
DROP [COLUMN]  字段名
ALTER TABLE Register
DROP RId;
修改字段名和数据类型

修改字段名和数据类型属于表结构的修改,使用SQL语句ALTER TABLE 来实现,具体语法如下:

ALTER TABLE 表名
CHANGE  [COLUMN]  原字段名  新字段名  新数据类型

只修改字段名时,字段类型不变,为原来的数据类型。具体为:

ALTER TABLE 表名
CHANGE  [COLUMN]  原字段名  新字段名  原数据类型

只修改数据类型时,字段名不变。具体为:

ALTER TABLE 表名
CHANGE  [COLUMN]  原字段名  原字段名  新数据类型

修改字段的数据类型除了CHANGE关键字可以实现,MODIFY关键字也可以实现,具体语法如下:

ALTER TABLE 表名
MODIFY  [COLUMN]  字段名   新数据类型

注:MODIFY关键字仅对字段的数据类型进行修改。

例如

将registration数据库Register表的Score字段改名为Grade。

ALTER TABLE Register
CHANGE Score Grade decimal(5,2);

将registration数据库Register表的Grade字段的数据类型改为INT类型。

ALTER TABLE Register
CHANGE Grade Grade int

将registration数据库Register表的Grade字段改名为Score,数据类型改为decimal(5,2)。

ALTER TABLE Register
CHANGE Grade  Score decimal(5,2);

MODIFY关键字将registration数据库Register表的Score字段的数据类型改为INT类型。

ALTER TABLE Register
MODIFY Score int;
修改字段的排列位置
表中各列的位置是可以调整的,修改字段的排列位置属于表结构的修改,使用SQL语句ALTER TABLE来实现,具体语法如下:
ALTER TABLE表名
CHANGE [COLUMN]字段名1字段名1数据类型FIRST | AFTER字段名2;

注:两个字段名1表示不修改原字段名。 FIRST表示将字段名1对应的字段调整到第一列。 AFTER字段名2表示将原字段名1对应的字段移动到字段名2对应字段之后。

修改字段的排列位置也可以用modify语句,语法规则如下:
ALTER TABLE 表名
MODIFY [COLUMN] 字段名1 数据类型 FIRST | AFTER 字段名2 

将registation数据库Register表的Score字段放在RDate字段之后。 代码如下:

ALTER TABLE Register
CHANGE Score Score int AFTER RDate;

约束的修改

在MISQL中,约束的修改属于表结构的修改,约束的修改包括删除约束和添加约束。下面分别介绍。

删除约束

数据库创建完成后,根据需要可以将表中的主码纳束、 外码约束、唯一性约束以及默认值约束使用SQL语句ALTER TABLE进行删除。

在MySQL中删除主码约束的语法格式如下:
ALTER TABLE 表名
DROP PRIMARY KEY;

删除registration数据库Register(注册表)中的主码约束。 代码如下:

ALTER TABLE Register
DROP PRIMARY KEY;
对于数据库中定义的外码,如果不再需要,可以将其删除。外码一旦删除,就会解除父表和子表间的父子关系,在MySQL中删除外码约束的语法格式如下:
ALTER TABLE 表名 DROP FOREIGN KEY 外码约束名;

删除registration数据库Register(注册表)中的两个外码约束。 代码如下:

ALTER TABLE Register
DROP FOREIGN KEY fk_CId;
ALTER TABLE Register
DROP FOREICN KEY fk_SId;

注:外码约束fk_CId的删除,将解除Couse表和Register 表之间的父子关系: 外码约束服fk_SId的删除,将解除Sudent表和Register 表之间的父子关系。

在MySQL中删除唯一约束的语法格式如下:
ALTER TABLE 表名
DROP INDEX 唯一约束名;

删除rgistration数据库Depatmen(系部表)中的唯一性约束。 代码如下:

ALTER TABLE Department
DROP INDEX DName ;

Department(系部表)中唯一性约束的名称是系统分配的,而删除唯一性约束需要指定约束名。查看表中的约束名可以通过以下两种方式: ①第种使用MySQL命令:

SHOW CREATE TABLE Department;

②第二种使用SQL语句:

SELECT constraint_name, constraint_ type
FROM information_schema.table_ constraints
WHERE table_schema='registration' AND table_ name='Department' ;
在MySQL中删除默认值约束的语法规则如下:

删除默认值约束也可以用CHANGE关键字,语法规则如下:

ALTER TABLE 表名
CHANGE [COLUMN]  原字段名 原字段名 原数据类型 DEFAULT NULL;

删除默认值约束也可以用modify子句,语法规则如下:

ALTER TABLE 表名
MODIFY [COLUMN] 字段名 数据类型 DEFAULT NULL;

修改registration数据库中的Course( 课程表)数据表,将CLimit(限选人数)字段的默认值约束删除。 代码如下:

ALTER TABLE Course
CHANGE CLimit CLimit int DEFAULT NULL;
在MySQL中删除非空约束的语法规则如下:
ALTER TABLE 表名
CHANCE [COLUMN] 原字段名 原字段名 原数据类型 NULL;

删除非空约束也可以用modify子句,语法规则如下:

ALTER TABLE 表名
MODIFY [COLUMN] 字段名 数据类型 NULL;

修改registration数据库中的Course(课程表)数据表,将CName(课程名)字段的非空约束删除。代码如下:

ALTER TABLE Course
CHANGE CName CName int NULL;
增加约束

数据库表创建完成后,可以根据需要使用SQL语句ALTER TABLE为字段添加 主码约束、外码约束、唯一约束以及默认值约束。

在MySOL中添加主键约束的语法规则为:
ALTER TABLE 表名
ADD PRIMARY KEY(列名);

为regisration数据库Regiser(注册表)添加主码约束,主码是(SId, CId)。 代码如下:

ALTER TABLE Register
ADD PRIMARY KEY (SId,Cld);
在MySQL中添加外码约束的语法规则为:
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] FOREIGN KEY (字段名) RFFRENCES 父表(主码字段名)

修改registation 数据库中的Register( 注册表),将字段SId设置为外码,与数据表Student的主键SId进行关联,同时将字段CId设置为外码,与数据表Couse的主键CId进行关联。 代码如下:

ALTER TABLE Register
ADD FOREICN KEY (SId) REFERENCES Student (SId);
ALTER TABLE Register
ADD CONSTRAINT fk_CId FOREIGN KEY (Cld) REFERENCES Couse (CId);

注:字段SId上的外码约束没有取名,由系统自动分配名字。CONSTRAINT约束只能定义表级约束。

在MySQL中添加唯一约束的语法格式为 :
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] UNIQUE (列名);

修改registration数据库中Department(系部表),指定部门名称唯一。 代码如下:

ALTER TABLE Department
ADD UNIQUE(DName);
在MySQL中添加默认值约束的语法规则如下:
ALTER TABLE 表名
CHANGE [COLUMN] 原字段名 原字段名 原数据类型 DEFAULT 默认值;

添加默认值约束也可以用modify子句,语法规则如下:

ALTER TABLE 表名
MODIFY [COLUMN] 字段名 数据类型 DEFAULT 默认值;

修改registration数据库中的Course(课程表)数据表,为CLimit(限选人数)字段设置默认值,默认值为60。 代码如下:

ALTER TABLE Course
CHANGE CLimit CLimit int DEFAULT 60;
在MySQL中添加非空约束的语法规则如下:
ALTER TABLE 表名
CHANGE [COLUMN] 原字段名 原字段名 原数据类型 NOT NULL;

添加非空约束也可以使用modity子句,语法规则如下:

ALTER TABLE 表名
MODIFY [COLUMN] 字段名 数据类型 NOT NULL;

修改registration数据库中的Course(课程表)数据表,指定CName(课程名)字段,不能为空。 代码如下:

ALTER TABLE Course
CHANGE CName CName int NOT NULL;

选项的修改

在MySQL中,选项的修改是指对存储引擎、默认字符集、索引关键字是否压缩以及自增字段的初始值等进行设置。

  1. 在MySQL中修改存储引擎的语法规则为:
ALTER TABLE 表名

ENGINE=新的存储引擎类型

  1. 在MySQL中修改默认字符集的语法规则为:
ALTER TABLE 表名
DEFAULT CHARSET=新的字符集
  1. 在MySQL中修改索引关键字压缩方式的语法规则为:
ALTER TABLE 表名
PACK_KEYS=新的压缩类型
  1. 在MySQL中设置自增字段初始值的语法规则为:
ALTER TABLE 表名
AUTO_INCREMENT=新的初始值

将Couse表的默认字符集设置为utf8,自增字段初始值设置为0。 代码如下:

ALTER TABLE Course
DEFAULT CHARSET=utf8; 
ALTER TABLE Course
AUTO_ INCREMENT=0;

MySQL数据库表的其他操作

use registration;

查看当前数据库中的所有表

SHOW TABLES;

查看指定表的表结构

DESC 表名;

查看registration数据库Department(系部表)的表结构

DESC Department;

查看指定表的详细信息

SHOW CREATE TABLE 表名;

查看registration数据库Department(系部表)的详细信息

SHOW CREATE TABLE Department;

复制表

数据库表创建后,可以对其进行复制。复制表有如下两种方法:

方法一:在CREATE TABLE语句后加LIKE字句,该方法只能复制表结构,不能复制表中的记录。具体语法如下:
CREATE TABLE 新表名
LIKE 原表名

将registration数据库中Department(系部表)的表结构复制到新表Dept中。 代码如下:

USE registration;
CREATE TABLE Dept LIKE Department;

注:复制表结构之前,先要选择原表所在的数据库作为当前数据库。

方法二:在CREATE TABLE语句后加SELECT子句,该方法不仅可以复制表结构,还能复制表中的记录。具体语法如下:
CREATE TABLE 新表名
SELECT *
FROM 源表名
[WHERE  条件表达式]

注:如果在复制表结构的同时还要复制表中的所有记录,则删去WHERE条件语句。 如果只复制表结构,不复制表中的记录,则在WHERE中写一个不成立的条件,如1=2或2=3等。

采用方法二将registration数据库中Department(系部表)的表结构复制到新表 Deptl中。代码如下:

USE registration;
CREATE TABLE Dept1
SELECT *
FROM Department
WHERE 1=2;

在复制表结构的同时复制表中的所有记录可以使用以下语句:

USE registration;
CREATE TABLE Dept1
SELECT *
FROM Department

删除表

DROP TABLE [IF EXISTS] 表名;

删除registration数据库中的Dept1表。

DROP TABLE Dept1;

删除registration数据库中的Course(课程表)。

ALTER TABLE Register DROP FOREIGN KEY fk_CId;
DROP TABLE Course;

注:先在子表中删除外码约束。