【MySQL数据库设计与应用(二)】数据库、数据表、记录、索引的操作

文章目录

    • 1 MySQL 数据库操作
    • 2 MySQL 数据类型
      • 2.1 整数类型
      • 2.2 小数类型
      • 2.3 日期/时间类型
      • 2.4 字符串类型
      • 2.5 复合类型
      • 2.6 二进制类型
    • 3 数据表操作--创建、查看、复制、改名及删除
      • 3.1 创建数据库表
      • 3.2 显示表结构的命令
      • 3.3 复制表结构
      • 3.4 修改表名
      • 3.5 删除表
    • 4 数据表操作--修改表
      • 4.1 添加/删除字段
      • 4.2 修改字段名/数据类型
      • 4.3 设置自增型字段
      • 4.4 添加或删除主键约束
      • 4.5 添加或删除外键约束
      • 4.6 添加或删除唯一性约束
      • 4.7 添加或删除非空约束
      • 4.8 添加或删除默认值约束
      • 4.9 修改表的其它选项
    • 5 记录操作--插入、修改、删除记录
      • 5.1 查看表内容
      • 5.2 插入记录(INSERT)
      • 5.3 修改记录(UPDATE)
      • 5.4 删除记录(DELETE)

1 MySQL 数据库操作

MySQL 数据库的操作主要包括:

  • 创建,选择,修改,查看,删除数据库
  • 数据库的备份、还原等

MySQL 数据库操作方式:

  • 命令方式(命令方式是基础,必须掌握)
  • Web 页面工具

数据库命名的规则:

  • 不能与其它数据库重名。
  • 名称由任意字母、阿拉伯数字、下划线(_)和“$”组成,但不能使用单独的数字。
  • 不能使用 MySQL 关键字作为数据库名、表名。
  • 在默认情况下,Windows下数据库名、表名的大小写是一样的,而在 Linux 下数据库名、表名的大小写是有区别的。

MySQL 数据库操作语句:

  • 创建数据库:CREATE DATABASE 数据库名;

  • 找数据库位置:SHOW VARIABLES LIKE ‘datadir’;

  • 选择数据库:USE 数据库名;

  • 修改数据库的 MySQL 语句:
    ALTER DATABASE [数据库名] [DEFAULT] CHARACTER SET <字符集>| [DEFAULT] COLLATE <比较规则>;
    example:
    ALTER DATABASE test DEFAULT CHARACTER SET gb2312;

  • 查看数据库:SHOW DATABASES;

  • 删除数据库:DROP DATABASE 数据库名;

2 MySQL 数据类型

【MySQL数据库设计与应用(二)】数据库、数据表、记录、索引的操作_第1张图片

2.1 整数类型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT 或 INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9223372036854775808,
9223372036854775 807)
(0,18 446 744 073709 551 615) 极大整数值

例如:定义年龄字段 age 为无符号数:
age tinyint unsigned

2.2 小数类型

类型 大小 范围(有符号) 范围(无符号) 用途
FLOAT 4 字节 -3.402 823 466 E+38
~-1.175 494 351 E-38
0 和 1.175 494 351 E-38
~3.402 823 466 E+38
单精度浮点数值
DOUBLE 8 字节 -1.797 693 134 862 315 7 E+308
~-2.225 073 858 507 201 4 E-308)
0 和 2.225 073 858 507 201 4 E-308
~1.797 693 134 862 315 7E+308
双精度浮点数值
DECIMAL DECIMAL(length, precision) length 决定小数的最大位数
precision 用于设置小数位数
length 定小数的最大位数
precision 用于设置小数位数
小数值

精确小数类型 decimal

decimal(length, precision) 用于表示精度确定(小数点后数字的位数确定)的小数类型,length 决定该小数的最大位数,precision 用于设置精度(小数点后数字的位数)。

例如:
decimal (5,2) 表示小数取值范围:-999.99~999.99
decimal (5,0) 表示: -99999~99999 的整数。

2.3 日期/时间类型

