数据库
数据库的含义
数据库:(保存数据 保存到一个文件中 ;对数据进行持久化)
使用简单的命令就可以增删改查
数据库系统:
按特定的规则可以操作数据库的应用程序;
简单的常用数据库
MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SQLite : 嵌入式的小型数据库,应用在手机端。
redis : 以key-value存储数据的 保存内存中
数据在库中的表现形式
列(column):字段
行(row):一条记录(实体)
安装MySQL
1.保存安装中的 数据库初始密码;
2.直接安装进入mql修改密码;
3.cd /usr/local/mysql/bin/ 进入文件夹
4.sudo su 获取系统权限(输入电脑密码)
5./mysqld_safe --skip-grant-tables & (直接进入mql)
./mysql
FLUSH PRIVILEGES; (重新加载权限表)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); (修改密码)
quit; (退出mql)
exit; (关闭)
6.修改环境变量配置文件
touch ~/.bash_profile (创建文件)
open -t ~/.bash_profile (打开文件)
export PATH=${PATH}:/usr/local/mysql/bin/
(记得保存 保存关闭后 关闭终端)
修改默认字符集
添加配置文件 my.cnf(记得重启服务)
数据库基本操作
DDL 数据定义语言 ,用来定义数据库对象: 库 表 列等 CREATE(创建) ALTER(修改) DROP(删除)
DML 数据操作语言 ,用来定义数据库 记录(数据) INSERT UPDATE DELETE
DCL 数据控制语言 ,
DQL 数据查询语言 , !!SELECT (选择)
注意: SQL语句不分大小写 以分号(;)结束
束
1.创建数据库
create database mydb1;
查看一下创建的数据(默认字符集UTF8)
show create database mydb1;
指定数据库字符集
Create database mydb2 character set gbk;
查看数据库支持的字符集
show character set;
设置对应的校验规则
Create database mydb3 character set gbk COLLATE gbk_chinese_ci;
2.查询数据库
查看当前数据库服务器中的所有数据库
show databases;
查看前面创建的mydb2数据库的定义信息
Show create database mydb2;
3.修改数据库(alter 更改)
修改字符集为utf8
alter database mydb2 character set utf8;
4.删除数据库
删除前面创建的mydb3数据库
Drop database mydb3;
5.其他:
查看当前使用的数据库
select database();
切换数据库
use mydb2;
6.退出数据库
quit;
操作数据库中的数据表
1.创建数据表
* 语法:
create table 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
1.创建表
mysql> create table emp(
-> id int,
-> name varchar(50),
-> gender varchar(10),
-> birthday date,
-> Entry_date date,
-> job varchar(100),
-> Salary double,
-> resume text
-> );
2.常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型; char(10) 'abc '
varchar:可变长度字符串类型;varchar(10) 'abc' (也是存10个字符但是会自动去除空格 常用但效率比char低)
text:字符串类型; 大数据文本 最大4M(大文件直接弄个文件上传)
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值(当前系统时间) 可以直接插入null
'2018-06-11' 不想使用默认系统时间 可以直接用字符串插入
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
3.修改表
添加一列 image blob(字节类型)
ALTER TABLE emp 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 name username varchar(100);
DML操作(操作表数据)
1.insert(插入)
语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
注意:列名与列值的类型、个数、顺序要一一对应。
可以把列名当做java中的形参,把列值当做实参。
值不要超出列定义的长度。
如果插入空值,请使用null
插入的日期和字符一样,都使用引号括起来。
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(3,'wangwu','male','1995-5-10',10000,'2015-5-5','good boy');
批量插入:
INSERT INTO emp 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);
2.修改操作(update)
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
mysql> update user set Salary=5000;
Query OK, 5 rows affected (0.10 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> update user set Salary=3000 where username='大海';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update user set Salary=4000,gender='f' where username='rui';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update user set Salary=Salary+1000 where username='dahai';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+------+----------+--------+------------+------------+----------+--------+--------+
| Id | username | gender | birthday | Entry_date | job | Salary | resume |
+------+----------+--------+------------+------------+----------+--------+--------+
| 1 | dahai | 男 | 2018-06-11 | NULL | jiangshi | 6000 | NULL |
| 1 | rui | f | 2008-06-11 | NULL | jiangshi | 4000 | NULL |
| 1 | 大海 | nv | 2008-08-08 | NULL | 厨子 | 3000 | NULL |
| 2 | 小海 | nv | 2008-08-18 | NULL | 厨子 | 5000 | NULL |
| 3 | 中海 | nv | 2008-08-28 | NULL | 厨子 | 5000 | NULL |
+------+----------+--------+------------+------------+----------+--------+--------+
5 rows in set (0.00 sec)
将所有员工薪水修改为5000元。UPDATE emp SET salary=5000 将姓名为’王龙’的员工薪水修改为3000元。UPDATE emp SET salary=3000 WHERE name=’ 王龙’;将姓名为’zs’的员工薪水修改为4000元,gender改为f。UPDATE emp SET salary=4000,gender='f' WHERE name='zs';将wu的薪水在原有基础上增加1000元。UPDATE emp SET salary=salary+1000 WHERE gender='male';
3.删除操作(Delete)
语法 : DELETE FROM 表名 WHERE name='大海'
删除表中名称为’zs’的记录。
DELETE FROM emp WHERE name=‘zs’;
删除表中所有记录。
DELETE FROM emp;
使用truncate删除表中记录。
TRUNCATE TABLE emp;
mysql> delete from user where username='小海';
Query OK, 1 row affected (0.04 sec)
mysql> select * from user;
+------+----------+--------+------------+------------+----------+--------+--------+
| Id | username | gender | birthday | Entry_date | job | Salary | resume |
+------+----------+--------+------------+------------+----------+--------+--------+
| 1 | dahai | 男 | 2018-06-11 | NULL | jiangshi | 6000 | NULL |
| 1 | rui | f | 2008-06-11 | NULL | jiangshi | 4000 | NULL |
| 1 | 大海 | nv | 2008-08-08 | NULL | 厨子 | 3000 | NULL |
| 3 | 中海 | nv | 2008-08-28 | NULL | 厨子 | 5000 | NULL |
+------+----------+--------+------------+------------+----------+--------+--------+
4 rows in set (0.00 sec)
mysql> delete from user;
Query OK, 4 rows affected (0.03 sec)
mysql> select*from user;
Empty set (0.00 sec)
mysql> show create table user;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`Id` int(11) DEFAULT NULL,
`username` varchar(100) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`Entry_date` date DEFAULT NULL,
`job` varchar(60) DEFAULT NULL,
`Salary` double DEFAULT NULL,
`resume` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
DELETE 删除表中的数据(一条一条删),表结构还在;删除后的数据可以找回
TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
删除的数据不能找回。执行速度比DELETE快。