码迷,mamicode.com
首页 > 数据库 > 详细

mysql 全解

时间:2019-12-13 23:51:42      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:方法   改变   设置   exist   abc   local   负数   orm   表锁   


https://www.cnblogs.com/snake23/p/9635822.html 引擎的介绍

primarykey 主键 PERIMARY KEY
foreign key 外键 FOREIGN KEY
references 连接 REFERENCES
auto increment 自动增长 AUTO_INCREMENTY
uniquekey 唯一约束 UNIQUE KEY

unsigned 无负数 (无符号) 2倍int UNSIGNED
一般情况下 int【-127->128】 加 UNSIGNED 变为 INT【0-255】

default 默认值 DEFAULT


create table abc(
id int(10) NOT NULL AOTO_INCREMENT PRIMARY KEY,
username VARCHAR(10) NOT NULL UNIQUE KEY,
password VARCHAR(10) NOT NULL UNIQUE KEY,
sex TINYINT(5) NOT NULL DEFAULT ‘0‘,
);

成功后————————》

CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL,
`password` varchar(10) NOT NULL,
`sex` tinyint(3) NOT NULL DEFAULT ‘0‘,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `password` (`password`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

 

INSERT INTO abc(id,username,password,sex) values(1,‘aaa‘,‘123‘,0);

SELECT * FROM abc ;
SELECT id,username,password,sex FORM abc;

UPDATE abc set username=‘ccc‘ WHERE id=1;

DELETE FROM abc WHERE id=1;

DROP TABLE abc;


//添加单列
ALTER TABLE ABC ADD age int(10) NOT NULL //添加列
//添加多列
ALTER TABLE ABC ADD (hobby varchar(10) NOT NULL,kp varchar(10) NOT NULL) //添加列


//添加 默认 约束
ALTER TABLE ABC ADD age TINYINT DEFAULT 0;

//设置修改 默认值 约束
ALTER TABLE ABC alter age set default 15;

//删除 默认 约束
ALTER TABLE ABC alter age DROP default;

//删除主键约束
ALTER TABLE ABC DROP PRIMARY KEY;
//删除唯一约束
ALTER TABLE ABC DROP UNIQUE ;
//删除外键约束
ALTER TABLE ABC DROP FOREIGN KEY;

 


//修改该 字段的定义
ALTER TABLE ABC MODIFY id int(5) NOT NULL SET DEFAULT 1;

//修改该 字段的名字
ALTER TABLE ABC CHANGE id pid int(5);

 

IF NOT EXISTS
-查询没有选修102号课程的学生的学生和姓名
select SNO,SNAME from Stu where not exists(
select *from SCORE where(Stu.SNO=SNO and CNO=‘102‘)
)

--查询选修了所有课程的学生的学号和姓名
select SNO,SNAME from Stu where not exists(
select * from C where not exists(
select * from SCORE where SNO=Stu.SNO and C.CNO=CNO)
)

 


mysql数据库,当且仅当引擎是InnoDB,才支持【事务】;
//设置mysql的隔离级别:形式为:set session transaction isolation level 设置事务隔离级别

查 级别语句 show variables like ‘transaction_isolation‘; repeatable-read (默认的)


//设置read uncommitted级别:
set session transaction isolation level read uncommitted;
读尚未提交的数据 不能解决(脏读,幻读,不可重复度)

//设置read committed级别:
set session transaction isolation level read committed;
读已提交的数据 解决(脏读)

//设置repeatable read级别:
set session transaction isolation level repeatable read;
可重复读 解决(脏读不可重复度)

//设置serializable级别:
set session transaction isolation level serializable;
串行化 数据 解了(脏读,幻读,不可重复度)

 

 


MySQL大致可归纳为以下【3种锁】:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般
【加锁】
MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,
会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁
【加锁】

给MyISAM表显式加锁,一般是为了一定程度模拟事务操作,实现对某一时间点多个表的一致性读取。

【例如】,有一个订单表orders,其中记录有订单的总金额total,同时还有一个订单明细表order_detail,其中记录有订单每一产品的金额小计subtotal,假设我们需要检查这两个表的金额合计是否相等,可能就需要执行如下两条SQL:

1
SELECT SUM(total) FROM orders;
2
SELECT SUM(subtotal) FROM order_detail;

这时,如果不先给这两个表加锁,就可能产生错误的结果,因为第一条语句执行过程中,order_detail表可能已经发生了改变。因此,正确的方法应该是:

1
LOCK tables orders read local,order_detail read local;
2
SELECT SUM(total) FROM orders;
3
SELECT SUM(subtotal) FROM order_detail;
4
Unlock tables;

mysql 全解

标签:方法   改变   设置   exist   abc   local   负数   orm   表锁   

原文地址:https://www.cnblogs.com/KFKang/p/12037581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!