MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

目录

1.库的管理

(1)库的创建

(2)库的修改

(3)库的删除

2.表的管理

(1)表的创建 ★

​(2)表的修改

(3)表的删除

  补充:通用写法

(4)表的复制

3.基础数据类型

(1)整型

(2)小数

(3)字符型

(4)日期型


DDL:数据定义语言

数据定义语言

库和表的管理

1.库的管理
创建、修改、删除

2.表的管理
创建、修改、删除

创建: create
修改: alter
删除: drop

1.库的管理

(1)库的创建

语法:
create database  [if not exists]库名;

案例:创建库books

CREATE DATABASE IF NOT EXISTS books;

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

(2)库的修改

  • 就当作目前不能修改库名
  • 可以更改库的字符集
  • 示例:将books库的字符集修改为gbk
//修改字符集
ALTER DATABASE books CHARACTER SET gbk;

//查看字符集
SHOW VARIABLES LIKE '%character%';

(3)库的删除

DROP DATABASE IF EXISTS books;

2.表的管理

(1)表的创建 ★

语法:
create table 表名(
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    ...
    列名 列的类型【(长度) 约束】
);

案例:创建表book

CREATE TABLE book(
    id INT,#编号
    bName VARCHAR(20),             #图书名
    price DOUBLE,                  #价格
    authorId  INT,                 #作者编号
    publishDate DATETIME           #出版日期
);

查看book表

DESC book;

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
案例:创建表author

CREATE TABLE IF NOT EXISTS author(
    id INT,
    au_name VARCHAR(20),
    nation VARCHAR(10)
);

查看author表

DESC author;

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
(2)表的修改

语法
alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;

修改前的book表的结构:

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

  • 1.修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;   //必须加上类型

 

  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 2.修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 3.添加新列
ALTER TABLE book ADD COLUMN annual DOUBLE; 
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 4.删除列
ALTER TABLE book DROP COLUMN  annual;    //这里不可以加if exists
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 5.修改表名
ALTER TABLE book RENAME TO book_test;

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

(3)表的删除

DROP TABLE IF EXISTS book_test;

查看当前库的所有表

SHOW TABLES;

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
没有表了

补充:通用写法

创建新库新表通用的写法:

DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;


DROP TABLE IF EXISTS 旧表名;
CREATE TABLE  表名();

(4)表的复制

author表:

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

  • 1.仅仅复制表的结构
  • CREATE TABLE copy LIKE author;
  • copy表
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 2.复制表的结构+数据
  • CREATE TABLE copy2 
    SELECT * FROM author;
  • copy2表
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 3.只复制部分数据
  • CREATE TABLE copy3
    SELECT id,au_name
    FROM author 
    WHERE nation='中国';
  • copy3表
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型
  • 4.仅仅复制某些字段
  • CREATE TABLE copy4 
    SELECT id,au_name
    FROM author
    WHERE 0;
  • copy4表
  • MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

3.基础数据类型

数值型:
	整型
	小数:
		定点数
		浮点数
字符型:
	较短的文本:char、varchar
	较长的文本:text、blob(较长的二进制数据)

日期型:

(1)整型

分类:
        tinyint、smallint、mediumint、int/integer、bigint
字节数:    1        2          3          4          8

特点:
1. 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
2. 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
3. 如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用,并且使用zerofill之后默认变成无符号整型!长度并不限制整型的范围

1)如何设置无符号和有符号

示例1:

CREATE TABLE tab_int(
    t1 INT
);

INSERT INTO tab_int VALUES(-123456);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例2:

CREATE TABLE tab_int(
	t1 INT,
	t2 INT UNSIGNED
);

INSERT INTO tab_int VALUES(-123456,-123456);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例3:

INSERT INTO tab_int VALUES(2147483648,4294967296);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例4:

CREATE TABLE tab_int(
	t1 INT(7) ZEROFILL,
	t2 INT(7) ZEROFILL 
);

INSERT INTO tab_int VALUES(123,123);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

(2)小数

分类:
  1.浮点型
    float(M,D)
    double(M,D)
  2.定点型
    dec(M,D)
    decimal(M,D)

特点:

1.
M:整数部位+小数部位
D:小数部位
如果超过范围,则插入临界值

2.
M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度

3.定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用


原则:
所选择的类型越简单越好,能保存数值的型越小越好,因为越节省空间

示例1:

CREATE TABLE tab_float(
	f1 FLOAT(5,2),
	f2 DOUBLE(5,2),
	f3 DECIMAL(5,2)
);

INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例2:

INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

解释:5表示整数和小数部位合起来只有5位,2表示小数后有2位,所以整数部位最多有3位,所以插入的数超了范围,所以最终结果位,它能表示的最大值999.99

示例3:

CREATE TABLE tab_float(
	f1 FLOAT,
	f2 DOUBLE,
	f3 DECIMAL
);

INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

(3)字符型

较短的文本:

   char
   varchar

其他:

   binary和varbinary用于保存较短的二进制
   enum用于保存枚举
   set用于保存集合

较长的文本:
   text
   blob(较大的二进制)

特点:

         写法                M的意思                    特点            空间的耗费     效率
char    char(M)       最大的字符数,可以省略,默认为1   固定长度的字符      比较耗费      高

varchar varchar(M)    最大的字符数,不可以省略          可变长度的字符      比较节省     低

对enum类型的说明:

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例1:

CREATE TABLE tab_char(
    c1 ENUM('a','b','c')
);


INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');

第4行发生了警告:

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

对set类型的说明:

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例2:

CREATE TABLE tab_set(
	s1 SET('a','b','c','d')
);

INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

(4)日期型

分类:
date保存日期
time 只保存时间
year只保存年

datetime保存日期+时间
timestamp保存日期+时间


特点:

            字节        范围                时区等的影响
datetime     8       1000——9999                不受
timestamp    4       1970-2038                  受

必须用单引号引起来

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

示例1:

CREATE TABLE tab_date(
    t1 DATETIME,
    t2 TIMESTAMP
);

INSERT INTO tab_date VALUES(NOW(),NOW());

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

SHOW VARIABLES LIKE 'time_zone';

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

默认为东八区,修改后:

SET time_zone='+9:00';

SHOW VARIABLES LIKE 'time_zone';

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型

MySQL之SQL——DDL(1)——库的管理、表的管理、基础数据类型