MySQL库表操作

开始之前分享一个数据库远程连接工具:
Navicat Premium 15
可以远程连接数据库,并且查看表的结构等,非常好用。

SQL语句基础

SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务

  • 改变数据库的结构
  • 更改系统的安全设置
  • 增加用户对数据库或表的许可权限
  • 在数据库中检索需要的信息
  • 对数据库的信息进行更新

SQL语句分类

MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中,SQL语句主要可以划分为以下几类
①DDL(Data Definition Language): 数据定义语言,定义对数据库对象(库、表、列、索引)的操作。
CREATE、DROP、ALTER、RENAME、 TRUNCATE等
②DML(Data Manipulation Language): 数据操作语言,定义对数据库记录的操作。
INSERT、DELETE、UPDATE等
③DCL(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别。
​GRANT、REVOKE等
④DQL(Data Query Language): 数据查询语言 SELECT
Transaction Control:事务控制
​COMMIT、ROLLBACK、SAVEPOINT等

SQL语句的书写规范

①在数据库系统中,SQL语句不区分大小写(建议用大写) 。
②但字符串常量区分大小写。
③SQL语句可单行或多行书写,以“;”结尾。
④关键词不能跨多行或简写。
⑤用空格和缩进来提高语句的可读性。
⑥子句通常位于独立行,便于编辑,提高可读性。
SELECT * FROM tb_table
⑦注释:
SQL标准:
/**/。多行注释
“–” 单行注释
MySQL注释:
“#”

数据库操作

登录数据库

[root@localhost ~]# mysql -uroot -p
Enter password: 

1、查看

SHOW DATABASES

语法:

SHOW DATABASES [LIKE wild];

如果使用LIKE wild不符,wild字符串可以是一个使用SQL的”%”和”_”通配符的字符串。
功能: 列出在MySql服务器主机上的数据库。
MySQL库表操作_第1张图片
上图四个数据库均为MySQL自带库
Information_schema: 主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信息、字符集信息、分区信息等。(数据字典表)。
performance_schema: 主要存储数据库服务器的性能参数
mysql: 存储了系统的用户权限信息及帮助信息。
sys:5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema 和 performance_schema结合起来,查询出更加令人容易理解的数据。

2、创建

CRATE DATABASE

语法:

CREATE DATABASE [IF NOT EXISTS]数据库名;

功能:用给定的名字创建一个数据库,如果数据库已经存在,发生一个错误。
查看创建数据库:SHOW CREATE DATABASE <数据库名>;
示例:

 create database school DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

在这里插入图片描述
MySQL库表操作_第2张图片

3、删除

DROP DATABSE

语法: DROP DATABASE [IF EXISTS]数据库名;
功能:删除数据库中得所有表和数据库
例如:

drop database school;

在这里插入图片描述
MySQL库表操作_第3张图片

4、切换

使用USE选用数据库
语法: USE 数据库名;
功能: 把指定数据库作为默认(当前)数据库使用,用于后续语句。
其他:
查看当前连接的数据库

SELECT DATABASE();

查看数据库版本

SELECT VERSION();

查看当前用户

SELECT USER();

查看所有用户

SELECT User,Host,Password FROM mysql.user;

5、执行对应系统命令

SYSTEM <命令>
	system cls | clear
	system date 等

MySQL字符集

MySQL字符集包括字符集(CHARACTER)校对规则(COLLATION) 两个概念:
latin1支持西欧字符、希腊字符等
gbk支持中文简体字符
big5支持中文繁体字符
utf8几乎支持世界所有国家的字符。

数据库设计与对象

数据库设计的基本步骤

需求分析==>概念结构设计==>l逻辑结构设计==>物理结构设计==>数据库的实施==>数据库的运行和维护

三大范式原则

第一范式(1st NF)

第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也成为最小的原子单元),则满足第一范式(1 NF)。
MySQL库表操作_第4张图片

