【MySQL基础之DDL】数据库、表、字段
SQL语句的分类:
DDL:Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML:Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL:Data Query Language 数据查询语言,用来查询数据库表中的记录
DCL:Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
# SQL语句不区分大小写,但是为了后期的实际使用,建议关键字都使用大写。
# 每一条语句结尾需要使用;分号结束。
# 语句中的空格,可以是一个,也可以是多个空格,多个空格也会当成一个空格,不影响使用。
# 单行注释可以用两个横杠 -- 或一个井号 # 表示,多行注释时,使用 /* 和 */ 来表示。
# Mysql服务启动命令:

DDL - 数据库操作
DDL - 数据库操作·练习
#### 显示所有数据库
【练习】显示Mysq数据库服务器里面的所有数据库:
SHOW DATABASES ;
说明:这里是显示所有的数据库,而不是哪一个数据库,所以这里的 database 是用的其复数形式 databases ,也就是后面多一个s字母,这里主要记住 database 这个单词是数据库的意思。
初次安装完成后,使用该语句显示全部数据库时,会显示出四个数据库:information_schema 、 mysql 、 performance_schema 、 sys 这四个数据库为Mysql 软件自带的数据库。
单词 :show [ʃəʊ] 显示;展示
#### 创建一个数据库
【练习】在数据库服务器里面创建一个叫 test 的数据库:
CREATE DATABASE test ;
说明:在Idea里面,创建数据库也可以用 create schema test; 效果是一样的,也就是,在idea里面,可以将 schema 这个单词也当成是 database 一样的意思,这里主要记住 create 这个单词是创建的意思。
单词 :create [kri'eɪt] 创建; 创造 ;创作
#### 创建一个已经存在的数据库,会发生什么?
【练习】再创建一个叫 test 的数据库,这个是已经存在的数据库,看看创建时会发生什么?
CREATE DATABASE test ;
CREATE DATABASE test ;
说明:由于第一条创建了一个叫 test 数据库,第二条再创建一个叫 test 的数据库时,系统就会报错。
报错信息为:Can't create database 'kuozhen'; database exists (无法创建数据库“kuozhen” ,数据库存在)
#### 创建一个数据库,如果不存在就创建
【练习】创建一个数据库,如果不存在同名的数据库则创建(存在同名数据库则不执行):
CREATE DATABASE test ;
CREATE DATABASE IF NOT EXISETS test ;
在创建语句中加入 if not exisets 这个可选项语句时,如果这个数据库已经存在,系统就不报错了,如果数据库不存在就正常创建。
单词 :exists [ɪɡ'zɪst] 存在,生存,活着 。
【练习】创建一个叫 text 的数据库,并指定数据库的字符集为utf8mb4,语句如下:
CREATE DATABASE text DEFAULT CHARSET utf8mb4 ;
说明,因为UTF-8字符集默认是三个字节,但是我们有的字是占4个字节的,所以一般需要指定为 utf8mb4 以获得更好的兼容性,这个utf8mb4字符集是4字节的。
单词:default [dɪ'fɔːlt] 默认;默认(值)
#### 删除数据库
【练习】删除Mysql数据库服务器里面我们刚才创建的 test 的数据库:
DROP DATABASE test ;
单词:drop [drɒp] 减少;降低;
【练习】刚才我们已经删除了 test 数据库,如果再次执行删除 test 数据库,会发生什么?
DROP DATABASE test ;
说明:会报错。当删除一个不存在的数据库时,系统会报错。
【练习】删除数据库服务器里面某一个数据库,如果存在就删除, 如果不存在就不管,也不用报错提示:
DROP DATABASE IF EXISETS ppp ;
说明:if exisets 表示如果存在就删除的意思。
#### 使用数据库
【练习】使用 use 切换到 test 数据库
USE test ;
说明:使用某个数据库,可以理解为 切换到 / 进入到 某个数据库的意思,相当于Linux系统中的 cd 命令,我们要使用(进入)哪个数据库,就 use 哪个就可以了。
单词:use [juːs] 使用
#### 显示当前所在数据库
【练习】使用 us 切换到某个数据库里面后,再使用 select 查看所处的数据库:
USE test ;
SELECT DATABASE();
说明:select database() 这句语句,相当于Linux系统中的 pwd命令,显示当前所处的目录一样,database() 是一个函数,后面带有一个括号,不能忘记了。
单词:select [sɪ'lekt] 挑选;精选的;被挑选出来的
DDL - 表操作
使用表操作的前提是,需要使用use进入到某一个数据库里面后才能使用。
显示当前数据库里的所
【练习】进入test数据库
#进入test数据库表
USE test;#进入到 test
【练习】进入一个叫test的数据库,然后显示这个数据库的表结构
USE test;
SHOW table;# 显示当前数据库的表结构,如果数据库里面是空的,也就是说里面没有表结构,则系统会提示:Emtpy set
创建表
CREATE TABLE name ( 字段1 字段1的类型 [COMMENT 字段1的注释], 字段2 字段2的类型 [COMMENT 字段2的注释], 字段3 字段3的类型 [COMMENT 字段3的注释], …… 字段n 字段n的类型 [COMMENT 字段n的注释] ) [COMMENT 表注释]; # 方括号部分(COMMENT属性)为可选项.
说明:括号内的最后一条,没有逗号。
COMMENT 是可选参数.
【练习1】创建一个学生信息表,表名student,四个字段分别为:id、姓名、年龄、性别,请创建时指定适合字段的数据类型。
CREATE TABLE student (
id int ,
name varchar(50) ,
age int ,
sex varthar(1)
) ;
【练习2】创建一个学生信息表,请把表和字段带上注释。
CREATE TABLE student (
id int comment ‘编号’,
name varchar(50) comment ‘姓名’,
age int comment ‘年龄’,
sex varthar(1) comment ‘性别’
) comment ‘学生基本信息表’ ;
数据类型
MySQL中的数据类型有很多,主要分为三类: 数值类型、字符串类型、日期时间类型。
常用的数值类 数据类型
| 数据类型 | 描述 | 占用字节大小 | 有符合范围(SIGNED) | 无符号范围(UNSIGNED) |
| TINYINT | 极小·整数值 | 1 byte | (-128,127) | (0~255) |
| SMALLINT | 小·整数值 | 2 byte | (-32768,32767) | (0~65535) |
| MEDIUMINT | 中等大小·整数值 | 3 byte | (-8388608,8388607) | (0~16777215) |
| INT \ INTEGER | 大整数值 | 4 byte | (-2147483648,) | (0~4294967295) |
| BIGINT | 极大整数值 | 8 byte | () | |
| FLOAT | 单精度浮点数值 | 4 byte | () | |
| DOUBLE | 双单精度浮点数值 | 8 byte | () | |
| DECIMAL | 小数值(精确定点数) | 依赖M(精度)和D(标度)的值 | 依赖M(精度)和D(标度)的值 |
TINYINT 关键字 是单词 tiny + int 的组合,表示极小的整数,单词:Tiny [ˈtaɪni] 极小的 。
SMALLINT 关键字 是单词 small + int 的组合,表示小的整数,单词:Small [smɔːl] 小型的,小号的 。
MEDIUMINT 关键字 是单词 medium + int 的组合,表示中等大小的整数,单词: medium [ˈmiːdiəm] 中等的,中号的。
【练习】定义年龄字段,适合使用那种数据类型呢?
INT数据类型 和 TINYINT 都可以,但是int占了4个字节,比价浪费内存空间,可以用 tinyint 数据类型,而且年龄是没有负数的,所以我们可以使用无符号的,具体为:age tinyint unsigned;
【练习】在数据库里面新建一张学生信息表,表名字 student_info 建表时使用comment带上注释。
学生信息表包含以下字段,要求使用合理的数据类型和字符长度:
1、编号(名称 id,纯数字)
2、学号(名称 student_id_number,字符串类型,限制长度10位内)
3、学生姓名(名称 name,字符串类型,限制长度3位以内)
4、性别(名称 sex,仅需储存一个汉字,男或女,长度1位)
5、年龄(名称 age,整数数值型类型,正常学生期年龄一般不会超过100岁,不能是负数)
6、身高(名称 height [haɪt],单位米,浮点数值数据类型,总3位,小数点2位)
6、体重(名称 weight [weɪt],单位Kg,浮点数值数据类型,总3位,小数点1位)
6、身份证号码(名称 id_card,二代身份证号码都是18位,部分号码中有X字符)
7、入学日期(名称 Admission_Date,年月日)
8、分数(名称 scores [skɔːz] 成绩, 得分 。浮点数值数据类型,总分100,总3位,小数点1位)
找出下面代码中的错误:
create table ( id int comment '编号' , Student_id_Number warchar(10) comment '学号' , Name warchar(3) comment '姓名' , Sex char(1) comment '性别' , Age tinyint comment '年龄' , Height warchar double(3,2) comment '身高' , Weight warchar double(3,1) comment '体重' , ID_card warchar(18) comment '身份证号码' , Admission_Date date comment '入学日期' , scores double(4 ,1) comment '成绩' ) comment '学生信息表' ;
说明:
在使用数字的时候,需要区分,是用 数值型 还是 字符串类型,
比如身份证号码,虽然是数字,但是不能用数值,而应该用字符串
如果使用字符串,需要指定长度范围,有定长和动长两种,定长就是输不输满,都是占据设置的位数。动长就是,在限定的位数内,用多少算多少,更省储存空间。如果超过指定的长度,会报错。
如果使用数值型,整数型不用指定,但是浮点数的,需要指定总位数,以及小数点位数。
上面的代码错误有:没有表名、warchar关键字错误。
正确如下:
create table student001( id int comment '编号' , Student_id_Number varchar(10) comment '学号' , Name varchar(3) comment '姓名' , Sex char(1) comment '性别' , Age tinyint comment '年龄' , Height double(3,2) comment '身高' , Weight double(3,1) comment '体重' , ID_card varchar(18) comment '身份证号码' , Admission_Date date comment '入学日期' , scores double(4 ,1) comment '成绩' ) comment '学生信息表' ;
【12】查看当前数据库里面的表【 语句:show tables;】
SHOW TABLES ;
【08】查看表的内容(表结构)重点! 【 语句:desc 表名;】
DESC student001;
【08】查看建表语句
【08】给表里面增加字段 【 语句:alter table 表名 add 字段名 数据类型(长度) [注释];】
ALTER TABLE student001 ADD nickname varchar(10) COMMENT '昵称' ;
单词:alter [ˈɔːltə(r)] 更改;改变;修改
【08】查看表的内容(表结构)重点! 【 语句:desc 表名;】
DESC student001;
修改字段
修改字段有两种:修改字段的数据类型,以及修改字段名称和类型
1,仅修改字段的数据类型:
alter table 表名 modify 字段名 新的数据类型(长度) ;
2,修改字段名称和类型
alter table 表名 change 旧字段名 新字段名 数据类型(长度) [注释] [约束] ;
【练习】修改 student001 表里面的 height 字段名称,将其改为 shengao
ALTER TABLE student001 CHANGE height shengao double(3,2) COMMENT '身高' ;
DESC student001; # 修改后再查看下表内容
删除字段
alter table 表名 drop 字段名;
【练习】删除stuent001表里面的 weight 字段
ALTER TABLE student001 DROP weight ; # 删除weight字段
DESC student001; # 字段删除后再查看下表的内容
修改表名(重命名)
alter table 表名 renam to 新表名;
【练习】修改 stuent001表名为 stu001 字段
ALTER TABLE student001 RENAME TO stu001;
DESC student001; # 修改表名后再查看下表的内容,此时需要使用新表名才能查看了
SHOW TABLES ; # 查看下数据库的表列表,原来的表名称 student001 已经变成 stu001了;
DESC stu001; # 此时需要使用新表名才能查看表内容了
删除表
删除指定表
drop table [ if exists ] 表名 ;
加上 if exists 可选项表示,如果指定表存在就删除指定表,如果指定的表不存就不删了(不报错)。
删除指定表,并重新创建该表(很少用这个)
truncate table 表名;
会删除表后,再重新创建一个同名的空表(相当于清空了表里面的内容)

浙公网安备 33010602011771号