1 安装数据库
https://blog.csdn.net/qq_51625007/article/details/117422873
2 关系数据库基本概念和MySQL基本命令
对关系数据库而言,最基本的数据在储单元就是数据表,因此可以简单地把数据库想象成大量据表的集合(当然,数据库绝不仅由数据表组成)。
数据表是存储数据的逻辑单元,可以把数据表想象成由行和列组成的表格,其中每一行也称之为一条记录、每一列也被称为一个字段。为数据库建表时,通常需要指定该表包含名少列,每列的数据类型信息,无须指定该数据表包含多少行——因为数据库表的行是动态改变的,每行用于保存一条用户数据。除此之外,还应该为每个数据表指定一个特殊列,该特殊列的值可以唯一地标识此行的记录,则该特殊列被称为主键列。
MvSQL数据库的一个实例(Server Instance)可以同时句含多个数据库,MySQL使用如下命令查看当前实例下包含多少个数据库:
show databases;
注意:
MySQL默认以分号作为每条命令的结束符,所以在每条MySQL命令结束后都应该 输一个英文分号(😉。
如果用户需要创建新的数据库,则可以使用如下命令:
create database [IF NOT EXISTS]数据库名;
如果用户需要删除指定数据库,则可以使用如下命令:
drop database 数据库名;
建立了数据库之后,如果想操作该数据库(例如为该数据库建表,在该数据库中执行查询等操作) 则需要进入该数据库。进入指定数据库可以使用如下命令:
use 数据库名;
进入指定数据库后,如果需要查询该数据库下包含多少个数据表,则可以使用如下命令:
show tables;
如果想查看指定数据表的表结构(查看该表有多少列,每列的数据米刑等信息),则可以使用如下命令:
desc 表名;
图13.8显示了使用MySQL命令行客户端执行这些命令的效果。
正如在图13.8中所看到的,MySQL的命令行客户端依次执行了show databases;. drop database abc;等命令,如果将多条MySQL命令写在一份SQL脚本文件里,然后将这份SQL脚本的内容一次复制到该窗口里,将可以看到该命令行客户端一次性执行所有SQL命令的效果——这种一次性执行多条命令的方式也被称为导入SQL脚本。
提示:
本章的大量程序需要相应数据库的支持,因为本章的大部分程序都会提供对应的SQL脚本,因此运行这些程序之前,应该先向MySQL数据库中导入这些SQL脚本 。
MySQL 数据库安装成功后,在其安装目录下有一个bin路径,该路径下包含一个mysql命令,该命今用于启动MySQL命令行客户端。执行mysql命令的语法如下:
mysql -p密码 -u 用户名 h 主机名 --default-character-set=utf-8
例:
mysql -u root -proot
3 SQL语句基础
标识符命名规则
4 DDL 语句
1.创建表的语法
标准的建表语句的语法如下:
create table[模式名.]表名 ( #可以有多个列定义 -columnName1 datatype [default expr], ... )
上面语法中圆括号里可以包含多个列定义,每个列定义之间以英文逗号(,)隔开,最后一个列定义不需要使用英文逗号,而是真接以括号结束。
前面已经讲过,建立数据表只是建立表结构,就是指定该数据表有名小列,每列的数据类型,所以建表语句的重点就是圆括号里的列定义,列定义由列名、列类型和可选的默认值组成。
列定义有点类似于Java里的变量定义,与变量定义不同的是,列定义时将列名放在前面,列类型放在后面。如果要指定列的默认值,则使用default关键字,而不是使用等号(=)。
例如下面的建表语句:
create table test( -> test_id int, -> test_price decimal, -> test_name varchar(255) default 'xxx', -> test_desc text, -> test_img blob, -> test_date datetime -> );
注:->为上一行命令换行导致下一行显示
建表时需要指定每列的数据类型,不同数据库所支持的列类型不同,这需要查阅不同数据库的相关文档。
MySQL支持的列类型
列类型 | 说 明 |
tinyint/smallnit/ medumint/int(integer)/ bigint | \字节2字节门字节/4字节/8字节整数,又可分为有符号和无符号两种。这些整数类型的区别仅仅是表数范围不同 |
float/ double | 单精度、双精度浮点类型 |
decimal(dec) | 精确小数类型,相对于float和double不会产生精度丢失的问题 |
date | 日期类型,不能保存时间。把java.util.Date对象保存进date列时,时间部分将会丢失 |
time | 时间类型,不能保存日期。把java.util.Date对象保存进time列时,日期部分将会丢失 |
datetime | 日期、时间类型 |
timesamp | 时间戳类型 |
year | 年类型,仅仅保存时间的年份 |
char | 定长字符串类型 |
varchar | 可变长度字符串举刑 |
binary | 定长字符串类型,它以二进制形式保存字符串 |
列类型 | 说明 |
varbinary | 可变长度的二进制字符串类型,它以二进制形式保存字符串 |
tinyblob/blob mediumblob/longblob | 字节几字节乃字节4字节的一进制大对象,可用于存储图片、音乐等二进制数据,分别存储:255B/64KB/16MB4GB的大小 |
tinytext/text mediumtext/longtext | 1字节/2字节/3字节/4字节的文本对象,可用于存储超长长度的字符串,分别存储255B/64KB/16MB/4GB大小的文本 |
enum(‘value1’‘value2’…) | 枚举类型,该列的值只能是enum后括号里多个值的其中之一 |
set('value1‘’‘value2.’…) | 集合类型,该列的值可以是set后括号里多个值的其中几个 |
上面是比较常见的建表语句,这种建表语句只是创建一个空表,该表里没有任何数据。如果使用子查询建表语句,则可以在建表的同时插入数据。子查询建表语句的语法如下:
create table[模式名.]表名 [column[,column...]] as subquery;
上面语法中新表的字段列表必须与子查询中的字段列表数量匹配,创建新表时的字段列表可以省略 如果省略了该字段列表,则新表的列名与选择结果完全相同。下面语句使用子查询来建表。
#创建hehe数据表,该数据表和user_inf完全相同,数据也完全相同 create table hehe as select * from user inf;
因为上面语句是利用子查询来建立数据表,所以执行该SOL语句要求数据库中已存在uset_inft 数据表。
提示:
当数据表创建成功后,MySQL使用使用infommation schema数据库里的TABLES表来存该数据库实例中的所有数据表,用户可通过查询TABLES表来获取该数据库的表信息