第二范式(2st NF)

第二范式要求每个表只描述一件事情
MySQL库表操作_第5张图片

第三范式(3st NF)

如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)。

E-R图

绘制E-R图三要素

符号 含义
矩形 实体,一般是名词
椭圆形 属性,一般是名词
菱形 关系,一般是动词

关系型数据库常见映射函数

MySQL库表操作_第6张图片

根据需求而生成的实体关系图

  • 用二维表的形式表示实体和实体间联系的数据模型即关系模式
  • E-R图转换为关系模式的步骤
    • 把每个实体都转化为关系模式R(U)形式
    • 建立实体间联系的转换
  • 酒店管理系统数据库的关系模式是
    • 客房(客房号、客房描述、客房类型、客房状态、床位数、入住人数、价格)
    • 客人(客人编号,客人姓名、身份证号、入住日期、结账日期、押金、总金额、客房号)
      MySQL库表操作_第7张图片

转化E-R图为数据库模型图

  • 将各实体转换为对应的表,将各属性转换为各表对应的列
  • 标识每个表的主键列
  • 在表之间建立主外键,体现实体
    MySQL库表操作_第8张图片

数据库对象

命名规则:
①必须以字母开头
②可包括数字和(# _ $ )三个特殊字符
③不要使用MySQL的保留字
④统一Schema下的对象不能同名。
MySQL库表操作_第9张图片

表的基本操作

创建表

建表的语句:

CREATE TABLE [schema.]table
    (column datatype[DEFAULT expr] ,
    	…
    ) ENGINE = 存储机制


CREATE TABLE
简单语法:
    CREATE TABLE 表名(
    列名 列类型,
    列名 列类型
    );
功能:在当前数据库中创建一张表

数据类型

在MySQL中有三种主要的类型:
①文本
②数字
③日期/时间类型

数据类型 描述
CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的最大长度。最多 255 个字 符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT 存放最大长度为 255 个字符的字符串。
TEXT 存放最大长度为 65,535 个字符的字符串。
BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。 可以按照此格式输入可能的值: ENUM(‘X’,‘Y’,‘Z’)
SET 与 ENUM 类似, SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

Number 类型:

数据类型 描述
TINYINT(size) -128 到 127 常规。 0 到 255 无符号*。在括号中规定最 大位数。
SMALLINT(size) -32768 到 32767 常规。 0 到 65535 无符号*。在括号中 规定最大位数。
MEDIUMINT(size) -8388608 到 8388607 普通。 0 to 16777215 无符号*。在 括号中规定最大位数。
INT(size) -2147483648 到 2147483647 常规。 0 到 4294967295 无 符号*。在括号中规定最大位数。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。 0 到18446744073709551615 无符号*。在括号中规定最大位 数。
FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。

Date 类型:

数据类型 描述
DATE() 日期。格式: YYYY-MM-DD 注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME() 日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是’1000-01-01 00:00:00’ 到 ‘9999-12- 31 23:59:59’
TIMESTAMP() 时间戳。 TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME() 时间。格式: HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR() 2 位或 4 位格式的年。
注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069

查看表

SHOW 语句
语法:

SHOW TABLES[FROM 数据库名][LIKE wild];

功能:
显示当前数据库中已有的数据表的信息(结构和创建信息)。

DESCRIBE
语法:

{DESCRIBE|DESC}表名[列名];
# or
show columns from 表名称;

功能:
查看数据表中各列的信息。

删除表

DROP语句
语法:

DROP TABLE [IF EXISTS] 表名;

功能:
删除指定表

修改表的结构

修改列类型:

 ALTER TABLE 表名 MODIFY 列名 列类型;

增加列:

ALTER TABLE 表名 ADD 列名 列类型;

删除列:

ALTER TABLE 表名 DROP 列名;

列改名:

ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;

更改表名:

ALTER TABLE 表名 RENAME 新表名;
RENAME TABLE 表名 TO 新表名;

复制表的结构

方法一:
在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。

CREATE TABLE 新表名 LIKE 源表;

方法二:
在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。

CREATE TABLE 新表名 SELECT * FROM 源表;

方法三:
如果已经存在一张机构一致的表,复制数据

INSERT INTO 表 SELECT * FROM 源表:

数据库字典

由information_schema数据库负责维护

tables-存放数据库里所有的数据表、以及每个表所在数据库。
schemata-存放数据库里所有的数据库信息。
views-存放数据库里所有的视图信息。
columns-存放数据库里所有的列信息。
triggers-存放数据库里所有的触发器。
routines-存放数据库里所有存储过程和函数。
key_column_usage-存放数据库所有的主外键。
table_constraints-存放数据库全部约束。
statistics-存放了数据表的索引。

表的约束

约束是在表上强制执行的数据校验规则。约束主要用于保证数据库的完整性。当表中数据有相互依赖性时,可以保护相关的数据不被删除。大部分数据库支持下面五类完整性约束:

NOT NULL 非空
UNIQUE KEY 唯一键
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK 检查默认值约束

约束作为数据库对象,存放在系统表中,也有自己的名字。

创建约束的时机
①在建表的同时创建
②建表后创建(修改表)

可定义列级或表级约束
有单列约束和多列约束

列级约束: 在定义列的同时定义约束
语法: 列定义 约束类型,

表级约束: 在定义了所有列之后定义的约束
语法:
列定义
[CONSTRAINT 约束名] 约束类型(列名)

约束名的取名规则
推荐采用: 表名_列名_约束类型简介

创建完后再添加约束:
语法:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(要约束的列名)

表的约束市例

1、非空约束(NOT NULL)

CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) NOT NULL
);

