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(持久性) 一个用户操作后被提交 是永久性的