一、创建数据库

创建一个保存员工信息的数据库:

#通用的写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;

相关其他命令

show databases;查看当前所有数据库
use employees;“使用”一个数据库,使其作为当前数据库

数据库命名规则:

  • 数据库名不得超过30个字符,变量名限制为29个
  • 必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 不能在对象名的字符间留空格
  • 必须不能和用户定义的其他对象重名
  • 必须保证你的字段没有和保留字、数据库系统或常用 方法冲突
  • 保持字段名和类型的一致性,在命名字段并为其指定数 据类型的时候一定要保证一致性。假如数据类型在一 个表里是整数,那在另一个表里可就别变成字符型了

二、创建表

2.1.CREATE TABLE 语句

必须具备:

  • CREATE TABLE权限
  • 存储空间

创建和管理表_数据类型

必须指定:

  • 表名
  • 列名, 数据类型, 大小
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名();

2.2.创建表

语法:

创建和管理表_数据_02

DESCRIBE:命令用于显示表的结构,包括列名、数据类型、键信息等

创建和管理表_创建表_03

2.3.常用数据类型

数据类型

含义作用

INT

使用4个字节保存整数数据

CHAR(size)

定长字符数据。若未指定,默认为1个字符,最大长度255

VARCHAR(size)

可变长字符数据,根据字符串实际长度保存,必须指定长度

FLOAT(M,D)

单精度,M=整数位+小数位,D=小数位。D<=M<=255,0<=D<=30, 默认M+D<=6

DOUBLE(M,D)

双精度。D<=M<=255,0<=D<=30,默认M+D<=15

DATE

日期型数据,格式’YYYY-MM-DD’

BLOB

二进制形式的长文本数据,最大可达4G

TEXT

长文本数据,最大可达4G

案例:创建表

# 创建表
CREATE TABLE emp(
    # int类型,自增
    emp_id INT AUTO_INCREMENT,
    # 最多保存20个中英文字符
    emp_name CHAR(20),
    # 总位数不超过15
    salary DOUBLE,
    # 日期类型
    birthday DATE,
    # 主键
    PRIMARY KEY(emp_id)
)

查看表结构:

创建和管理表_数据_04

2.4.表的复制

准备创建表的SQL:

CREATE TABLE author(
    id INT,
    name VARCHAR(12),
    country VARCHAR(12)
)

INSERT INTO author VALUES
(1,'格拉西莫夫','俄罗斯'),
(2,'苏洛维金','俄罗斯'),
(3,'冯唐','中国'),
(4,'金庸','中国');

案例说明:

# 1.仅仅复制表的结构
CREATE TABLE copy LIKE author

# 2.复制表的结构和数据
CREATE TABLE copy2 SELECT * FROM author

# 3.只复制部分数据
CREATE TABLE copy3
SELECT id,name FROM author WHERE country = '俄罗斯'

# 4.仅仅复制某些字段(不复制数据)
CREATE TABLE copy4
SELECT id,name FROM author WHERE 0;

三、常见的数据类型

3.1.数值类型

⑴.整型

特点:
① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
② 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
③ 如果不设置长度,会有默认的长度
创建表的时候字段类型后面的数字表示的是长度,长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

# 1.创建表的狮吼功设置无符号和有符号,默认是有符号,通过在自动后面添加ZEROFILL启用有符合
DROP TABLE IF EXISTS tab_int
CREATE TABLE tab_int(
    t1 INT(7) ZEROFILL,
    t2 INT(7) ZEROFILL
)
# 插入数据
INSERT INTO tab_int VALUES(-123456,-123456)
INSERT INTO tab_int VALUES(1,4294967294);

# 查看表结构
DESC tab_int

SELECT * FROM tab_int

创建和管理表_创建表_05

⑵.小数

分类:
1.浮点型

  • float(M,D)
  • double(M,D)

2.定点型

  • dec(M,D) 这个是下面decimal的简写
  • decimal(M,D)

特点:

①说明

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

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

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

# 测试M和D
DROP TABLE IF EXISTS tab_float
CREATE TABLE tab_float(
    f1 FLOAT,
    f2 DOUBLE,
    f3 DECIMAL
)