2、唯一约束(UNIQUE)
唯一性约束条件确保所在的字段或者字段组合不出现重复值。
唯一性约束条件的字段允许出现多个NULL。
同一张表内可建多个唯一约束。
唯一约束可由多列组合而成。
建唯一约束时MySQL会为之建立对应的索引。
如果不给唯一约束起名,该唯一约束默认与列名相同。

CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) UNOQUE NOT NULL
);

3、主键约束
主键从功能上看相当于非空且唯一。
一个表中只允许一个主键。
主键是表中唯一确定一行数据的字段。

CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18)
);

4、外键约束
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系。

外键确保了相关的两个字段的两个关系:
子(从) 表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。
格式

FOREIGN KEY (外键列名) REFERENCES 主表(参照列)
CREATE TABLE tb_dept(
dept_id INT PRIMARY KEY,
NAME VARCHAR(18),
decription VARCHAR(255)
);

CREATE TABLE tb_employee(
employee_id INT PRIMARY KEY,
NAME VARCHAR(18),
gender VARCHAR(10),
dept_id INT REFERENCES tb_dept(dept_id),
address VARCHAR(255)
);

5、检查约束

 create table t3(
    id int, 
    age int check(age > 18),
    gender char(1) check(gender in ('M','F'))
);

6、默认值
可以使用default关键字设置每一个字段的默认值。

CREATE TABLE `test`.`user`(  
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` VARCHAR(225) COMMENT '姓名',
  `sex` TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

删除表的约束

1、删除NOT NULL约束

ALTER TABLE 表名 MODIFY 列名 类型;

2、删除UNIQUE约束

ALTER TABLE 表名 DROP INDEX 唯一约束名;

3、删除PRIMARY KEY约束

ALTER TABLE 表名 DROP PRIMARY KEY;

4、删除FOREIGN KEY约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

自动增长和默认值

为新的行产生唯一的标识。
一个表只能优一个auto_increment,且该属性必须为主键的一部分。auto_increment的属性可以是任何整数类型。

AUTO_INCREMENT:自动增长
DEFAULT:默认值

你可能感兴趣的:(数据库,数据库)