数据库
数据库(DataBase DB)
长期保存在计算机的存储设备上的文件
按照一定规则组织起来 被用户应用的集合
数据库管理系统
使用和维护数据库的软件
保证数据库的安全性和完整性
用户通过该系统范文数据库中的数据
数据库中一行记录与对象之间的关系。
列(column):字段
行(row):一条记录(实体)
数据库管理系统通过SQL结构化查询语言)来定义和操作数据
SQL:Structure Query Language。(结构化查询语言)
数据库厂商都支持SQL标准语言(普通话)
数据库厂商在标准的基础上做出的扩展部分(方言)
* 注意:sql语句以;结尾
常见数据库
常见数据库
MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SQLite : 嵌入式的小型数据库,应用在手机端。
DDL(Data Definition Language)数据定义语言
数据定义语言,用来定义数据库对象:库、表、列等;
CREATE、 ALTER、DROP
DML(Data Manipulation Language)数据库操作语句
用来定义数据库 记录(数据);
INSERT、 UPDATE、 DELETE
DQL(Data Query Language)数据库查询语言(简单)
数据查询语言,用来查询记录(数据)
安装 mysql
Windows 下:
安装MySQL服务
以管理员身份运行cmd,进入D:\mysql\mysql-5.7.21-winx64\bin目录下;
执行命令:mysqld install
出现提示“service successfully installed”,即为安装成功
创建data文件,同样在该目录下执行命令:mysqld–initialize-insecure –user=mysql,此时D:\mysql\mysql-5.7.21-winx64目录下会出现data文件夹,并且建好默认数据库,登录的用户名为root,密码为空。
启动MySQL服务,输入命令:net start mysql 。
停止MySQL服务,输入命令: net stop mysql 。
登录进入数据库,输入命令:mysql -u root –p,密码是空。
进入mysql数据库:use mysql;
修改密码:set password=password('新密码');
初始化mysql数据库,输入“mysqld --initialize --user=root --console”。
my.ini 文件配置:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
skip-name-resolve
skip-grant-tables
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\mysql\mysql-5.7.21-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-5.7.21-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
mac 下安装步骤
1.保存安装中的 数据库初始密码
2.配置环境变量
查看隐藏文件 open .bash_profile
创建隐藏文件 touch .bash_profile(没有这个文件 再创建新的)
添加环境变量 export PATH=$PATH:/usr/local/mysql/bin/
注意:要重启mysql服务
3.打开终端
进去mysql数据库命令 mysql -uroot -p
输入保存好的初始密码(别截图 复制粘贴)
4.进入数据库 修改密码
set password=password('新密码');
注意:sql语句中 只有单引号并且是 英文状态下的单引号
基础语法
DDL数据库操作库 表 列
1.创建数据库
create database 数据库名;
查看一下创建的数据(默认字符集UTF8)
show create database 数据库名;
指定数据库字符集
Create database 数据库名 character set gbk;
查看数据库支持的字符集
show character set;
设置对应的校验规则
Create database 数据库名 character set gbk COLLATE gbk_chinese_ci;
2.查询数据库
查看当前数据库服务器中的所有数据库
show databases;
查看前面创建的mydb2数据库的定义信息
Show create database mydb2;
3.修改数据库(alter)
修改字符集为utf8
alter database 库名 character set 要修改的编码格式;
4.删除数据库
删除前面创建的mydb3数据库
Drop database mydb3;
5.其他:
查看当前使用的数据库
select database();
切换数据库
use mydb2;
6.退出数据库
quit;
操作数据库中的数据表
* 语法:
create table 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
常用数据类型
int:整型
double:浮点型,例如double(6,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型; char(10) 10个字节 'wanglong_ _'
varchar:可变长度字符串类型;varchar(10) 'w'
text:字符串类型; 大数据文本 最大4M
blob:字节类型;保存音频 保存图片
date:日期类型,格式为:yyyy-MM-dd;
Time: 时间类型 mm:hh:ss
创建表
mysql> create table emp(
-> id int,
-> name varchar(50),
-> gender varchar(10),
-> birthday date,
-> Entry_date date,
-> job varchar(100),
-> Salary double,
-> resume text
-> );
修改表
添加一列 image blob(字节类型)
ALTER TABLE 表名 ADD image(字段) blob(字段类型);
修改job列,使其长度为60
ALTER TABLE emp MODIFY job varchar(60);
删除image列,一次只能删一列
ALTER TABLE emp DROP image;
表名改为user
RENAME TABLE emp TO user;
查看表格的创建细节
SHOW CREATE TABLE user;
列名name修改为username
ALTER TABLE user CHANGE 原字段名 新字段名 varchar(100);
DML 操作(操作表数据)
insert(插入)
语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
注意:列名与列值的类型、个数、顺序要一一对应。
可以把列名当做java中的形参,把列值当做实参。
值不要超出列定义的长度。
如果插入空值,请使用null
插入的日期和字符一样,都使用引号括起来。
create table emp1(
id int,
name varchar(100),
gender varchar(10),
birthday date,
salary float(10,2),
entry_date date,
resume text
);
INSERT INTO emp1(id,name,gender,birthday,salary,entry_date,resume)
VALUES(1,'name1','female','1990-5-10',10000,'2015-5-5-','good girl');
INSERT INTO emp1(id,name,gender,birthday,salary,entry_date,resume)
VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
INSERT INTO emp1(id,name,gender,birthday,salary,entry_date,resume)
VALUES(3,'wangwu','male','1995-5-10',10000,'2015-5-5','good boy');
批量插入:
INSERT INTO emp1 VALUES
(4,'zs','m','2015-09-01',10000,'2015-09-01',NULL),
(5,'li','m','2015-09-01',10000,'2015-09-01',NULL),
(6,'ww','m','2015-09-01',10000,'2015-09-01',NULL);
修改操作(update)
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
将所有员工薪水修改为5000元。
UPDATE emp1 SET salary=5000;
将姓名为’zs’的员工薪水修改为3000元。
UPDATE emp1 SET salary=3000 WHERE name='zs';
将姓名为’zs’的员工薪水修改为4000元,gender改为f。
UPDATE emp1 SET salary=4000,gender='f' WHERE name='zs';
将wu的薪水在原有基础上增加1000元。
UPDATE emp SET salary=salary+1000 WHERE gender='male';
删除操作(Delete)
语法 : DELETE FROM 表名 【WHERE 列名=值】
删除表中名称为’wanglong’的记录。
DELETE FROM emp1 WHERE name='zs';
删除表中所有记录。
DELETE FROM emp1;
DQL查询操作
DQL数据查询语言
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
查询关键字:SELECT
语法: SELECT 列名1,列名2 FROM表名 (查询多列用逗号隔开)
查询所有列 使用: *(星号)
- 创建表
CREATE TABLE Student (
id INT,
NAME VARCHAR (255),
age INT,
gender VARCHAR (255)
);
-- 插入数据
INSERT INTO Student
VALUES
(1, '学生1', 20, '男'),
(2, '学生2', 21, '女'),
(3, '学生3', 22, '男'),
(4, '学生4', 23, '女'),
(5, '学生5', 24, '男');
-- 按字段查询
SELECT
id,
NAME
FROM
student;
-- 查询年龄大于20岁的(查询结果只显示年龄和姓名)
SELECT
age,
NAME
FROM
Student
WHERE
age > 20;
-- 查询性别为女,并且年龄21的记录
SELECT
*
FROM
Student
WHERE
age = 21
AND gender = '女';
-- 查询学号为3,或者姓名为学生3的记录
SELECT
*
FROM
Student
WHERE
id = 3
OR NAME = '学生3';
-- 查询学号为1,2,3的记录
SELECT
*
FROM
Student
WHERE
id IN (1, 2, 3);
-- 查询学号不是1,2,3的记录
SELECT
*
FROM
Student
WHERE
id NOT IN (1, 2, 3);
-- 查询年龄不为null的记录
SELECT
*
FROM
Student
WHERE
age IS NOT NULL;
-- 查询年龄在10到40之间的学生记录
SELECT
*
FROM
Student
WHERE
age > 10
AND age < 40;
-- 查询性别非男的学生记录
SELECT
*
FROM
Student
WHERE
gender != '男';
-- 查询姓名不为null的学生记录
SELECT
*
FROM
Student
WHERE
NAME IS NOT NULL;
-- 过滤重复数据
-- 把 id 为2的 age 修改成22岁
UPDATE Student
SET age = 22
WHERE
id = 2;
SELECT DISTINCT
age
FROM
Student;
-- 增加字段薪金和佣金, 使用 int 类型, 并插入数据
ALTER TABLE Student ADD salary INT;
ALTER TABLE Student ADD commission INT;
UPDATE student
SET salary = 1000,
commission = 1000;
-- 查询薪金和佣金之和, 查询的结果相当于增加了一个新的字段
-- (不会对原表进行修改), 关键字 as 给字段起别名, 该关键字可以省略
SELECT
*, salary + commission AS total
FROM
Student;