数据库学习笔记整理导航
存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据
Java中的类对应数据库中的表
Java中的一个对象对应表中的一条记录
启动MYSQL: net start mysql
停止MYSQL: net stop mysql
mysql -u用户名 -p密码 例如: mysql –uroot -proot(记这一种即可)
mysql -hip地址 -u用户名 -p密码 例如: mysql –h127.0.0.1 –uroot -proot
mysql --host=ip地址 --user=用户名 --password=密码 例如: mysql --host=localhost --user=root --password=root
结构化查询语言(Structured Query Language)简称SQL,就是对数据库进行操作的一种语言
通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。sql是DBMS都要遵循的规范,不同的数据库都支持sql语句,但也都特有内容。
sql语句以分号结尾
不分区大小写,关键词建议使用大写
有3中注释:单行注释(–注释内容 或 #注释内容此是mysql特有)、多行注释(/* 注释内容 */)
分类
官方定义4种
DDL:数据库定义语言, 主要负责结构性,数据库的增删改,数据库表的增删改
DML:数据操作语言,主要负责数据的增删改
DCL:数据库权限语言(了解)
TCL:数据库事务语言
人为定义1种
DQL:数据库查询语言,主要负责对数据库的查询
创建数据库
--直接创建数据库(重要)
CREATE DATABASE 数据库名;
--判断是否存在并创建新数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
--创建数据库并指定字符集
CHARACTER SET 设置字符集编码;
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
查看数据库
--查看所有的数据库
SHOW DATABASE;
--查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;
修改数据库
--修改数据库字符集格式
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
删除数据库
DROP DATABASE 数据库名;
使用数据库
--查看正在使用的数据库
SELECT DATABASE();
--使用/切换数据库
USE 数据库名;
创建表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2 ...)
常用数据类型
int 整型
double 浮点型
varchar 字符串
date 日期类型(格式为yyyy-MM-dd无时分秒)
详细数据类型
创建student表包含id,name,birthday字段
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
查看表
--查看某个数据库中的所有表
SHOW TABLES;
--查看表结构
DESC 表名;
--查看创建表的SQL语句
SHOW CREATE TABLE 表名;
快速创建一个表结构相同的表
CREATE TABLE 新表名 LIKE 旧表名;
删除表
--直接删除表
DROP TABLE 表名;
--判断表是否存在并删除表(了解)
DROP TABLE IF EXISTS 表名;
修改表结构
添加表列
ALTER TABLE 表名 ADD 列名 类型;
--案例: 给student增加一列身高 整型的height
ALTER TABLE student ADD height INT ;
修改列类型
ALTER TABLE 表名 MODIFY 列名 新的类型;
--例子:将刚添加的height修改成字符串类型的列
ALTER TABLE student MODIFY height VARCHAR(32);
修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
--案例: 将字符串的height列 修改成 整型的weight (体重)
ALTER TABLE student CHANGE height weight INT;
删除列
ALTER TABLE 表名 DROP 列名;
--案例: 将整型的weight 删除
ALTER TABLE student DROP weight;
修改表名
RENAME TABLE 表名 TO 新表名;
--将Student表修改成 Stu
RENAME TABLE student TO stu;
修改字符集
ALTER TABLE 表名 character set 字符集;
增加
insert into 表名称 values(值1 , 值2 ,值3 ....)
insert into 表名称(字段名称1,字段名称2,字段名称3...) values(值1 , 值2 ,值3 ....)
注意:双引,单引都表示字符串。数字类型不需要加引号。
--第一种语法
INSERT INTO stu VALUES('jerry' , '男');
INSERT INTO stu VALUES('男', 'jerry' ,18);
--第二种语法
INSERT INTO stu(sname , gender , age) VALUES('rose', '女' , 22);
INSERT INTO stu(sname , age) VALUES('rose' , 22);
INSERT INTO stu(age , sname) VALUES( 22, 'rose');
删除
--删除来自于哪个表 条件是什么
delete from 表名称 [where 条件];
--删除rose相关数据
DELETE FROM stu WHERE sname = 'rose';
--删除表的所有数据
DELETE FROM 表名;
修改
update 表名 set 字段=值, 字段=值,字段=值... [where 条件];
UPDATE stu SET gender = '女';
[ where 条件 ] [ ] 表示可写可不写。开发中where 基本上是必写内容。where 用来锁定需要修改的数据。
UPDATE stu SET gender='男2',age=18 WHERE sname='rose';
蠕虫复制
在开发中,可能会删除数据 。但是只要删除数据 基本上会先备份数据。
将一个表的数据 复制到另一个表中
--需要有一个一样的表 快速创建表
CREATE TABLE student LIKE stu;
--将数据移植即可 select * from 表名 查询表的所有数据
INSERT INTO student SELECT * FROM stu;
关于表数据的删除
--delete from stu;清空表数据==>>只删除数据
--TRUNCATE 表名;重构表==>> 先删除表 再重新创建一张一样的新表
DELETE FROM newstu ;
TRUNCATE newstu;
查询所有
select * from 表名;
SELECT * FROM stu;
查询部分字段数据
SELECT 字段,字段 FROM 表名;
SELECT sname,gender FROM stu;
别名查询
SELECT 字段 as 别名,字段 as 别名 FROM stu;
--as可以省略
--查询出来的数据 不会修改原表数据
SELECT sname AS 名称,gender AS 性别,age AS 年龄 FROM stu;
表别名
--给表添加别名
ELECT s.age,s.sname FROM stu AS s ;
去重查询
如果数据一样只保留一份
--select distinct 字段 , 字段.... 表名
SELECT DISTINCT s.age FROM stu AS s ;
--如果是多字段所有字段都完全一样,才会去重
SELECT DISTINCT s.age,sname FROM stu AS s ;
单列计算
案例:数学成绩加5(均有成绩)
SELECT sname , math+5 AS math, english FROM stu;
--查询不会更改原来值
案例:英语成绩加5(有一个null值)
SELECT sname , math, english+5 FROM stu;
--null值还为null
null值计算
用到函数(数据库叫函数,其实就是方法)
ifnull(参数1 , 参数2)
--参数1 : 列名
--参数2 : 如果为null后希望是什么值
--每一列在使用的时候 还是从原表中取数据
SELECT sname , math , IFNULL(english,0) AS english FROM stu;
--总成绩
SELECT sname , math , IFNULL(english,0) AS english , math+IFNULL(english,0) AS 总成绩 FROM stu;
修改细节
如果条件找不到数据 不会报错 只不过不修改数据而已。
在执行sql语句时候先执行 where条件锁定数据后修改,也就是可以自己修改自己。
删除细节
无论是删除还是修改没有找到数据修改不了删除不了影响行数为0 但不会报错。
添加细节
--非正常情况 将数据看成是字符串添加
--数据库底层其实会将数据进行自动转换 必须满足数据格式才能够转换
INSERT INTO stu VALUES('龙龙' , '男' , '20' , '90' , NULL );
--可以的
now函数
--查看现在时间
SELECT NOW();
--NOW()有时分秒,date只有年月日若now放入date类型会产生警告
以后会不定期,将自己学习的数据库技术整理出来。错误之处还请指出。
祝大家头发多多,bug少少。