文章目录
数据库类型
- DDL:数据库定义语言: CREATE \ ALERT \ DROP \ RENAME \ TRUNCATE
- DML:数据库操作语言: INSERT \ DELETE \ UPDATE \ SELETE
- DCL:数据库控制语言:COMMIN \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE
1. 数据库
关系型数据库(SQL)
- Mysql,Oracle,Sql Server,DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储:学员信息表,考勤表…
- 可以将数据保存在不同的表中,而不是存在一个大仓库中,提高了灵活性。
非关系型数据库(NoSQL)
- Redis,MongDb
- 非关系型数据库,对象存储,通过对象的自身的属性来决定
DBMS(数据库管理系统Data Base Manager System)
- 科学有效的管理我们的数据,维护和获取数据
- mySQL(关系型数据库管理系统)
1.1 数据库连接
mysql -uroot -p123456 --连接数据库
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; --修改用户密码
flush privileges; --刷新权限
--------------------------
所有语句都用 ; 结尾
show databases; --查看所有数据库
mysql> use school --切换数据库 use 数据库名
database changed
-----------------------------------------
show tables; --查看所有的表
describe student; --显示数据中所有的表的信息
--------------------------------------
exit;--退出连接
-- 单行注释
/* */ 多行注释
- 快捷键:
- ctrl+c:强行终止
1. 1数据库的列类型
- 数值
关键字 | 含义 |
tinyint | 十分小的数据 |
smallint | 较小的数据 |
mediumint | 中等大小的数据 |
int | 标准的整数 |
bigint | 较大的数据 |
float | 浮点数 |
double | 浮点数 |
decimal | 字符串形式的浮点数,金融计算的时候,一般用decimal |
- 字符串
char | 字符串固定大小 |
varchar | 可变字符串,常用-String |
tinytext | 微型文本 |
text | 文本串,保存大文本 |
- 时间日期
date | YYYY-MM-DD |
time | HH:MM:SS |
datetime | YYYY-MM-DD HH:mm:ss |
timestamp | 时间戳,1970.1.1 到现在的毫秒数!也较为常用 |
year | 年份表示 |
- null
- 没有值,未知
- 注意,不要使用NULL进行运算,结果一定为NULL
1.2 数据库的字段属性
- Unsigned
无符号的整数
声明了该列不能声明为复数
- zerofull
- 0填充的
- 不足的位数,使用0来填充,int(3),5–00
- 自增
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用来设计唯一的主键~index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
- 非空 NULL Not null
- 假设设置为not null,如果不给他复制,就会报错
- null,如果不填写值,默认就是null
- moren
1.3 数据库XXX语言
:CRUD 增删查改,CV程序员,API程序员!
- DDL 定义
- DML 操作
- DQL 查询
- DCL 控制
1.4 数据库引擎engine
INNODB 默认使用
MYISAM 早些年使用
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作
- MYSIAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
1. 在物理空间存在的位置
所有的数据库文件都在data目录下,一个文件夹就对应一个数据库
本质还是文件的存储!
MYSQL 引擎在物理文件上的区别
- InnoDB 在数据库表中只有一个 *.frm文件,以及上级目录下的ibdata1文件
- MYISAM对应文件:
- *.frm 表结构的定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
2. 操作数据库
操作数据库>>数据库表>>数据库表数据
2.1创建数据库表
creat table 【if not exists】 <表名>
(`字段名` 列类型 [属性] [索引] [注释'红色 '],
`字段名` 列类型 [属性] [索引] [注释' '],
...........
`字段名` 列类型 [属性] [索引] [注释' ']
primary key(`主键`)
)ENGINE=INNODB default charset=utf8
-------------------------------
-- 逆向操作
show create databse school --查看创建数据库的语句
show create table student --查看student数据表的定义语句
DESC student --显示表结构
2.2修改表
--ALTER TABLE 旧表明 RENAME AS 新表明
ALTER TABLE teacher RENAME AS teacher1 --重命名
--ALTER TABLE 表名 ADD 字段名 列属性 添加字段
ALTER TABLE teacher1 ADD age INT(10) --添加字段
--ALTER TABLE 表名 MODIFY 字段名 列属性
ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改约束
--ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性【】
ALTER TABLE teacher1 CHANGE age age1 INT(2) --字段重命名
ALTER TABLE teacher1 DROP age1 -- 删除字段
- change用来字段重命名,不能修改字段类型和约束
- modify 不能用来字段重命名,只能修改字段类型和约束
2.3删除表
drop table [if exists]<数据表名>
2.4收缩数据表
DBCC shrinkdatabase (数据库名,目标压缩比)
3. MySQL的数据管理
3.1 外键
方式1: 在创建表的时候增加约束(麻烦)
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT'年级名称',
PRIMARY KEY (`gradeid`) -- 定义主键
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生表的gradeid字段 要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用references)
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`), -- 定义外键key
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 给外键增加约束,引用到另一张表
)ENGINE=INNODB DEFAULT CHARSET=utf8
- 删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表),这里要先删除student再删除grade。
**方式2:**创建表的时候没有外键约束
3.2设置约束
alter table<表名>
add constraint 约束名
{primary key clustered(列名[,...] --primary key关键字,表示主键约束,clustered关键字,表示聚集索引,一般主键为聚集索引。
|default 约束表达式 --表示默认约束
|foreign key(列名) --关键字,表示外键约束
references 表名(列名) --关键字,表示参照关系
|check(逻辑表达式) --关键字,表示检查约束
|drop constraint 约束名} --关键字,表示删除约束
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);
-- ALTER TABLE `表名` ADD CONSTRAINT `约束名` FOREIGN KEY (`作为外键的列`) REFERENCES `引用表`(`引用列`);
- 以上的操作都是物理外键,数据库级别的外键,不建议使用!!!! (避免数据库过多造成困扰) 删除一个grade还要先删除student很麻烦
最佳实践:- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 想使用多张表的数据,想使用外键(程序去实现),在应用层解决
3.3 DML语言(全部记住)对数据进行操作
DML:数据库操作语言
- insert
- update
- delete
3.4 添加insert
-- INSERT INTO `表名`(`字段名1`,`字段名2`,`字段名3`)
-- VALUES('值1'),('值2')
INSERT INTO `grade`(`gradename`)
VALUES('大二'),('大一')
INSERT INTO `students` (`name`,`age`)
VALUES ('里斯','5'),('上三','7') -- 添加信息
注意
- 字段与字段之间用逗号隔开
- 字段是可以省略的,但后面的值必须一一对应,不能少
- 可以同时插入多条数据,values 后面的值,需要使用,隔开即可
VALUES(),()
3.5 修改
update 修改谁 (条件) set 原来的值 = 新值
UPDATE `students` SET `name` = '名字' WHERE `id`=1;
-- 不指定条件的情况下,会改动所有的表!
UPDATE `students` SET `name` = '长江七号'
-- 语法:
-- update 表名 set column_name(列) = value 【column_name = value】 where 【约束】
- 条件: where 子句 运算符 id等于某个值(=) id大于某个值 id小于某个值,在某个区间内修改。。。
- 操作符会返回布尔值
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | |||
< | |||
<= | |||
>= | |||
BETWEEN…AND… | 在某个范围内 | 【2,5】 | |
AND | 我和你 && | 5>1 and 1>2 | false |
OR | 我或你 || | 5>1 OR 1>2 | true |
-- 通过多个条件定位数据
UPDATE `students` SET `name` = 'qie11' ,`email` = '169' WHERE `name` = 'qie' AND sex = '男' AND age='7';
注意:
- column_name 是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,是一个具体的值,也可以是一个具体的变量
UPDATE`students` SET `birthday`=CURRENT_TIME WHERE `id`=1;
3.6 删除
-- 删除数据(避免这样写,会全部删除)
DELETE FROM `students`
-- 删除指定数据
DELETE FROM `students` WHERE `id`=2;
语法:delete from 表名 [where(条件)]
truncate命令
作用:完全情空一个数据库表,表的结构和索引约束不会变!!
语法:TRUNCATE student
区别:
- 相同:
- 都能删除数据,都不会删除表结构
- 不同:
- Truncate 重新设置,自增列,计数器归零
- TRUNCATE: 不会影响事务
注意:
了解:delete删除的问题,重启数据库,现象
- InnoDB 自增列会重1开始(存在内存当中的,断电即失)
- MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)