# 查看表结构
DESC tab_float

# 查看数据
SELECT * FROM tab_float

# 插入数据
INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);

创建和管理表_创建表_06

⑶.位类型

创建和管理表_创建表_07

3.2.字符类型

⑴.char和varchar类型

char和varchar类型 说明:用来保存MySQL中较短的字符串。

创建和管理表_创建表_08

⑵.binary和varbinary类型

说明:类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串。

⑶.Enum类型

说明:又称为枚举类型哦,要求插入的值必须属于列表中指定的值之一。 如果列表成员为1~255,则需要1个字节存储 如果列表成员为255~65535,则需要2个字节存储 最多需要65535个成员!

# 创建表
DROP TABLE IF EXISTS tab_float
CREATE TABLE tab_enum(
    c1 ENUM('a','b','c')
)

# 只能插入'a','b','c'
INSERT INTO tab_enum VALUES('a');
INSERT INTO tab_enum VALUES('b');
INSERT INTO tab_enum VALUES('c');
# d是无法插入的
INSERT INTO tab_enum VALUES('d');

SELECT * FROM tab_enum

⑷.Set类型

说明:和Enum类型类似,里面可以保存0~64个成员。和Enum类型最大的区 别是:SET类型一次可以选取多个成员,而Enum只能选一个 根据成员个数不同,存储所占的字节也不同

创建和管理表_创建表_09

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');

SELECT * FROM tab_set

3.3.日期类型

创建和管理表_数据类型_10

datetime和timestamp的区别:

  • Timestamp支持的时间范围较小,取值范围: 19700101080001——2038年的某个时间 Datetime的取值范围:1000-1-1 ——9999—12-31;
  • timestamp和实际时区有关,更能反映实际的日 期,而datetime则只能反映出插入时的当地时区;
  • timestamp的属性受Mysql版本和SQLMode的影响很大;
/*
分类:
date只保存日期
time 只保存时间
year只保存年

datetime保存日期+时间, 不受时区影响
timestamp保存日期+时间,会受时区影响
*/

# 创建表
CREATE TABLE tab_date(
    t1 DATETIME,
    t2 TIMESTAMP
)

# 插入数据
INSERT INTO tab_date VALUES(NOW(),NOW());

# 查看数据
SELECT * FROM tab_date

# 查看所在时区
SHOW VARIABLES LIKE 'time_zone';

# 修改时区,这样修改时区后DATETIME和TIMESTAMP会相差一小时,因为TIMESTAMP会受到时区的影响
SET time_zone='+9:00';

四、修改表的定义

使用ALTER TABLE 语句可以实现:

  • 向已有的表中添加列
  • 修改现有表中的列
  • 删除现有表中的列
  • 重命名现有表中的列

4.1.追加一个新列

创建和管理表_创建表_11

ALTER TABLE boys ADD skill VARCHAR(15)

4.2.修改一个列

修改列,可以修改列的数据类型, 尺寸和默认值

ALTER TABLE boys MODIFY skill VARCHAR(20)
ALTER TABLE employees MODIFY salary DOUBLE(9,2) DEFAULT 1000
  • 对默认值的修改只影响今后对表的修改

4.3.删除一个列

使用DROP COLUMN 子句删除不再需要的列

ALTER TABLE boys DROP COLUMN skill

4.4.重命名一个列

使用CHANGE old_column new_column dataType 子句重命名列

ALTER TABLE boys CHANGE boyName name VARCHAR(15)

五、删除,重命名和清空表

5.1.删除表

  • 数据和结构都被删除
  • 所有正在运行的相关事务被提交
  • 所有相关索引被删除
  • DROP TABLE 语句不能回滚
DROP TABLE dept

5.2.清空表

TRUNCATE TABLE 语句:

  • 删除表中所有的数据
  • 释放表的存储空间
TRUNCATE TABLE employees

注意:

  • TRUNCATE语句不能回滚
  • 可以使用 DELETE 语句删除数据,可以回滚

5.3.改变对象的名称

执行RENAME语句改变表, 视图的名称

创建和管理表_数据_12

将表名beauty修改为tb_beauty

ALTER TABLE beauty RENAME TO tb_beauty