有关MySQL中的小细节

约束

  • UNIQUE可以同时修饰多个列,NOT NUL不可以。UNIQUE(列名)
  • UNIQUE修饰多个列时,占新的一行,即前一行用逗号结尾。
create table tb(
	id  INT PRIMARY KEY AUTO_INCREMENT,
	age int NOT NULL ,
	num VARCHAR(10) ,
	sex CHAR(1),
	unique(age,num)
);
  • MySQL无法直接删除主键约束,需通过复制原表格,进行重新起名。
  • 通过as(可省略)为列名起其他名时,必须在该列已创建的情况下进行取名。
  • 外键中带有括号的地方表从属关系,不可以去掉括号。
  • CREATE TABLE STUDENT (
        ID INT PRIMARY KEY,
        NAME VARCHAR(20) NOT NULL,
        C_id CHAR(10),
        FOREIGN KEY (C_id) REFERENCES Course(id)
    );
    
  • 放最后进行设置:外键FORIGN KEY .

多表查询

  • 笛卡尔积:取A.B集合所有的组合情况
  • 多表查询:从多张表查询数据
-- 查询隐式内连接
select * from emp,dep where dep.id=emp.id;
-- 查询显式内连接
SELECT *from emp inner join dep on dep.id=emp.id;
-- 查询左外连接
SELECT * from emp LEFT JOIN dep on dep.id=emp.id;
-- 查询右外连接S
SELECT * from emp right join dep on dep.id=emp.id;
  • 子查询
  • -- 子查询
    -- 单行单列:作为条件,使用=  !=  >  <等进行条件判断
    SELECT * FROM emp ,dep;
    -- 查询age>=孙七的年纪的员工信息
    
    step1:查询孙七的年纪
    SELECT age FROM emp WHERE name="孙七";
    
    step2:查询年纪大于22的员工信息
    SELECT * from emp WHERE age>=22;
    
    -- 综上:
    SELECT *from emp where age>=(SELECT age from emp WHERE name="孙七");
    
    -- 多行单列:
    -- 查询"销售部"和"研发部"的所有的员工信息
    step1:查询销售部和研发部对应emp表中的所在id
    select id from dep WHERE dep_name='销售部' or dep_name='研发部';
    
    SELECT * FROM emp where dep_id in ( select id from dep WHERE dep_name='销售部' or dep_name='研发部');
    
    
    -- 多行多列
    -- 查询年龄在20岁之后的员工信息和部门信息
    step1:查询日期在20岁之后的员工
    SELECT * FROM emp where age>=20;
     step2:查询这些员工的员工信息和部门信息
    SELECT * from emp,dep where emp.dep_id=dep.id;
    
    -- 综合得到:
    -- 将初步筛选的多行多列的表起别名为t1
    SELECT * FROM (SELECT * FROM emp where age>=20) t1 ,dep WHERE t1.dep_id=dep.id;
    

    事务

  • DROP TABLE IF EXISTS account;
    
    -- 创建账户表
    CREATE table account(
    	id int auto_increment PRIMARY KEY,
    	name char(10),
    	money double(10,2)
    );
    
    -- 添加数据
    INSERT INTO account(name,money) VALUES('张三',1000),('李四',1000);
    
    SELECT * from account;
    
    -- 转账操作
    -- 开启事务:语句出错会重新初始化
    BEGIN;
    -- 1.查询李四的余额
    SELECT money FROM account where name='李四';
    -- 2.李四金额-500
    UPDATE account set money=money-500 WHERE name='李四';
    -- 3.张三金额+500
    UPDATE account set money=money+500 where name='张三';
    
    -- 提交事务
    COMMIT;
    
    -- 回滚事务
    -- 回到开始事物的地方
    ROLLBACK;
  • 四大特征:
    • A原子性
    • C一致性:事物无论执行成功与否,数据总体不变。
    • I隔离性:  弱,操作可见,性能高。
    • D持久性:数据回滚,提交,改变根本。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要熬夜的打工人!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值