类型 大小 范围 格式 用途
DATE 3 ‘1000-01-01’~’9999-12-31’ YYYY-MM-DD 日期值
TIME 3 '-838:59:59‘~‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 ‘1901’~’2155’ YYYY 年份值
DATETIME 8 ‘1000-01-01 00:00:00’
~’9999-12-31 23:59:59’
YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 ‘1970-01-01 00:00:00’~’2038’ YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

2.4 字符串类型

类型 大小 用途
CHAR(n) 0-255字节 定长字符串
VARCHAR(n) 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

字符串类型在数据外观上使用单引号括起来,如 Teacher_name = ‘潘多拉’

2.5 复合类型

类型 最大值 说明
Enum (“value1”, “value2”, …) 65535 该类型的列只可以容纳所列值之一或为 NULL
Set (“value1”, “value2”, …) 64 该类型的列可以容纳一组值或为 NULL

example:
Gender enum(‘男’, '女)
Interest set(‘唱歌’, ‘游泳’, '网球’)

2.6 二进制类型

类型 大小 用途
Binary(n) 0-255字节 较短的二进制
VARBinary(n) 0-65535 字节 较长的二进制
Bit(n) 0-64字节 短二进制
TINYBLOB 0-255字节 较短的二进制
BLOB 0-65 535字节 图片、声音等文件
MEDIUMBLOB 0-16 777 215字节 图片、声音、视频等文件
LONGBLOB 0-4 294 967 295字节 图片、声音、视频等文件

选择合适的数据类型 , 能节省储存空间 ,提升计算性能。

  1. 在符合应用要求(取值范围、精度)的前提下,尽量使用 “ 短 ” 数据类型
  2. 数据类型越简单越。
  3. 在 MySQL 中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。
  4. 尽量采用精确小数类型(例如 decimal),而不采用浮点数类型。
  5. 尽量避免 NULL 字段,建议将字段指定为 NOT NULL 约束。

3 数据表操作–创建、查看、复制、改名及删除

执行脚本:source E:\sql\test.sql

MySql三种注释写法:

#code
/* code */
-- code

3.1 创建数据库表

create table 表名(
字段名1 数据类型 [约束条件],
字段名2 数据类型 [约束条件],

[其他约束条件],
[其他约束条件]
)其他选项;

CREATE TABLE department(
Department_id char(3) NOT NULL PRIMARY KEY COMMENT ‘学院编号’,
Department_name varchar(10) NOT NULL COMMENT ‘学院名称’
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

SQL语句关键字说明:

  1. PRIMARY KEY 用于定义主键。也可以使用多字段来定义主键。
  2. COMMENT 注释该字段的含义。
  3. NOT NULL 是非空约束。
  4. DEFAULT 为该字段加默认值,可以减少输入次数。
  5. AUTO_INCREMENT 为自增型属性,一般用作主键,数值会自动加 1。
  6. 当表中有外键字段时用 CONSTRAINT 设置外键。
  7. ENGINE=InnoDB 是设置该表的存储引擎,DEFAULT CHARSET=utf8 是设置该表的默认字符集。

3.2 显示表结构的命令

方式一:DESCRIBE/DESC 表名

  • 显示指定表的结构

方式二:SHOW CREATE TABLE 表名

  • 查看表的详细信息

查看数据列表命令:show tables;

3.3 复制表结构

  • create table 新表名 like 源表
  • create table 新表名 select * from 源表

3.4 修改表名

  • rename table 旧表名 to 新表名
    或者:
  • alter table 旧表名 rename 新表名

3.5 删除表

drop table 表名;
如果表之间存在外键约束关系,应先删除外键约束条件,再删除表,或者先删子表,再删父表。

4 数据表操作–修改表

包括修改字段相关信息,约束条件,其他选项

ALTER TABLE 表名 alter_spec [, alter_spec ...];
alter_spec定义要修改的内容,其常见语法片段如下:
ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name] --添加新字段
| ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...) --添加主键
| ADD [CONSTRAINT [symbol]]UNIQUE (index_col_name,...) --添加唯一索引
| ADD [CONSTRAINT [symbol]] FOREIGN KEY (index_col_name,...)
reference (index_col_name,...) --添加外键
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} --修改默认值
| CHANGE [COLUMN] old_col_name new_col_name column_definition --修改字段名及数据类型
| MODIFY [COLUMN] col_name column_definition --修改字段类型
| DROP [COLUMN] col_name --删除字段
| DROP PRIMARY KEY --删除主键
| DROP INDEX index_name --删除索引名称
| DROP FOREIGN KEY fk_symbol --删除外键
| table_options --更改表的其它选项

