创建表
mysql> create table yyqx(用户名 char(20),密码 int,余额 int);
写入内容:mysql> insert into yyqx values("张飞",123123,10000),("李四",123123,20000);
Select * from yyqx; 查看
在插入一行数据再插入一个张飞
如果想让某一列数据不重复主键
主键及自增
每一张表通常会有一个且只有一个主键 来表示每条数据的唯一性
主键其实是对某一个字段的 约束
主键特性;1.值不能重复 2.非空(不能赋值为null)
主键约束的写法;
主键+自增的写法:
删除主键
先把刚刚创建的张飞删掉:delete from yyqx where 密码=666666;
设置主键:alter table yyqx modify `用户名` char(20) primary key;#主#键
表设计
再设计表字段的时候,如果某个字段又可能出现大量的重复(称为数据)
需要把该字段单独提出创建一张新表,把可能重复的放在新表内,再原表只需要使用新表的Id即可
练习:
mysql> create database tmp;
Query OK, 1 row affected (0.00 sec)
Use tmp;
mysql> create table emp (
id int primary key auto_increment,
name varchar(20),
detpid int,
joindate date
);
Query OK, 0 rows affected (0.00 sec)
mysql> create table dept (
-> id int primary key auto_increment,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.00 sec)
insert into dept (name) values ('财务');
insert into dept (name) values ('市场');
从两张表通过相同字段来查询它们分别是那个部的有哪些。
select dept.name,ddd.name from dept,ddd where dept.id=ddd.detpid;
+--------+--------+
| name | name |
+--------+--------+
| 财务 | 小明 |
| 财务 | 小红 |
| 市场 | 小白 |
| 市场 | 小绿 |
+--------+--------+
只查市场部
select dept.name,ddd.name from dept,ddd where dept.id=2 and ddd.detpid=2;
+--------+--------+
| name | name |
+--------+--------+
| 市场 | 小白 |
| 市场 | 小绿 |
+--------+--------+
Mysql事务
数据库:关系型数据库(支持事务) 非关系型数据库(不支持)
数据库事务概述
什么是事务(transaction)
保证成批操作要么完全执行,要么完全不执行,维护数据的完整性。也就是要么成功要么失败。
一个事务包含多条sql语句,而且这些sql语句之间存在一定的关系
事务可以是n条sql语句(n>=0)
不是所有数据库引擎支持事务,lnnoDB引擎支持事务处理
数据库事务特性;(ACLD)
一个事务中存有10条sql语句,那么咱在执行事务的时候,其实就是在执行那十条sql语句,这10条sql页边距只有全部执行成功,事务才会成功,只要有1条失败,那么整个事务就会失败
比如a用户有1000块钱,B也有1000块钱,A用户给B用户转500,那么A用户和B用户的前的总额为多少?2000
事务并发不进行事务隔离
1.脏读:事务A读到未提交事务B修改的数据,如果此时
事务B中途执行失败回滚,那么此时事务A读取到的就是脏数据
- 不可重复读:同一个事务中,对同一份数据读取的结果不一致。事务A在事务B对数据更新前进读取,然后事务B更新提交,事务A再次读取,这时侯两次读取的数据不同。
- 幻读:同一个事务中,同一个查询多次返回的结果不一样。事务B查询表的记录数,然后 事务A对表插入一条记录,接着事务B再次查询发现记录数不同。
区别
脏读和不可重复读:脏读是事务读取了还未提交的更新数据。不可重复读,几次读取的数据不同。
不可重复读和幻读的区别:前者是几次读取数不同,后者是几次读取数据整体不同。
隔离级别
隔离级别 | 作用 |
Serializable(串行化) | 避免脏读,不可重复读,幻读 |
Repeatable(可重复读) | 避免脏读,不可重复读 |
Read committed(读已提交) | 避免脏读 |
Read uncommitted(读未提交) | none |
mysql支持上面4种隔离级别,默认为可重复读
MySQL数据库管理事务:
管理事务:
mysql> create database linuxfan; #创建一个数据库
mysql> use linuxfan; #指向Linuxfan
mysql> create table it (岗位 char(20),姓名 char(20),身份证 char(18),学历 char(10),工资 int);
mysql> show create table it;
mysql> insert into it values('Php工程师','曹操','13231088322','本')','9000');
查一下表内容:mysql> select * from it;
Exit退出然后再进数据库刚刚写的内容还在。
开始事务之前首先要敲一个:begin; #开始事务
插入一行数据:insert into it values('Php工程师','赵云','13231088322','本','9500');
查一下mysql> select * from it; 在里面, 没有提交退出数据库重新进发现赵云消失了。
Commit; #提交事务 退出重进
自动提交查mysql> show variables like '%autocommit%';
mysql> set autocommit=0;
Rollback:
Begin;一下插入一行数据
关掉自动提交
set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
mysql> begin;
再插入一行
输入:mysql> rollback; #回滚刚刚插入的一行没有了