# 登录MySQL
$ mysql -u root -p12345612
# 退出MySQL数据库服务器
exit;
-- 显示所有数据库
show databases;
-- 创建数据库
CREATE DATABASE test;
-- 切换数据库
use test;
-- 显示数据库中的所有表
show tables;
-- 创建数据表
CREATE TABLE pet (
name VARCHAR(20),
owner VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE
);
-- 查看数据表结构
-- describe pet;
desc pet;
-- 查询表
SELECT * from pet;
-- 插入数据
INSERT INTO pet VALUES ('puffball', 'Diane', 'hamster', 'f', '1990-03-30', NULL);
-- 修改数据
UPDATE pet SET name = 'squirrel' where owner = 'Diane';
-- 删除数据
DELETE FROM pet where name = 'squirrel';
-- 删除表
DROP TABLE myorder;
//更改表属性结构
【alter table xxx 动词 xxx】
-- 添加主键约束
-- 如果忘记设置主键,还可以通过SQL语句设置(两种方式):
ALTER TABLE user ADD PRIMARY KEY(id);
ALTER TABLE user MODIFY id INT PRIMARY KEY;
-- 删除主键
ALTER TABLE user drop PRIMARY KEY;
约束类型:
--建表约束
1. 类型后面加约束
id INT PRIMARY KEY
2. 单独一句
① 单个约束
paimary(id)
② 多个约束
primary(id,name)
1、建表的时候可以添加约束 2、可以使用alter。。。add。。。 3、alter。。。modify。。。 4、删除用 alter。。。drop。。。
①(sno varchar(10) primary key); ②(sno varchar(10), primary key(sno))
ALTER TABLE table_name RENAME TO new_table_name
CONCAT(last_name, ' ', first_name) as Name
SET emp_no = REPLACE(emp_no, 10001, 10005)
WHERE id = 5;
emp_no列中10001 替换成10005
start:从哪开始查 (第一个下标为0) number:查几个出来
select sno,sname from student where xxxxx union select sno,sname from student where xxxxx;
> ANY 大于子查询结果中的某个值 ,即大于最小值
> ALL 大于子查询结果中的所有值,即大于最大值
< ANY 小于子查询结果中的某个值 ,即小于最大值
< ALL 小于子查询结果中的所有值,即小于最小值
= ANY 等于子查询结果中的某个值 ,相当于in
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=(或<>)ANY 不等于子查询结果中的某个值,相当于not in
!=(或<>)ALL 不等于子查询结果中的任何一个值,相当于not in
year(now()) - year(birthday)
1. 1NF
字段不可拆分 (可拆分的例子:中国广东广州xx街道)
2. 2NF
列都完全依赖于主键,否则要拆分(如果出现不完全依赖,只可能发生在联合主键的情况下,此时也要拆分为多个表)
3. 3NF
依赖不能有传递关系,否则要拆分
1. 内连接
> A inner join B on A.sno=B.sno
>
> 相当于
>
> where A.sno=B.sno
2. 左连接 (保留A中所有并且输出A∩B,无值填null)
> A left join B on A.sno=B.sno
3. 右链接(保留B中所有并且输出A∩B,无值填null)
> A right join B on A.sno=B.sno
4. 外连接(保留A B所有,无值填null)
> A full join B on A.sno=B.sno
1. 设置事务(默认 autocommit=1 开启自动提交)
> set autocommit = 0 or 1; (0的时候是关闭自动提交,开启手动提交)
2. 查看事务
> select @@AUTOCOMMIT;
3. 回滚到最后一次提交(撤销)
> rollback;
4. 事务开启后,需要手动提交数据(提交后则无法回滚)
> commit;
5. 事务的开启
> ① begin;
>
> ② start transaction;
事务的两种启动方法:
1. 当autocommit=0时
①set autocommit=0;
......
commit;
(每次commit前的都算一次事务)
2. 当autocommit=1时(默认)
①begin; (start transaction;)
......
commit;
(begin ~~~ 到 commit;才是一次事务)
②.........;(每次输入都是一次事务)
1. 原子性
事务是最小单位,不可再分割,要么一起成功,要么一起失败。
2. 一致性
编写的程序某个特性要一致,如:not null。
3. 隔离性(**表中下面的隔离级别高,性能低**)
并发事务之间是隔离的,在事务未提交之前不能被其他session查看
4. 持久性
事务一旦提交则对数据的改变是无法回滚的。
1. 查看
> 系统级别
>
> SELECT@@GLOBAL.TRANSACTION_ISOLATIO;
>
> 会话级别
>
> SELECT @@TRANSACTION_ISOLATION;
2. 修改
> -- 设置系统隔离级别,LEVEL 后面表示要设置的隔离级别 (READ UNCOMMITTED)。
>
> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
事务的隔离性可分为四种 ( 性能从低到高 ) :(系统默认是REPEATABLE READ)
1. 脏读
解释:一个事务读取到另外一个事务还未提交的数据
例子:【小明赖账】小明买东西给了钱,商家发了货,小明回滚。
2. 不可重复读
解释:在读取同一个表的数据时,可能会发生前后不一致的情况
例子:【小明算账】小张在算A表平均值,小刘又正在改动A表,小张最后算出来的是小刘改动后的表的平均值。
3. 幻读
解释:一个事务提交的数据,不能被其他事务读取到
例子:【小明建q号】小明在a地创建x账号,恰好小刘在小明前几秒创建了x账号,此时小明创建不了x账号,因为已经存在了,但小明查表显示却无x账号。