查看完整命令:Help alter table;

4.1 添加/删除字段

向表添加新字段:

  • Alter table 表名 add 新字段名 数据类型 [first | after 旧字段名]

删除字段:

  • alter table 表名 drop 字段名

example:

  • alter table teacher add id first;
  • alter table teacher
    add password char(32) NOT NULL comment ‘密码’ after Teacher_Name,
    add Major varchar(8) NOT NULL comment ‘专业’ after Gender,
    add profesional varchar(8) NOT NULL comment ‘职称’ after Major;
  • alter table teacher drop id;
  • alter table classes modify Year int(4);

4.2 修改字段名/数据类型

修改表的字段名及数据类型:

  • alter table 表名 change 旧字段名 新字段名 数据类型

只修改表字段数据类型:

  • alter table 表名 modify 旧字段名 新数据类型

example:

  • alter table choose
    change choose_id id int auto_increment,
    change report score float;
  • alter table classes modify Year int(4);

4.3 设置自增型字段

默认情况下,从 1 开始递增,步长为 1。自增型字段必须为整形,建议设为主键设置自增型字段:
注:只有 int 类型且为 primary key 才可以使用 auto_increment.

  • 字段名 数据类型 auto_increment

example:

  • alter table department change Department_id Department_id int auto_increment;
  • alter table department modify Department_id int auto_increment;

数据完整性包括

  • 实体完整性:通过主键约束和唯一性约束实现
  • 参照完整性:通过外键约束实现
  • 用户自定义的完整性:通过非空约束、默认值约束和检查约束实现

4.4 添加或删除主键约束

添加主键、外键、唯一性约束条件:

  • ALTER TABLE 表名 ADD [CONSTRAINT [约束名]] 约束类型(字段名)

主键约束(primary key):确保表中每一行记录是唯一的,一个表只能有一个主键,主键的值不能重复而且不能为空(null)。

添加主键:

  • alter table 表名 add primary key (字段名);

删除主键约束的语法格式:

  • alter table 表名 drop PRIMARY KEY

example:

  • alter table teacher1 add primary key(Teacher_id);
  • alter table student1 drop primary key;

4.5 添加或删除外键约束

外键约束(foreign KEY):用于保证外键字段值与父表中主键字段值的一致性,外键字段值要么是 NULL,要么是父表中主键字段值的复制。

添加外键:

  • ALTER TABLE 表名 ADD CONSTRAINT 外键名 foreign KEY(外键字段) references 关联表名(关联字段) [on delete 级联选项][on update 级联选项];

删除外键:

  • alter table 表名 drop foreign Key 约束名

example:

  • alter table classes add constraint fk_deptid_clas_dept foreign key (Department_id) references department (Department_id) on delete cascade on update cascade;

外键约束级联选项参数说明

参数名称 功能描述
cascade 父表记录的删除(delete)或修改(update)操作,会自动删除或修改子表中与之对应的记录
set null 父表记录的删除(delete)或修改(update)操作,会将子表中与之对应记录的外键自动设置为 null 值
no action 父表记录的删除(delete)或修改(update)操作,如果子表存在与之对应的记录,那么删除或修改操作将失败
restrict 与 no action 功能相同,是默认设置,也是最安全的设置

example:

  • alter table students
    add department_id char(3) after gender,
    add constraint fk_deptid_stud_dept foreign key(department_id) references department (department_id);

4.6 添加或删除唯一性约束

唯一性约束(unique):用于保证表中某个字段的值不重复且值能为空( null),一个表可以定义多个唯一性约束。

添加唯一性约束:

  • alter table 表名 add [constraint [约束名]] unique (字段名);

删除唯一性约束:

  • alter table 表名 drop index 唯一索引名;

example:

  • alter table students add constraint unique_phone unique(phone);

4.7 添加或删除非空约束

非空约束(not null):用于保证表中某个字段的值不能取 null 值。

