1 Star 0 Fork 1

游益章/Mysql

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
MYSQL基础知识(原来).txt 16.56 KB
一键复制 编辑 原始数据 按行查看 历史
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
第一章
数据库系统概述
数据(data),数据库(DataBase,DB),数据库管理系统(DBMS)和数据库系统是数据库技术密切相关的4个基本概念。
数据库系统的特点:
1.数据结构化
2.数据的共享性高,冗余度低易扩充
3.数据独立性高
4.数据库由数据库管理系统统统一管理和控制
数据管理技术经历了人工管理,文件系统,数据库系统三个阶段。
cls(清除上面的内容)
一。在CMD中打开
MsSql的登录与退出
-D ,--database=name 打开指定数据库
--delimiter = name 指定分隔符
-h, --host = name 服务器名称
-p, --password[=name] 密码
-P, --port=# 端口号
--prompt = name 设置提示符
-u , --user=name 用户名
-v, --version 输出版本信息并且退出
mysql登录 mysql -uroot -p -h127.0.0.1 -P3306
mysql退出 exit; quit; \q;
修改mysql提示符
1.连接客户端通过参数指定 mysql -uroot -proot -prompt 提示符
2.连接上客户端后通过prompt命令修改
prompt 提示符
promp /u
mysql 提示符
\D :完整的日期
\d :当前数据库
\h : 服务器名称
\u : 当前用户
mysql常用命令
显示当前服务器版本
select version();
显示当前日期时间
select now()
显示当前用户
select user()
1.1 数据模型
模型:是对现实世界的模拟和抽象
数据库模型分为四种:
层次模型,网关模型,关系模型,面向对象模型。
第二章
mysql(关系型数据库)
1.查询数据库服务器中所有的数据库
show databases;
2.选中某一个数据库进行操作
use 数据库名称
3.退出数据库
exit;
4.数据库中创建我们的数据库
create database 数据库名;
5.查看某个数据库中所有的数据表,查看数据表是否创建成功。
show tables;
6.创建一个数据表
create table 数据表名()
CREATE TABLE cctv(name VARCHAR(20),OWNER VARCHAR(20),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE);
7.查看创建好的数据表的结构
describe 数据表名字; desc
8.查看数据表中的记录
select * from 数据表名字;
9.向数据表中添加数据记录
insert into 数据表名字 values(添加内容);
10.删除数据
delete from 数据表名字 where 条件;
11.修改数据
update 数据表名字 set 要修改的东西 where 条件;
update a set age=18 where name="b";
12. 删除数据表:drop table [is exists] 表1,表2,表3...;
drop table 数据表名字;
13. 排除重复 distinct
select distinct 查找元素 from 数据表名;
14 查询区间 between...and...
scort:成绩表 degree:成绩
select * from scort where degree between 60 and 80;
或者 select * from score where degree>60 and degree<80
15 表示或者关系的查询 in
查询score表中成绩为85,86,88,
select * from score where degree in(85,86,88)
16 or 表示或者
where c="c" or cb="cb";
17 升序,降序
降序:select * from student order by class desc ;
升序: select * from student order by class asc;
order by
desc:降序 asc:升序
18. 统计 count
select count(*) from student where class=9511;
19.最高分 max
select max()
20. limit
第一个数子表示从多少开始,第二个数字表示查多少条
limit 0,2;
select * from new limit 0,2;
21. 平均值
select avg( )
22. group by 分组
select * from new group by name;
如果group by后面跟条件的话 加个having
select * from new group by id having id=3;
23.多表查询
select s_name,c_no,sc_degree from student,score where student.s_no =score.s_no;;
24.三表关联查询
as:给表从新命名
select sname,student.sno as stu_sno where 条件
25.year函数与带in关键字的子查询。
year:选择年份
select year(s_birthday) from student;
26. union 求并集(就是两个表连在一起)
select c_name from course
union
select c_no from course;
27.大于其中至少一个,any
select t_no from course where t_no >any(select t_no from course);
28.all()表示所有
select all(t_no) from course;
29. not , like ,%,_
not:不等于
like:比较字符
王%:只要第一个字符是王的
王_:_取一个字符
30. 当前年份new
select year(now());
31. 添加字段:alter table 表名 add 新字段名 数据类型;
alter table book add abc int;
31.1 添加有完成约束条件的字段:alter table 表名 add 新字段名 数据类型 约束;
alter table book add abc int default '0';
31.2 在表的第一列添加一个字段:alter table 表名 add 新字段名 数据类型 first;
alter table book add def int first;
31.3 在表的指定列添加一个字段:alter table 表名 add 新字段名 数据类型 after 字段名;
alter table book add ggg int after def;
32.删除字段:alter table 表名 drop 字段名;
alter table MyClass drop name;
33.列的定义修改
alter table 数据库外 modify 修改的列名 修改的类型;
alter table bumen modify name int;
after 列名: 放到那个列的后面
alter table bumen modify name varchar(5) after dianhua;
34. 修改表名:alter table 旧表名 rename to 新表名;
alter table bumen rename to bumen01;
35. 修改字段的数据类型:alter table 表名 modify 字段名 数据类型;
alter table book modify name varchar(10);
36.修改字段名:alter table 表名 change 旧字段名 新字段名 新数据类型;
alter table book change jli_name j_name varchar(6);
37. 修改字段的排列位置:alter table 表名 modify 字段1 数据类型 first | after 字段2;
alter table book modify abc int first;
38. 更改表的存储引擎:alter table 表名 engine=新引擎名;
39. 删除被其他表关联的主表:先删除外键约束,再删表;
常用的数据类型
a).数据类型
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
b).日期和时间
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
c).字符串类型
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
mysql服务的启动与停止
启动:net start mysql
关闭:net stop mysql
第三章
mysql建表约束
主键约束
它能够唯一确定一张表中的一条记录,也就是我们通过某个字段添加约束,就可以使得改字段不重复且不为空。
create table user( id int primary key , name varchar(20));
联合主键:只要值加起来不重复就可以
create table user( id int , name varchar(20),primary key(id,name))
加了primary key 不重复不为空
自增约束
create table user3(id int primary key auto_increment,name varchar(20));
insert into user3(name) values("cc");
加 primary key auto_increment 从1开始自动增长,每条数据加一
!!!!!如果我们创建表的时候,没有添加主键。
create table user(id int,name,varchar(2));
alter table user add primary key(id);
!!!!!!删除主键
alter table user drop primary key;
!!!!!!修改主键
alter table user modify id int primary key;
唯一约束
约束修饰的字段的值不可以重复
create table user(id int,name varchar(20);
add unique:添加唯一约束
alter table user add unique(name);
建表添加约束 create table user(id int ,name varchar(20),unique(name);
uniques(id,name);
添加唯一约束
alter table user modify name varchar(20) unique;
删除唯一约束
alter table user drop index name;
非空约束
修饰的字段不能为空 NULL
create table user(id int,name varchar(20) not null);
默认约束
插入字段值的时候,如果没有传值,就会使用默认值。
create table user(id int,name int default 10));
insert into uservalues(1,2); 如果传入了值,就不会使用默认值。
外键约束
涉及两个表:父表,子表
主表,副表。
create table classes(id int primary key,name varchar(20));
create table students(id int primary key,name varchar(20),class_id int,foreign key(class_id) references classes(id));
create table stude1(name1 int primary key,scort int,ccc_name varchar(20),foreign key(ccc_name) references ccc(name));
用foreign key(选择的外键) references 关联主表名(关联的键)
第三章 数据库的三大设计范式
1.第一范式 1NF
数据表中的所有字段都是不可分割的原子值?
create table user(id int primary key,name varchar(20));
字段还可以继续拆分的,就不满足第一范式。不能拆分了就满足第一港式。
例如:中国湖北恩施咸丰大坝
它还可以折成 : 中国 湖北 恩施 咸丰 大坝
2.第二范式
必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖与主键。否则折表。
如果要出现不完全依赖,只可能发生在联合主键的情况下。
其实就是一表中的所有元素只依赖与一个主键!!!!!!
3.第三范式 3NF
必须先满足第二范式,除开主键列的其他列之间不能有传送依赖关系。
例如: 其实就是 一个表中除开主键,其他的元素不可以相互依赖。
第四章 SQL的四种连接查询
内连接
inner join 或者 join
select * from user inner join user1 on user.id = user1.id;
on:表示连接条件
内联查询,其实就是两张表中的数据,通过某个字段对,查询出相关记录数据。没有就不显示。
外链接
1.左外连接 left join 或者 left outer join
select * from user left join user1 on user.id = user1.id;
左外连接,会把左边表(urse)里面的所有数据取出来,而右表中(user1)的数据,如果有相等的,就显示出来。如果没有,就会补UNLL
2.右外连接 right join 或 right outer join
select * from user right join user1 on user.id = user1.id;
右外连接,会把右边表(urse)里面的所有数据取出来,而左表中(user1)的数据,如果有相等的,就显示出来。如果没有,就会补UNLL
3.完全外链接 full join 或者 full outer join
select * from user full join user1 on user.id = user1.id;
MYSQL 不支持full join ,但可以用union连接表
第五章 mysql事务
mysql中,事务其实是一个最小的不可分割的工作单元。事务能够保证一个业务的完整性。
多条sql语句,可能会有同时成功的要求,要么就同时失败。
mysql 中如何控制事务
1.mysql 默认是开启事务的(自动提交)
select @@autocommit;
默认事务开启的作用是什么?
当我们去执行一个sql 语句的时候,效果会立即体现出来,且不能回滚。
事务回滚:撤销sql语句执行效果
rollback;
2.设置 mysql 自动提交为 false
commit:手动提交 用rollback的话有效果
set autocommit=0 就变成了手支提交
select @@autocommit :自动提交数据@@autocommit = 1 用rollback 就可以撤销上条数据。
rollback: 撤销上条数据
就是手动提交不可以撤销 自动提交设置成0就可以提交。
事务给我们提供了一个返回的机会。
begin; start transaction; 都可以手动开启一个事务
begin;(或者 start transaction)
update user set mo =mo+100 where name='b';
在前面加上begin和start transaction就是和 setautocommit=0设置一样。
事务的四大特征:
A 原子性:事务是最小的单位,不可以在分割
B 一致性:事务要求,同一事务中的 sql 语句 ,必须保证同时成功或者同时失败。
I 隔离性:事务1 和 事务2 之间是具有隔离性的。
D 持久性:事务一但结束(commit,rollback),就不可以返回。
事务开启:
1.修改默认提交 set autocommit=0;
2.begin;
3.start transaction;
用上面三种了 后面用commit提交数据
事务手动提交:
commit;
事务手支回滚:
rollback;
事务的隔离性:
1.read uncommitted; 读未提交的
2.read committed; 读已经提交的
3.repeatable read; 可以重复读
4.serializable; 串行化
1-read uncommitted
如果有事务a,和事务b
a事务对数据进行操作,在操作的过程中,事务没有被提交,但是b,可以看见a 操作的结果。
如果两个不同的地主,都在进行操作,如果事务a 开启之后,他的数据可以被其他事务读取到,就会出现脏读(脏读:一个事务读到了别外一个事务没有提交的数据,就叫做脏读),实现开发不允许脏读的出现。!!!!
如何查看数据库的隔离级别?
mysql 8.0:
--系统级别的 : select @@global.transaction_isolation;
--会话级别的 : select @@transaction_isolation;
mysql 默认隔离级别 REPEATABLE-READ
mysql 5.x:(数据库版本是5的话)
select @@global.tx_isolation
select @@tx_isolation;
如何修改隔离级别?
set global transaction isolation level read uncommitted;
read uncommitted(A事务对数据进行操作,在操作的过程中,事务没有被提交,但是B,可以看见A的操作结果。)
//1.先创建数据表
mysql> select * from user1;
+------+--------+-------+
| id | name | money |
+------+--------+-------+
| 1 | 小明 | 10000 |
| 1 | 淘宝店 | 10000 |
| 2 | 小涵 | 5000 |
+------+--------+-------+
3 rows in set (0.00 sec)
//2.查看数据表的隔离级别
select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-UNCOMMITTED |
+-----------------------+
//3.修改隔离级别
set global transaction isolation level read uncommitted;
//4.查看修改过来没有
mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-UNCOMMITTED |
+-----------------------+
//5.用begin开启事务
begin;
//6.对数据表进行操作,小明把钱给了淘宝店
update user1 set money = money-9000 where name="小明";
update user1 set money = money+9000 where name="淘宝店";
mysql> select * from user1;
+------+--------+-------+
| id | name | money |
+------+--------+-------+
| 1 | 小明 | 1000 |
| 1 | 淘宝店 | 19000 |
| 2 | 小涵 | 5000 |
+------+--------+-------+
//7.小明用rollback撤销了上一步给钱的操作。
rollback;
mysql> select * from user1;
+------+--------+-------+
| id | name | money |
+------+--------+-------+
| 1 | 小明 | 10000 |
| 1 | 淘宝店 | 10000 |
| 2 | 小涵 | 5000 |
+------+--------+-------+
3 rows in set (0.00 sec)
2.read committed;(读已经提交的)
a.先创建表
b.修改事务(在查看事务select @@global.tx_isolation;) set global transaction isolation level read committed;
c.开启事务 start transaction
d.对事务的操作
e.提交事务 commit;
f.读到了提交的数据
3.repeatable read; (可以重复读)
事务1:
a.先创建表
b.修改事务(在查看事务select @@global.tx_isolation;) set global transaction isolation level repeatable read;
c.开启事务 start transaction
d.插入数据
e.提交事务 commit;
f.读到了提交的数据
事务2:
a.先创建表
b.查看表
c.开启事务 start transaction
d.对事务的操作,插入和事务1一样的数据
e.出错(出现幻读)
事务1和事务2 同时操作一张表,事务1提交的数据,不能被事务2读到,就要造成幻读。
4.serializable;(串行化)
事务1 :
a.先创建表
b.修改事务(在查看事务select @@global.tx_isolation;) set global transaction isolation level serializable;
c.开启事务 start transaction
d.对事务的操作
e.提交事务 commit;
f.读到了提交的数据
事务2:
a.先创建表
b.修改事务(在查看事务select @@global.tx_isolation;) set global transaction isolation level serializable;
c.开启事务 start transaction
如果事务2没有commit提交事务,那么事务1就无法提交数据,就进入了排队状态(串行化),要等事务2提交commit 事务1才可以提交数据。(其实和Python中的互斥锁一样)
串行化问题是,性能 差
READ-UNCOMMITTED > READ-COMMITTED>REPEATABLE-READ>SERIALIZABLE;
第五章 操作数据表记录
5.1 插入,更新,删除记录操作
修改表名 : alert table 表名 rename 要修改的表名;
alter table A rename B;
添加表列 :alter table 表名 add column 添加的列名 添加的类型;
alter table B add column sex varchar(10);
删除表列: alert table 表名 drop column 删除的列名
alter table B drop column age;
修改表列类型(属性) alter table 表名 modify 修改的列名 要修改的属性;
alter table B modify sex char(20);
修改表列名和属性 alter table 表名 change column 需要修改的类名 修改后的类名 修改后的属性;
alter table B change column id iddd char(10);
数据的插入 insert into 表名 values();
insert into B values(1,2);
insert into 表名 set id = 3;
insert into B select
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yyzlt/mysql.git
git@gitee.com:yyzlt/mysql.git
yyzlt
mysql
Mysql
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385