JAVA / MySql 编程——第二章 初始MySQL
1、 MySQL:
● MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
MySQL最流行的关系型数据库管理系统,在Web应用方面MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。
MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择
MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
2、MySQL的特点:
1)Mysql是开源的,所以你不需要支付额外的费用。 2)Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 3)MySQL使用标准的SQL数据语言形式。 4)Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 5)Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。 6)MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。 7)Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。 |
MySQL系统特性: 1)使用C和C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。 2)支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。 3)为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和Tcl 等。 4)支持多线程,充分利用 CPU 资源。 5)优化的 SQL查询算法,有效地提高查询速度。 6)既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。 7)提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。 8)提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。 9)提供用于管理、检查、优化数据库操作的管理工具。 10)支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 11)支持多种存储引擎。 12)在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性。 13)复制全局事务标识,可支持自我修复式集群。 14)复制无崩溃从机,可提高可用性。 15)复制多线程从机,可提高性能。 |
3、MySQL的优势:
1、运行速度快,MySQL体积小,命令执行的速度快;
2、使用成本低:MySQL是开源的,且提供免费版本,对大多数用户来说,大大降低了使用成本;
3、容易使用:与其他大型数据库的设置和关联相比,其复杂程度较低,易于使用;
4、可移植性强:MySQL能够运行于多种系统平台上;
5、 适用用户广:MySQL支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用;
4、Mysql:
MySQL版本:
|
MySQL运行机制: |
|
MySQL的配置: 1、端口号:3306 2、默认字符集:utf8 3、utf8:一种Unicode编码,解决国际上字符不统一的多字节编码,通用性强 4、将bin目录写入环境变量 5、root密码设置 |
||
MySQL安装目录: 主要文件夹 bin include lib share |
my.ini:记录MySQL配置信息,可修改配置内容,如端口号,字符等 |
命令行连接MySQL: 检查是否启动服务 启动方式:属性窗口 DOS命令:net start mysql57 停止:net stop mysql57 注意:如果修改了配置文件,必须重启MySQL服务才能生效; |
命令行连接MySQL: Eg: mysql –u root –proot mysql –u root – p 连接的两种方式: DOS下运行 MySQL Command Line Client 默认root登录,仅输入密码 |
系统数据库: Information_schema:主要存储系统中的一些数据库对象信息; Performance_schema:主要存储数据库服务器性能参数; mysql:主要存储系统的用户权限信息; test:MySQL数据库管理系统自动创建的测试数据库,任何用户可放心使用; |
|
用户数据库:用户根据实际需求创建的数据库;
|
5、操作Mysql:
创建数据库: CREATE DATABASE 数据库名; Eg:CREATE DATABASE myschool;//分号为结束符,不可缺
|
查看数据库列表: SHOW databases; |
选择数据库: USE 数据库名; Eg: USE mybase; USE myschool; |
删除数据库: DROP DATABASE 数据库名; Eg: DROP DATABASE myschool; |
6、SQLyog:
SQLyog——图形化的MySQL管理工具 免费 简洁高效 功能强大 |
SQLyog管理工具:工具操作方便,但熟练编写SQL语句仍是程序员的必备技能;
|
||||||||||||||||||
结构化查询语言:
|
7、Mysql数值类型:
●UNSIGNED属性:标识为无符号数 •ZEROFILL属性:宽度(位数)不足以0填充 |
Eg: CREATE TABLE `tb_type` ( `sid` INT(4) ZEROFILL); INSERT INTO ` tb_type1 ` VALUE(12) ,(1234),(123456); 注意:若某数值字段指定了ZEROFILL属性,将自动添加UNSIGNED属性 |
TINYINT |
非常小的数据 |
有符值:-27 ~ 27-1 无符号值:0 ~ 28-1 |
1字节 |
SMALLINT |
较小的数据 |
有符值: -215 ~ 215-1 无符号值: 0 ~ 216-1 |
2字节 |
MEDIUMINT |
中等大小的数据 |
有符值: -223 ~ 223-1 无符号值: 0 ~ 224-1 |
3字节 |
INT |
标准整数 |
有符值:-231 ~ 231-1 无符号值:0 ~ 232-1 |
4字节 |
BIGINT |
较大的整数 |
有符值:-263 ~263-1 无符号值:0 ~264-1 |
8字节 |
FLOAT |
单精度浮点数 |
±1.1754351e -38 |
4字节 |
DOUBLE |
双精度浮点数 |
±2.2250738585072014e -308 |
8字节 |
DECIMAL |
字符串形式的浮点数 |
Decimal(M,D) |
M+2个字节 |
8、MySQL字符串类型:
字符串类型 |
说明 |
长度 |
CHAR[(M)] |
定长字符串 |
M字节 |
VARCHAR[(M)] |
可变字符串 |
可变长度 |
TINYTEXT |
微型文本串 |
0~28–1字节 |
TEXT |
文本串 |
0~216–1字节 |
9、MySQL日期类型:
日期类型 |
格式 |
取值类型 |
DATE |
YYYY-MM-DD,日期格式 |
1000-01-01~ 9999-12-31 |
DATETIME |
YY-MM-DD hh:mm:ss: |
1000-01-01 00:00:00 ~9999-12-31 23:59:59 |
TIME |
hh:mm:ss: |
-835:59:59 ~ 838:59:59 |
TIMESTAMP |
YYYYMMDDHHMMSS |
1970年某时刻~2038年某时刻,精度为1秒 |
YEAR |
YYYY格式的年份 |
1901~2155 |
10、SQLyog创建表:
CREATE TABLE [IF NOT EXISTS] 表名( 字段1 数据类型[字段属性|约束][索引][注释], …… 字段n 数据类型[字段属性|约束][索引][注释] )[表类型][表字符集][注释]; 查看表:SHOW TABLES; |
Eg: #创建学生表 CREATE TABLE `student`( `studentNo` INT(4) PRIMARY KEY, ` name` CHAR(10), ……); |
注意: 在MySQL中,如果使用的数据库名、表名、或字段名等与保留字冲突时,需要使用撇号(`)括起来; 在MySQL生成的代码中,表名,字段名等全部使用撇号(`)括起来;eg:上面; 多字段使用逗号分隔 单行注释:#...... 多行注释:/*……*/ 表的字段也可成为列; |
●字段的约束及属性:
非空约束 |
NOT NULL |
字段不允许为空 |
默认约束 |
DEFAULT |
赋予某字段默认值 |
唯一约束 |
UNIQUE KEY(UK) |
设置字段的值是唯一的,但允许为空,但只能有一个空值 |
主键约束 |
PRIMARY KEY(PK) |
设置该字段为表的主键,唯一标识该表记录 |
外键约束 |
FOREIGN KEY(FK) |
用于在两表之间建立关系,需要指定引用主表的哪一字段 |
自动增长 |
AUTO_INCREMENT |
设置该列为自增字段,默认每条自增1,通常用于设置主键 |
●单字段主键:
在定义字段的同时指定主键: 语法: CREATE TABLE[IF NOT EXISTS] 表明{ 字段1 数据类型PRIMARY KEY, ……. }; |
在定义完所有字段之后指定主键: 语法: CREATE TABLE[IF NOT EXISTS] 表明{ 字段1 数据类型, ……. [CONSTRAINT<约束名>]PRIMARY KEY[列名] }; |
Eg: CREATE TABLE student( `studentNo` INT(4) PRIMARY KEY, ……); |
Eg: CREATE TABLE student( `studentNo` INT(4) , …… PRIMARY KEY(`id`) ); |
●多字段联合主键:
语法: CREATE TABLE[IF NOT EXISTS] 表明{ PRIMARY KEY[字段1,字段2……] ……. }; |
Eg: CREATE TABLE student( `id` INT(4), `name` VARCHAR(11). …… PRIMARY KEY(`id`,`NAME`) ); |
●注释:在创建表的同时可以为表或字段添加说明性文字,即注释。注释是使用COMMENT关键字来添加的;
Eg: CREATE TABLE test ( `id` int(11) UNSIGNED COMMENT ‘编号’ )COMMENT='测试表’ ; |
●编码格式:默认情况下,MySQL所有数据库、表、字段等使用MySQL默认字符集;也可以通过my.ini文件中的default-character-set参数来修改默认值;
语法: CREATE TABLE [IF NOT EXISTS] 表名( #省略代码 )CHARSET = 字符集名; |
Eg:在myschool数据库中创建学生表
代码: CREATE TABLE `student`( `studentNo` INT(4) NOT NULL COMMENT '学号' PRIMARY KEY, `loginPwd` VARCHAR(20) NOT NULL COMMENT '密码', `studentName` VARCHAR(50) NOT NULL COMMENT '学生姓名', `sex` CHAR(2) DEFAULT '男' NOT NULL COMMENT '性别', `gradeId` INT(4) UNSIGNED COMMENT '年级编号', `phone` VARCHAR(50) COMMENT '联系电话', `address` VARCHAR(255) DEFAULT '地址不详'COMMENT '地址', `bornDate` DATETIME COMMENT '出生时间', `email` VARCHAR(50) COMMENT'邮件账号', ` identityCard ` VARCHAR(18) UNIQUE KEY COMMENT '身份证号' ) COMMENT='学生表'; |
11、查看表:
查看表是否存在 USE 数据库名; |
看表定义: DESCRIBE 表名; 或 DESC 表名; Eg: USE myschool; DESCRIBE `student`; |
避免DOS窗口乱码,可执行SET NAMES gbk; 此代码等同于: SET charct_set_client=gbk; SET charct_set_result=gbk; SET charct_set_connection=gbk; |
12、删除表:在删除表之前,先使用IF EXISTS语句验证表是否存在
DROP TABLE [IF EXISTS] 表名; Eg: USE myschool; DROP TABLE IF EXISTS `student`; |
13、MySQL的存储引擎:
存储引擎的类型 MyISAM、InnoDB 、Memory、CSV等9种 可以使用SHOW ENGINES语句查看系统所支持的引擎类型; |
MyISAM与InnoDB类型主要区别 适用场合
|
14、MySQL的存储引擎:
查看当前默认存储引擎 SHOW VARIABLES LIKE ‘%storage_engine%’; |
修改存储引擎 修改my.ini配置文件 |
|
设置表的存储引擎: CREATE TABLE 表名( #省略代码 )ENGINE=存储引擎; Eg: CREATE TABLE `myisam` ( id INT(4) )ENGINE=MyISAM; |
数据表的存储位置: MyISAM类型表文件 *.frm:表结构定义文件 *.MYD:数据文件 *.MYI:索引文件 |
![]() |
InnoDB类型表文件 *.frm:表结构定义文件 ibdata1文件 |
![]() |
|
存储位置 因操作系统而异,可查my.ini datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" innodb_data_home_dir="D:/MySQL Datafiles/" |
15、MySQL系统帮助:
HELP 查询内容; Eg: HELP contents; |
HELP Data Types; HELP INT; |
17、附加1:
什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。 所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS即关系数据库管理系统(Relational Database Management System)的特点: 1)数据以表格的形式出现 2)每行为各种记录名称 3)每列为记录名称所对应的数据域 4)许多的行和列组成一张表单 5)若干的表单组成database |
关系型数据库(RDBMS)术语: 针对关系型数据库作如下解释: 1)关系型数据库可以简单的理解为二维数据库,表格式类似于excel表格,我们平时我接触的数据据,一般都是关系型数据库。 2)关系型数据库不是唯一的高级数据库模型,也不是最优的一种,但是,关系型数据库是现今使用最广泛、最易于理解和使用的数据库模型。 3)在我们开始学习MySQL数据库前,让我们先了解下RDBMS的一些术语: 1数据库: 数据库是一些关联表的集合。 2数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。 3关系:可以理解成一张二维表,每个关系都有一个关系名,即表名。 4关系模式:对关系的描述,在数据库中通常称之为表结构。 5元组:可以理解成二维表中的一行,在数据库中常被称作记录。一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。 6属性:可以理解成二维表中的一列,在数据库中常被成为字段。一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。 7域:属性的取值范围,也是数据库中某一列的取值限制。 8关键字:一组可以唯一标识元组的属性。数据库中常称为主键有一个或多个列组成。 9冗余:存储两倍数据,冗余可以使系统速度更快。 10主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。 11外键:外键用于关联两个表。 12复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。 13索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。 14参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。 4)关系型数据库特点: 1容易理解:二维表结构是非常贴近逻辑世界的一个概念,相对与网状、层次以及其它模型更容易理解。 2使用方便:通过SQL语言程序员和数据管理员可以很方便的在逻辑层面操作数据库而不必理解其底层实现。 3易于维护:丰富的完整性(实体完整性、参照完整性、用户自定义完整性)降低数据冗余和数据不一致的概率。 5)关系操作: 1数据查询:选择、投影、连接、并、交、差、除 2数据操作:增加、删除、修改、查询 6)SQL(Structured Query Language):结构化查询语言,一种特殊目的的编程语言,数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库。 |
SQL查询语言组成部分: 1DDL(Data Definition Languages)语句:数据定义语句,用于定义不同的数据段、数据库、表、列、索引等数据库的对象定义。常用关键字主要包括create、drop、alter等。 2DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用关键字包括insert、delete、update和select等。 3DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,用于定义数据库、表、字段、用户的访问权限和安全级别。常用关键字有grant、revoke等。 |
18、附加2:
default-character-set 客户端默认字符集; character-set-sever 服务器端默认字符集; MySQL的默认端口号是3306; |
delete是删除表中的数据,而drop是撤销表; |
MySQL删除表;删除表:Drop table if exists ‘student’或drop table ‘student’; |
Mysql中的约束类型有:主键(primary key)、默认值(default)、唯一(unique)、外键(foreign key)和非空(not null), |
DELETE * from Student 只是删除学生表里面的所有数据,所以Student这张表还存在的,只是里面没有数据了。 DROP table`student`则会删除整张表 |
对表及以上级别的删除操作都是drop,数据级别的操作都是delete; |
在MYSQL中实现模糊查询的关键字是LIKE。 |
grant on …to 用来允许用户获得权限 |
DDL :数据库定义语言(Data Definition Language),用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等 如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTERDQL : 数据查询语言(Data Query Language),数据查询语言DQL基本结构是由SELECT子 句,FROM子句,WHEREDML : 数据操纵语言(Data Manipulation Language),INSERT UPDATE DELETE DCL :数据控制语言(Data Control Language),GRANT ROLLBACK COMMIT |
在使用modify对列进行更改时,需要同时设定其当前列的全部属性(至少包括数据类型),否则该列数据只有最新设置的属性。 |
查看所有数据表的语法是:show tables; 查询所有的数据库名称的语法是:show databases; |
查看表中的列时,使用show columns from 表名 查看所有表 show tables 查看数据库 show databases |
WHERE是条件判断 ORDER BY是排序、 LIKE模糊查询 |
字符集设置可以分别对数据库、表、字段层面进行设置,所以,如果设置的值不同,字符集可以不相同的。 |
character_set_server:默认的内部操作字符集 character_set_client:客户端来源数据使用的字符集 character_set_connection:连接层字符集 character_set_results:查询结果字符集 character_set_database:当前选中数据库的默认字符集 character_set_system:系统元数据(字段名等)字符集 |
编译MySQL 时,指定的默认的字符集是latin1。 执行命令SET character_set_client = utf8 。 安装MySQL可以在配置文件(my.ini)中指定默认字符集。 安装MySQL选择多语言支持,安装程序会自动在配置文件中把字符集设置utf8; |
通过命令: –mysql>show character set; 查看Mysql支持的字符集 – mysql> show collation; 查看Mysql排序方式 |
While循环语句可以根据某些条件重复执行一条SQL语句或一个语句块 |
可以在建库、建表、建列时设置字符集,但不能在添加数据类型时候设置字符集; |
修改表字符集ALTER TABLE TABLENAME CHARACTER SET XXX;这个语句只修改表的字符集,影响后续该表新增列的默认定义,已有列的字符集不受影响。 ALTER TABLE TABLENAME CONVERT TO CHARACTER SET XXX;这个语句同时修改表字符集和已有列字符集,并将已有数据进行字符集编码转换 |
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。 要让 AUTO_INCREMENT 序列以其他的值起始。设置了PRIMARY KEY后,默认的属性为:not null 、 unique |
为了使索引键的值在基本表中唯一,在建立索引的语句中应使用保留字unique |
对于mysqldump命令导出的SQL备份脚本,可通过mysql命令导入以恢复数据,命令格式为:mysql -u 用户名 -p [库名] </备份路径/备份文件名 |
对于字符集, mysql支持细分为4个层次。【服务器,数据库等等】在编译和安装mysql时,如果没有显示指明,默认就是latin1;启动时此文件继承源自配置文件。 |