数据库
数据库的含义
数据库:(保存数据 保存到一个文件中 ;对数据进行持久化)
使用简单的命令就可以增删改查
数据库系统:
按特定的规则可以操作数据库的应用程序;
简单的常用数据库
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快。