我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。
下一篇:MySQL从入门到精通:多表查询的灵活运用_02
存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
数据保存在内存
int[] arr = new int[]{1, 2, 3, 4};
ArrayList<Integer>list = new ArrayList<Integer>();
list.add(1);
new 出来的对象存储在堆中,堆是内存中的一小块空间
优点: 内存速度快
缺点: 断电/程序退出,数据就清除了,内存价格贵
数据保存在普通文件
优点: 永久保存
缺点: 查找,增加,修改,删除数据比较麻烦,效率低
数据保存在数据库
优点: 永久保存,通过SQL语句比较方便的操作数据库
数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
数据库和数据库管理系统的区别:
常用数据库:MYSQL,Oracle
1.打开下载的 mysql 安装文件双击解压缩,运行 mysql-5.5.40-win32.msi
选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,选择“Custom”,按“next”键继续。
填上安装目录,我的是“d:\Program Files (x86)\MySQL\MySQL Server 5.0”,按“OK”继续。
数据库安装好了还需要对数据库进行配置才能使用,MYSQL的配置:
选择配置方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。
选择服务器类型,“Developer Machine(开发测试类,mysql占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”
选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),按“Next”继续。
选择网站并发连接数,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,自己输一个数)”。
是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,在这个页面上,您还可以选择“启用标准模式”(Enable Strict Mode),这样MySQL就不会允许细小的语法错误。如果是新手,建议您取消标准模式以减少麻烦。但熟悉MySQL以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。按“Next”继续
选择是否将 mysql 安装为 windows 服务,还可以指定 Service Name(服务标识名称),是否将 mysql 的 bin 目录加入到 Windows PATH(加入后,就可以直接使用 bin 下的文件,而不用指出目录名,比如连接,mysql.exe -uusername -ppassword 就可以了,不用指出 mysql.exe 的完整地址,很方便),我这里全部打上了勾,Service Name 不变。按 Next 继续。
询问是否要修改默认root用户(超级管理)的密码。Enable root access from remote machines(是否允许root用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)。最后 Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询),一般就不用勾了,设置完毕,按 Next 继续。
注意: 设置完毕,按 Finish 后有一个比较常见的错误,就是不能 Start service,一般出现在以前有安装 mysql 的服务器上,解决的办法,保证以前安装的 mysql 服务器彻底卸载掉了。
解决方法: 卸载MySQL,重装MySQL
停止 window 的 MySQL 服务。
找到——控制面板——管理工具——服务,停止MySQL后台服务。
删除 MySQL 安装目录下的所有文件。
删除c盘 ProgramDate 目录中关于 MySQL 的目录。路径为:C:\ProgramData\MySQL(是隐藏文件,需要显示出来)
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置的密码即可登录
mysql -u用户名 -p密码
mysql –uroot -proot
后输入密码方式:
mysql -u用户名 -p回车
密码
mysql -hip地址 -u用户名 -p密码
mysql –h127.0.0.1 –uroot -proot
登录格式3:mysql --host=ip地址 --user=用户名 --password=密码
例如:mysql --host=localhost --user=root --password=root
数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。数据库管理系统、数据库和表的关系。
注意: 先有数据库 → 再有表 → 再有数据。 一个库包含多个表
DDL(Data Definition Language)数据定义语言:
用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter…等
DML(Data Manipulation Language)数据操作语言:
用来对数据库中表的数据进行增删改。关键字:insert, delete, update…等
DQL(Data Query Language)数据查询语言:
用来查询数据库中表的记录(数据)。关键字:select,where…等
DCL(Data Control Language)数据控制语言:(了解)
用来定义数据库的访问权限和安全级别,及创建用户
SQL语句可以单行或多行书写,以英文分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,建议使用大写。
SELECT * FROM student;
三种注释方式:
直接创建数据库
CREATE DATABASE 数据库名;
判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集(编码表)
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
具体操作:
修改数据库字符集格式
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
具体操作:
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
DROP DATABASE 数据库名;
具体操作:
DROP DATABASE db2;
SELECT DATABASE();
USE 数据库名;
具体操作:
SELECT DATABASE();
前提先使用某个数据库
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);
建议写成如下格式:
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
关键字说明:
CREATE -- 表示创建
TABLE -- 表示创建一张表
MySQL数据类型
详细的数据类型如下:
分类 | 类型名称 | 说明 |
---|---|---|
整数类型 | tinyInt | 很小的整数 |
smallint | 小的整数 | |
mediumint | 中等大小的整数 | |
int(integer) | 普通大小的整数 | |
小数类型 | float | 单精度浮点数 |
double | 双精度浮点数 | |
decimal(m,d) | 压缩严格的定点数 | |
日期类型 | year | YYYY 1901~2155 |
time | HH:MM:SS -838:59:59~838:59:59 | |
date | YYYY-MM-DD 1000-01-01~9999-12-3 | |
datetime | YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 | |
timestamp | YYYY-MM-DD HH:MM:SS 19700101 00:00:01 UTC~2038-01-19 03:14:07UTC | |
文本、二进制类型 | CHAR(M) | M为0~255之间的整数 |
VARCHAR(M) | M为0~65535之间的整数 |
具体操作:
创建 student 表包含 id,name,birthday 字段
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
具体操作:
SHOW CREATE TABLE student;
CREATE TABLE 新表名 LIKE 旧表名;
具体操作:
CREATE TABLE s1 LIKE student;
直接删除表
DROP TABLE 表名;
具体操作:
DROP TABLE s1;
添加表列
ALTER TABLE 表名 ADD 列名 类型;
具体操作:
ALTER TABLE student ADD remark VARCHAR(20);
修改列类型
ALTER TABLE 表名 MODIFY 列名 新的类型;
具体操作:
修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
具体操作:
删除列
ALTER TABLE 表名 DROP 列名;
具体操作:
ALTER TABLE student DROP intro;
修改表名
RENAME TABLE 表名 TO 新表名;
具体操作:
修改字符集
ALTER TABLE 表名 character set 字符集;
具体操作:
INSERT INTO 表名 (字段名 1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
INSERT INTO 表名 VALUES (值1, 值2, 值3…);
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
没有添加数据的字段会使用NULL
关键字说明
INSERT INTO 表名 – 表示往哪张表中添加数据
(字段名1, 字段名2, …) -- 要给哪些字段设置值
VALUES (值1, 值2, …); -- 设置具体的值
注意:
具体操作:
INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
INSERT INTO 表名1 SELECT * FROM 表名2;
表名2
中的数据复制到表名1
中具体操作:
CREATE TABLE student LIKE student2;
INSERT INTO student SELECT * FROM student2;
注意: 如果只想复制student表中name,age字段数据到student2表中使用如下格式:
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;
不带条件修改数据
UPDATE 表名 SET 字段名=值;
带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
关键字说明
UPDATE: 修改数据
SET: 修改哪些字段
WHERE: 指定条件
具体操作:
UPDATE student SET sex='女';
UPDATE student SET sex='男' WHERE id=2;
UPDATE student SET age=26, address='北京' WHERE id=3;
不带条件删除数据
DELETE FROM 表名;
带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;
truncate删除表记录
TRUNCATE TABLE 表名;
注意:
使用 * 表示所有列
SELECT * FROM 表名;
具体操作:
SELECT * FROM student;
写出查询每列的名称
SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
具体操作:
SELECT id, NAME ,age, sex, address FROM student;
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1, 字段名2... FROM 表名;
具体操作:
SELECT NAME, age FROM student;
查询时给列、表指定别名需要使用AS关键字
使用别名的好处是方便观看和处理查询到的数据
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
注意:
具体操作:
SELECT NAME AS '姓名', age AS '年龄' FROM student;
SELECT NAME, age FROM student AS s;
查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
SELECT DISTINCT 字段名 FROM 表名;
SELECT DISTINCT NAME, age FROM student;
某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;
某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意: 参与运算的必须是数值类型
需求:
实现:
修改 student 表结构,添加数学和英语成绩列
ALTER TABLE student ADD math INT;
ALTER TABLE student ADD english INT;
查询 math + english 的和
SELECT math + english FROM student;
结果: 确实将每条记录的 math 和 english 相加,但是效果不好看
查询 math + english 的和使用别名”总成绩”
SELECT math + english '总成绩' FROM student;
SELECT *, math + english '总成绩' FROM student;
SELECT name, age + 10 FROM student;