一、 数据库
概念: 数据存储的仓库,用于存储和管理数据。
数据库产品
Oracle:oracle公司 大型的关系型数据库 收费的
DB2:IBM公司 大型的关系型数据库 收费的
Mysql:mysql公司 中小型关系型数据库 免费的
Sql Server:微软公司 中小型关系型数据库 收费的
Sqllite:安卓系统内置数据库 微型关系型数据库 免费的
NoSql系列数据库:not only sql 非关系型数据库 了解
关系型数据库:字段和值构成的二维列表
数据库服务器:安装了数据库软件的计算机,类似于web服务器(安装了web服务软件的高性能计算机)
二、Mysql(数据库软件)
(1)安装:附图(引入其他链接)
(2)卸载:(计算机中未清理完毕,影响MYSQL的安装或更新)
1.关闭mysql服务
1.手动关闭:我的电脑-->右键-->管理-->服务-->找对应的mysql的名称
2.cmd-->services.msc,打开服务面板
3.cmd-->net stop mysql(注意获取cmd管理员权限)
2.控制面板--卸载(软件)
3.卸载残留(临时存储文件)
说明: 5.5版本--找到mysql的安装目录中my.ini文件,datadir目录(查询此关键字),删找到此路径的Mysql文件,然后删除。
(3)登陆数据库
(1)启动MYSQL的后台服务(默认是启动的)
启动服务: net start mysql(根据你起的名称)
停止服务: net stop mysql(了解一下)
(2)登陆数据库(黑窗口)
cmd-->mysql -uroot -p你自己的密码(5.6和5.7版本如果以明文的形式显示密码会给予警告)
(4)配置密码
问题:如果忘记密码怎么登陆呢?修改mysql的密码
1) 停止mysql服务----->运行输入services.msc,停止mysql服务或者 cmd -- net stop mysql
2) 在cmd下输入 mysqld --skip-grant-tables 启动服务器 光标不动(不要关闭该窗口)
3) 新打开cmd 输入mysql -u root -p 不需要密码---如果弹出需要密码,直接Enter即可
use mysql;
update user set password=password('abc') WHERE User='root';
4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程
5) 在服务管理页面 重启mysql 服务
原理:MYSQL数据库已经内置了mysql的数据库,通过修改了此数据库终态的user表中的password字段,来达到修改密码目的
三、进入正题
3.1 SQL概念
概念:数据库操作语句,是用来操作所有的关系型数据库,理解为规范的语法(所有数据库厂商都要遵循),但是允许每种数
据库之间会存在差异,称为 "方言"
3.2 SQL分类
DDL(Data Definition Language) :数据定义语言,用来定义数据库对象(库、表、字段(列)等)(理解概念);
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改);
DCL(Data Control Language) :数据控制语言,用来定义访问权限和安全级别(了解);
DQL(Data Query Language) :数据查询语言,用来查询记录(数据)(重点掌握);
3.3 DDL的操作语句(没有触及数据---数据是灵魂)
(1)关于数据库(database)的DDL语句(查询和修改以及删除)
* 查看(show)所有(s)库: show databases;
* 使用(use)库: use 库名
* 创建数据库(总得起名吧):create database 数据库名称;
* 删除数据库(删除哪一个):drop database 数据库名称;
* 设置(set)数据库(必须指定)的字符集:alter database mydb1 character set 要修改的字符集名称;(gbk,utf8)
* 查询创建的数据库(前提是必须有该数据库):show create database 数据库名称;显示的是名字和编码信息等
注意:好好体会drop和alter的含义(应用场景)
(2)关于查询表(table)的DDL语句(必须先进入某个数据库中,表是依赖于数据库存在的)
*显示某个库下(先进入--use)的所有表(s) :show tables;
*显示某个表的详细字段信息(表结构) :desc 表名;(无show table的详情)
表结构:Field | Type | Null | Key | Default | Extra等构成
字段(列)的数据类型(常见的)
* int:整型(11位);id编号--注意:Oracle没有int是Number
* double:浮点型,例如double(5,2)表示最多5位数,其中必须有2位小数,最大值为999.99(占位符)工资
* char:固定长度字符串类型;例如:name char(10);性别
* varchar:可变长度字符串类型(会扩容不会);例如:name varchar(10);
注意1:char和varchar的区别?(前者字段的长度是固定,后者根据实际长度存储的)
* text:字符串类型;存大格式的文本,如存个小说一般不用(存的是链接)
* blob:字节类型;存字节类型的数据,如电影图片的字节但是一般不会把字节数据存到数据库当中(链接)
* date:日期类型,格式为:yyyy-MM-dd;
* time:时间类型,格式为:hh:mm:ss
* datetime:日期时间类型 yyyy-MM-dd hh:mm:ss 注意:MM是大写
* datestamp:时间戳类型 yyyy-MM-dd hh:mm:ss
注意2:datetime和datestamp的区别?后者如果该类型的字段没有赋值,则默认当前系统时间。
注意3:二者的格式必须是 yyyy-MM-dd hh:mm:ss的形式
* 创建一个表(至少要定义一个字段(包括类型))
create table 表名(
列名1 类型1,
列名2 类型2,
...
列名n 类型n
);
说明:字段名必须在字段类型之前(SQL的语法规定),表创建完了,总得看看创建的表结构吧(desc)
(3)修改表的DDL语句(范围--从大大小)
1. 重命名表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;
2. 修改字段类型:修改stu表的gender字段(列)类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
3. 修改字段名(包含类型):修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
注意:修改一个字段的名称,此时一定要重新指定该字段的类型
4 添加字段:给stu表添加classname列(包含字段类型和字段名)
ALTER TABLE stu ADD (classname varchar(100));
思考:批量为表添加多个字段?
5. 删除字段:删除stu表的classname列(无需再追加字段类型了)
ALTER TABLE stu DROP classname;
6. 删除表:drop table 表名;
补充1:只要不操作数据(触及灵魂),同时对表的操作之后,表结构仍然存在,必须以alter开头,表明关于表的某些内容发生变
化,比如(表的编码、表的名字、表的结构)。
3.4 DML的操作语句(触及灵魂,数据发生变化)
1、增(插入一条数据---insert into)
语法:insert into 表名(列名1,列名2,...)values(值1,值2,....);
insert into stu(sname,age) values("lisi",23);//(1)总共三个字段,数据添加不完整,会显示对应的默认值
insert into stu(sname,age,sex) values("zhangsan",23,'1');//(2)
insert into stu values("ww",23,'2');//(3)简写形式
注意:如果表的所有字段都添加值,则字段名可以省略,同时添加的字段名称和值(字段类型)要顺序匹配。
补充:添加日期类型的时候,日期要用单引号引起来,对于时间戳的日期类型(即使添加的是null,也会显示当前时间)
2、删(delete)
删(删除表中的所有数据,还是条件删除,还是删除表结构)
语法:
-- delete from 表名 [where 条件];
delete from stu where sname = 'lisi';
-- truncate table 表名;-- 删除所有记录(先删除表,再创建表结构)。
注意:对于不带条件的删除是最可怕的(会删除所有的数据)。
理解:delete、drop、trancate的区别?
主要区别:TRUNCATE 和DELETE只删除数据(数据层面), DROP则删除整个表(结构层面),从效率和表结构看。
3、改(更新--update):
语法:
update 表名 set 列名1 = 值1 , 列名2 = 值2... [where 条件]
理解:既然是更新(update),那必须知道是如何更新的,通过set来设置更新的数据。
未完待续。。。