mysql

数据库

SQL程序语言

基本概念

DDL:DDL全称是Data Definition Language,即数据定义语言,定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,比如表、聚簇、索引、视图、函数、存储过程和触发器等等。

CURD:

DML数据操纵语言全程是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。

​ DQL:数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句

DCL:数据控制语言:Data Control Language。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。

比如常见的授权、取消授权、回滚、提交等等操作。

TPL:事务处理语言,多线程并发操作同一个文件 begin transaction \commit \rollback\ save point

Mysql数据库

DDL:

​ 数据库字符集默认latin1()

​ 查询方法:select 列 from 表 where 数据库=名字;

​ 不能储存中文的修改方法:create database test default character set=’utf8’;

​ 如果想单独的表格需要中文:create table <表格名>(列 数据类型(长度),列 数据类型(长度))

​ character set utf8[collate 排序规则:utf8_(general(默认的,新能高))unicode_ci];

​ create database <数据库名>

​ 1.创建database

​ 2.create table <表格名>(列 数据类型(长度),列 数据类型(长度));

​ 3.数据类型

​ 数值型(整数(tintint smallint mediumint int(4字节) bigint)浮点(float(4字节) double decimal numeric))

​ 字符串char varchar (可变长字符串) binary(二进制) varbinary 大文本(4000字以上):blob text

​ 日期时间 date time datetime timestamp

​ 4.修改

​ alter table <源表名> rename [to] <新表名>;修改表名

​ alter table <源表名> change [to] <源列名> <新类型><新长度>;修改原有的列

​ alter table <源表名> add [to] <源列名> <新类型><新长度>;新增列

​ alter table <源表名> drop[to] <源列名>;删除列

*DML:

​ 写入信息

​ insert into 表名(列名,列名) value (值,值)

​ update 表名 set列=值,列=值 [where…]

​ delete from 表名[where]

*DQL:

读取信息

​ select 列名,列名;select *from 表名(显示所有)

条件筛选

​ (除了新增外都可以做筛选)where :用于符合条件的行数

​ 比较运算符(没有==):select * from student where chinese > 95

​ 逻辑(and or not between and in(92,99)(92-99) like(模糊查询%h_(查找倒数第二个字符是h的)))and 效率低,条件苛刻的放在条件宽松前面

排序

​ order by desc(降序) asc(升序 默认) 可以联合排序

常用函数
比较函数 ISNULL()
数字函数abs floor mod pow round
日期时间Calendar
控制流程函数(转换函数)

​ 1.if : x>1 ? a:b if(x>1,a,b);

​ 2.ifnull(值,值2);如果值为空,转换为值2

字符串函数

​ String类 length concat substr instr replace upper lower ltrim rteim

*分组函数(聚合函数)

​ 去重复select distinct 列 …如果有一样的信息会合并,所以需要行个数一致

​ select distinct 列,列,如果列每个信息完全一致合并

分组函数+分组条件

​ count(列名)

​ max() min() avg() sum()

​ 分组条件 group by 列如果在SQL搭配了分组条件,只会展现,分组条件与函数

​ select classsid,avg(chinese) from student group by classid ;

​ having与where类似,优先级:where> group by >having >orderby

*嵌套

​ 1.条件是结果的时候

​ 2.筛选的表格为基础再次查询 select *from (select sname ,ssex ),sage classid from student newtable

关键字

in

只能嵌套使用:

any >any =any(i结果与n一样) <any !=any

some 与any一样

all

集合操作

MYsql只有并集,ONACLE有交集、差集

​ union 要求列数一样,类型没有要求,拼接后列明是第一个 union all(直接合并,不做其他操作)union(重复元素记录第一个,性能漫)

约束

列的约束

1.主键约束 Primary Key

每个表格只有一个列被设置为主键约束,标志表格数据的唯一存在

要求列不能为空,当前的列值不能重复

alter tables 表明 add constraint 约束的名字 约束类型 (列);

可以通过desc 表名来查看约束的描述

alter tables 表明 modify classid int(4) auto_increment;

取消主键后不重复的特性取消了,非空特性还在

删除:alter table myclass drop Primary Key 约束名

2.唯一约束 unique [key]

列的值不能重复,但是可以为空 可以存在多个列

删除:alter table myclass drop index 约束名

3.非空约束

alter tables 表明 modify 原名 …[not ]null default xxx(默认值为xxx)

change …not null default xxx

4.外键约束references

​ 表格信息不能随意填写,受另一个表格影响

​ [CONST在创建表时设置外键约束

​ RAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]

​ ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

​ ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

表格之间的关系

一对一 在一对多基础上 将多端设置为唯一约束

多对多 中间表

一对多 一端保证一个主键 多端保证有应该外键关联

**联合查询

等值连接

广义笛卡尔积>条件筛选>等值连接

两个表格拼接后筛选

select *from A, B where 条件

外连接

select *from A left/right [outer] join B on 条件

1.两张表格A,B取决于谁的数据在左边显示

2.left控制以哪个表格为基准,他的数据会全部显示出来,非基准的表格按照条件显示,若满足显示,不满足显示空(null)

内连接(自连接)

select *from A inner join B(A) on 条件(结果和等值连接一样,效能更高)

行列互换v

分页查询

查询 limit a ,b; a(偏移量),b(显示的行数)

(Oracle 数据库伪列)

DCL(权限)

cmd:mysql -u xxx(用户名如root) -p

grant 赋予权限

revoke 回收权限

现在身份:SYSDBA管理员

创建新的用户,赋予权限

注销,用新用户登录

回收

通过root查看mysql中user user列 host列(什么ip可以操作)password列 authentication_string列

创建用户:create user ‘用户名‘@‘IP’ identified by ‘password’(默认权限:Usage(只能登录))

show grants for ‘用户名‘@‘IP’查看权限

grant 权限 on 数据库名.表 to ‘用户名‘@‘IP’

grant all on *. * to ‘zzt‘@’localhost’;

flush privileges;刷新

update user 表 set authentication_string = password(‘123’)修改密码 where user =’zzt’

drop user ‘用户名‘@‘IP’

设计范式 Normal Form(标准化形式)

开发数据库编辑器:workBench\SQLYOG\Navicat

TPL(事物)

ACID

A:atomicity (原子性) 事物中所有操作是一个整体

show variables like ‘%commit%’

C:consisitency(一致性) 一个用户操作了数据提交后,另一个可以看到

I:lsolation(隔离性) 多个用户操作时隔离

事物的隔离性可能会产生多线程并发操作同一个数据库表格的问题

serializable 最高,避免所有问题,性能很慢

repeatable read 可重复读

read committed 读取已提交

read uncommitted 读取未提交

脏读:一个人读到了其他人未提交数据

不可重复读;与第一次不一样

幻读:与第一次不一样(新增)

修改:set session transaction isolation level xxx;

查看:@@tx——isolation

D: durebility(持久性) 一个用户操作后被提交 是永久性的


mysql
http://example.com/2024/04/27/mysql/
作者
John Doe
发布于
2024年4月27日
许可协议