添加非空约束:

  • alter table 表名 modify 字段名 数据类型 not null;
    取消非空约束:
  • alter table 表名 modify 字段名 数据类型 null;

4.8 添加或删除默认值约束

默认值约束(default):用于指定一个字段的默认值。插入记录时,如果没有给该字段赋值,数据库系统会自动为这个字段插入默认值。

添加默认值约束:

  • alter table 表名 alter 字段名 set default 默认值;

删除默认值约束:

  • alter table 表名 alter 字段名 drop default;

example:

  • alter table choose alter score set default null;

4.9 修改表的其它选项

alter table 表名 engine=新的存储引擎类型
alter table 表名 default charset=新的字符集
alter table 表名 auto_increment=新的初始值
alter table 表名 pack_keys=新的压缩类型

5 记录操作–插入、修改、删除记录

表记录操作包括:插入记录,修改记录,删除记录,查询记录

5.1 查看表内容

  • select * from 表名;

example:

  • select * from department;

5.2 插入记录(INSERT)

语法格式一:INSERT INTO 表名[(字段列表)] VALUES(值列表)

插入一条记录,只对部分字段赋值

  • insert into 表名(字段A, 字段B, 字段C) values(值A, 值B, 值C);

插入一条记录,对所有字段都赋值

  • insert into 表名 values(值A, 值B, 值C…, 值F);

一次插入多条记录

  • insert into 表名[(字段列表)] values (值列表1),(值列表2),…(值列表n);

MySQL特殊字符序列
每个字符序列以反斜线符号“\”开头,且字符大小写敏感,转义成对应的字符

MySQL中的特殊字符序列 转义后的字符
\" 双引号(")
\’ 单引号(‘)
\\ 反斜杠(\)
\n 换行符
\r 回车符
\t 制表符
\0 ASCII 0(NUL)
\b 退格符
\_ _
\% %

语法格式二:insert into 目标表名[(字段列表1)] select (字段列表2) from 源表 where 条件表达式
该语句向表中插入从另一个或多个表查询的结果集。

replace 命令
replace 与 insert 的区别:使用 replace 向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则先删除已有记录,然后再插入新记录(注意:已有记录删除时也不能违背外键约束条件)。

插入有约束的数据
向默认值约束字段插入数据时,字段值可以使用 default 关键字,表示插入的是该字段的默认值。
表之间存在外键约束时,外键的值要么是 null,要么是父表中主键字段的值。
向 auto_increment 字段插入数据时,建议插入 NULL 值,此时将向自增型字段插入下一个编号。

example:

  • insert into department VALUES
    (‘101’, ‘信息学院’),
    (‘201’, ‘艺术传媒学院’),
    (‘202’, ‘管理经济学院’),
    (‘301’, ‘化学工程学院’);
  • insert into classes values
    (‘11’, ‘软件工程1班’, 2017, ‘101’),
    (‘12’, ‘软件工程2班’, 2017, ‘101’),
    (‘21’, ‘会计’, 2018, ‘202’),
    (‘22’, ‘金融’, 2017, ‘202’);
  • insert into classes1 select * from classes where Department_id=‘101’;

5.3 修改记录(UPDATE)

语法格式:
update 表名 set 字段名1=值1,字段名2=值2,…… ,字段名n=值n [where 条件表达式];
其中,set 子句指定了要修改的字段以及该字段修改后的值。where 子句指定了表中需要修改的记录。若省略了 where,则修改表中的所有记录。

example:

  • update classes set Class_name=‘大数据’ where class_id<20;

5.4 删除记录(DELETE)

语法格式:
delete from 表名 [where 条件表达式];
说明:如果没有指定 where 条件,将删除所有的记录;如果指定了 where 条件,将按照指定的条件进行删除。

从多表中删除有外键约束的记录时,外键级联规则选项设置为 cascade 。

清空某个表,使用 truncate 语句,语法格式如下:
truncate [table] 表名;
说明:truncate table用于完全清空一个表。清空记录的表如果是父表,truncate命令将永远执行失败。

example:

  • delete from classes where Department_id=‘202’;

你可能感兴趣的:(MySQL)