简述DDL

DDL数据定义语言

(一)概述

DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库、表、列等;创建、删除、修改 库,表结构。主要分为操作数据库的DDL和操作表的DDL。

(二)操作数据库的DDL

1.创建数据库

CREATE DATABASE[IF NOT EXISTS] 数据库名 CHARACTER SET 字符集 COLLATE 排序规则

排序规则说明

例如:utf8字符集中指定的 utf8_general_ci 和 utf8_bin,对数据库中存储数据库的规则就有所不同。

      utf8_general_ci:ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的。

      utf8_bin:将字符串每个字符串用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

2、查看数据库

(1)查看所有数据库:SHOW databases

(2)查看指定数据库:SHOW CREATE DATABASE 数据库名

3、修改数据库

ALTER DATABASE 数据库名 CHARACTER SET 字符集 [COLLATE 排序规则]

只能修改数据库的字符集和排序规则,不能修改数据库名字

ALTER DATABASE 数据库名 CHARACTER SET 字符集 [COLLATE 排序规则]

示例

修改mydb3的字符集为gbk 排序规则为 gbk_bin

alter database mydb3 character set gbk collate gbk_bin;

4、删除数据库

DROP DATABASE 数据库名

5、使用数据库

(1)查看正在使用的数据库:SELECT DATABASE()

(2)切换数据库:USE 数据库名

(三)操作表的DDL

1、创建表

注意:在创建表之前,一定要先使用数据库(也就是说,表一定要创建在某个数据库中)

CREATE TABLE 表名 (字段名1 数据类型,字段名2 数据类型,…,字段名n 数据类型)

建议写成如下格式:

CREATE TABLE 表名 (

字段名1 数据类型,

字段名2 数据类型,

     ...,

    字段名n 数据类型

)

示例

创建student表包含id,name,age,sex字段

CREATE TABLE student (

      id INT,

      name VARCHAR(20),

      birthday date

    )

2、数据类型

(1)数值类型

a、整数类型

类型名称

字节

说明

tinyint

1

无符号:0~255         

有符号:-128~127

smallint

2

无符号:0~65535       

有符号:-32768~32767

mediumint

3

无符号:0~1677215     

有符号:-8388608~8388607

int、integer

4

无符号:0~4294967295  

有符号:-2147483648~2147483647

bigint

8

无符号:0~18446744073709551615

有符号:-9223372036854775808~9223372036854775807

在建表时默认都是有符号的。

如要使用无符号的,在建表语句中指定。例如:id int unsigned

b、近似数类型

在MySQL中,可以通过浮点数和定点数来表示近似值。

浮点数

MySQL中的浮点数包括float和double两种,定义格式为float(M,D)、double(M,D)。

M-表示所存储的值共有M位(M的取值范围是0~255)

D-表示小数点后有D位(D的取值范围是0~30)

例如:float(7,4)存储的数据范围时-999.9999~999.9999。

decimal是MySQL的定点数。相较与浮点数定点数表示的近似值更加精确。定义格式为decimal(M,D)

M-表示所存储的值共有M位(M的默认取值是10,取值范围是1~65)

D-表示小数点后有D位(D的默认取值是0,取值范围是0~30)

(2)字符串类型

MySQL提供了多种针对字符串的存储类型。如下表所示

字符串类型

取值范围和存储需求

char(M)

M为0~255之间的整数

varchar(M)

M为0~65535之间的整数

tinyblob

允许长度0~255字节

blob

允许长度0~65535字节

meduimblob

允许长度0~167772150字节

longblob

允许长度0~4294967295字节

tinytext

允许长度0~255字节

text

允许长度0~65535字节

mediumtext

允许长度0~167772150字节

longtext

允许长度0~4294967295字节

varbinary(M)

允许长度0~M个字节的变长字节字符串

binary(M)

允许长度0~M个字节的定长字节字符串

enum

允许的值选自一个允许值列表,这个列表最多能存储的值数量为65535个

set

和enum类似,set类型是一个多选字符串数据类型

a、char和varchar

char和varchar两种类型相似,都是MySQL数据库中用来存储较短字符串格式的类型。但这两种类型的主要区别在于存储方式不同,char类型的长度是固定的,而varchar类型的长度是可变的。例如,存储字符串”abc”,char(5)表示存储的字符将占5个字节(包括2个空字符),而varchar(5)只占用3个字节的长度,5只是最大值,当存储的字符小于5个时,按实际长度存储。同时在检索时,char类型会删除尾部的空格,而varchar类型会保留尾部的空格。因为长度的问题,所以导致两种数据类型的数据寻址速度不同,如果字符在10个以内,推荐使用char。

b、BLOB和TEXT

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:tinyblob、blob、mediumblob和longblob。它们只是可容纳值的最大长度不同。

有4种TEXT类型:tinytext、text、mediumtext和longtext。这些对应4种BLOB类型,有相同的最大长度和存储需求。

因为大文件中的字符可能存在非法,所以推荐使用BLOB,比如ascii字符集下存储一张含有”0XFF”字节的图片,入库过滤。

(3)日期和时间类型

MySQL中有多种日期和时间类型的数据数据类型。如下表所示

类型

字节

最小值

最大值

date

4

1000-01-01

9999-12-31

datetime

8

1000-01-01 00:00:00

9999-12-31 23:59:59

timestamp

4

1970-01-01 00:00:01.000000

2038-01-19 03:14:07.999999'

time

3

-838:59:59

838:59:59

year

1

1901

2155

对于这些数据类型的选择,有如下使用准则:

1、如果要表示年月日,通常使用date。

2、如果要表示年月日时分秒,通常使用datetime。

3、如果要表示时分秒,通常使用time。

4、如果要表示年,通常使用year。

5、如果要表示当前系统的时间,通常使用timestamp。

最常用类型总结:整数 int 、 浮点数 double 、字符串 varchar、日期 date。

3、查看表

(1)查看所有表:show tables 

(2)查看表结构:DESC 表名;或 describe 表名

(3)查看创建表的SQL语句:SHOW CREATE TABLE 表名;

4、复制表结构:CREATE TABLE 新表名 LIKE 旧表名

5、修改表

(1)添加新列:ALTER TABLE 表名 ADD 列名 类型

为学生表s1添加一个新的字段remark,类型为varchar(20)

ALTER TABLE s1ADD remark VARCHAR(20);

(2)修改列类型:ALTER TABLE 表名 MODIFY 列名 新的类型

将s1表中的remark字段的改成varchar(100)

ALTER TABLE s1MODIFY remark VARCHAR(100)

(3)修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型

将s1表中的remark字段名改成intro,类型varchar(30)

ALTER TABLE s1 CHANGE remark intro varchar(30)

(4)删除列:ALTER TABLE 表名 DROP 列名

删除s1表中的字段intro

ALTER TABLE s1 DROP intro

(5)修改表名:RENAME TABLE 表名 TO 新表名

将学生表student改名成student2

RENAME TABLE student TO student2

(6)修改字符集:ALTER TABLE 表名 character set 字符集

将sutden2表的编码修改成gbk

ALTER TABLE student2 character set gbk

6、删除表:DROP TABLE 表名


版权声明:本文为qq_36853276原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。