2022年02月09日

select后面出现子查询语句 

mysql> select e.ename, e.deptno, (select d.dname from dept d where e.deptno = d.deptno) asdname from emp e;
+--------+--------+------------+
| ename  | deptno | asdname    |
+--------+--------+------------+
| SMITH  |     20 | RESEARCH   |
| ALLEN  |     30 | SALES      |
| WARD   |     30 | SALES      |
| JONES  |     20 | RESEARCH   |
| MARTIN |     30 | SALES      |
| BLAKE  |     30 | SALES      |
| CLARK  |     10 | ACCOUNTING |
| SCOTT  |     20 | RESEARCH   |
| KING   |     10 | ACCOUNTING |
| TURNER |     30 | SALES      |
| ADAMS  |     20 | RESEARCH   |
| JAMES  |     30 | SALES      |
| FORD   |     20 | RESEARCH   |
| MILLER |     10 | ACCOUNTING |
+--------+--------+------------+
14 rows in set (0.00 sec)

将符合条件的查出来,部门编号相等的情况下取部门名字,子查询只能返回一条结果,多余一条就报错

1. union 合并查询结果集

还有种写法是job in都可以表示查询员工岗位;如何使用union合并?union的效率更好一些,没连接一次新表,满足笛卡尔积.成倍的翻,但是union可以较少匹配的次数,字啊较少匹配的次数情况下,可以完成两个结果集的拼接,使用union是100加100,用表连接是100乘以100,把乘法变成了加法,匹配次数会减少,使用时候的注意事项,要求列数相同varchar是字符串,mysql可以,orcal语法严格会报错,要求合并时合并的列数一致,而且类型也要一致;

mysql> select ename, job from emp where job = "manager"
    -> union
    -> select ename, job from emp where job = "salesman";
+--------+----------+
| ename  | job      |
+--------+----------+
| JONES  | MANAGER  |
| BLAKE  | MANAGER  |
| CLARK  | MANAGER  |
| ALLEN  | SALESMAN |
| WARD   | SALESMAN |
| MARTIN | SALESMAN |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.00 sec)

2.or语句前后

都要将前面的字段写一下

3.limit是将查询结果集的一部分取出来,通常使用在分页查询当中

分页查询,将查询结果的一部分显示出来,一页显示10条记录,分页的作用是提高用户的体验,一次都查出来用户体检差,可以翻页看,显示limit,直接加5前五条,0,5也还是前五条,第一个参数是起始位置,limit. 包含5,9名的记录,后面的数字确定,总结:第一个数字是起始数字加一,第二个数字是到多少行减起始数字 limit (pageno  - 1)* pagesize, pagesize ,总结select fromwhere groupby orderby limit f w g h s o l

4.表的创建(建表)

建表的语法格式,ddl语句crate table 表名(字段名1 数据类型,重复),

create table 表名(

1,名型

2,

3最后这个不加

);mysql有很多数据类型

python 类型:整型,浮点型,字符串;  元组,列表; 字典,集合

mysql类型:整型,浮点,字符串

varchar:可变长度字符串,会动态分布空间,动态判断,比较智能节省空间,会根据实际的长度动态分布空间,char(10)固定分配空间,定长字符串,不管实际的长度是多少分配固定的空间去存储数据,使用不恰当的时候会导致空间浪费,性别字段选择什么:char因为是固定的,因为性别是固定长度,姓名长度选择varchar,因为不确定长度,取决于存储数据的长短,int 数字中的,datetime date, clob字符大对象,最多可以存储4g的字符串,超过255个字符的都要用clob的类型存储,blob二进制大对象专门存储图片声音,视频等流媒体数据,往blog类型的兹附上插入数据的时候.例如插入一各图片视频等,要使用io流才行t_movie 电影表,专门存储电影信息的

编号                名字                描述信息                上映日期                 时长                海报      类型

no(bigint)  name(varchar)    describtion(clob) playtime(date) time(double)  image(blog)  type(char)

1000        哪吒                        ........                 2020-01-15        2.5                ........               "动画"

1001        山村尸体之山村老师   ......               2022-05-05        3.1                .......                "剧情"

创建一个学生表,学号姓名,年龄,邮箱地址

create table t_student(

        no int,

        name varchar(32),

        sex char(1),

        age int(3),

        email varchar(255)

);

drop table t_student;当这张表不存在的时候会报错

删除表 drop table if exists t_student,

5.insert语句 爱艾薇儿

insert into表名(字段名1, 字段名2, 字段名3, ....)values(值1, 值2, 值3)字段名和值要一一对应,什么是一一对应?数量要对应,数据类型要对应,丢几个字段,插入一条记录后如果,insert语句只要执行成功必然要多一条记录,如果没有给其他值的话默认是null,

drop table if exists t_studnet;

create table t_student(

 no int,

name varchar(32),

sex char(1) default "m",

age int(3),

email varchar(255)

);insert 语句中的字段名可以省略,是错误的,前面的字段名省略的话相当于都写上,insert 插入日期,6

6.数字格式化

select ename, format(sal, "$999.999") from emp; str_to_date是将字符串转化成date,date_format是将date类型转化成varchar类型;数据库中有一条命名规范,所有的标识符都是全部小写,单词和单词之间使用下划线衔接

语法格式:str_to_date("字符串日期", "日期格式")

mysql 的日期格式%Y %m %d %h %i %s

mysql> insert into t_user(id,name,birth) values(1, "张三", str_to_date("01-02-1988", "%d-%m-%Y"));函数可以将日期类型转化成特定格式的字符串,

select id,name,date_format(birth, "%m/%d%Y") from t_user;

通常使用查询日期时使用日期格式化,birth以上的sql语句是进行了默认的日期格式化,自动将date转化成varchar类型,java中的日期格式是,str_to_date("1993-02-01","%m-%d-%Y"),date是短日期,datetime是长日期包括时分秒

mysql> insert into t_user values(1, "王二麻子", "1991-01-02", "1991-01-01 01:01:01");
Query OK, 1 row affected (0.02 sec)

mysql> select * from t_user;
+------+--------------+------------+---------------------+
| id   | name         | birth      | creatime            |
+------+--------------+------------+---------------------+
|    1 | 王二麻子     | 1991-01-02 | 1991-01-01 01:01:01 |
+------+--------------+------------+---------------------+
1 row in set (0.00 sec)

mysql> insert into t_user values(2, "二逼千坑垃圾", "1991-01-02", now());
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_user;
+------+--------------------+------------+---------------------+
| id   | name               | birth      | creatime            |
+------+--------------------+------------+---------------------+
|    1 | 王二麻子           | 1991-01-02 | 1991-01-01 01:01:01 |
|    2 | 二逼千坑垃圾       | 1991-01-02 | 2022-02-08 14:46:30 |
+------+--------------------+------------+---------------------+

7.修改update(DML) 你逃死亡

update 表名 set 字段名1 = 值1, 字段名2 = 值2, 字段名3 = 值3.....where没有条件限制会使所有数据都更新

mysql> update t_user set name = "二皮脸" , birth = "2000-01-01" where id = 2;

8.delect 打服台湾

delect from 表名 where 条件,

distinct 是去重的,出现在所有字段的最前面,连接查询.多表查询,连接查询,笔记,查询每一个员工的所在部门名称要求显示员工名和部门名,没有条件限制最终结果是,加条件再连接,满足条件再连接,要比对一次,加条件是为了避免笛卡尔积现象为了查询出有效次数组合记录,匹配的次数一次没有少,外连接,(no-1)*s, s,

9.快速创建表

mysql> create table emp2 as select * from  emp;
Query OK, 14 rows affected (0.13 sec)
Records: 14  Duplicates: 0  Warnings: 0

将一个查询结果当做一张表,truncate 物理删除,表被一次截断,不支持回滚

10.truncate

删除,且无法回滚,但快速,只需要不到1秒的时间结束,效率较高,但不可回滚

11-14略

15.约束

第一:在实际开发中对表结构进行修改,修改表的结构,需求一旦确定之后,表一旦设计好之后,很少的进行表结构的修改,因为开发进行过程中.修改表的结构,成本较较高,修改表的结构对应java代码就需要大量的#修改,成本是比较高的,这个责任应该由设计人员承担.很少用到,alter

约束用到的是constraint,在创建表的时候,可以给表中的字段加上约束,来保证这个表汇总的数据完整性和有效性,包括

非空约束:not null

唯一约束:unique

主键约束:primary key(pk)

外键约束:foreign key(fk) 

检查约束:chack

保证数据的完整性和有效性,唯一约束unique,约束没有添加在后面叫列级约束,约束添加在后面叫

表级约束,需要给多个字段做约束的,notnull只有列级约束,unique和not null可以联合约束,如果在mysql中如果同时被not null和unique约束自动变成主键字段,orcal不一样.主键约束,的相关术语,主键约束,主键字段,主键值,主键值是每一行记录的唯一标识,任何一张表都应该由主键,不然无效,主键是唯一标识,联合起来做主键叫符合主键,一个字段叫单一组件,两个以上叫符合主键,在实际开发中不建议使用符合主键,单一主键可以做到一个身份标识.  主键值,一般都是数字,定长的,只要是数字就可以,主键除了单一主键和复核主键外还可以是业务主键和银行卡主键,主键只要做到不重复就行不需要有意义,可能会影响到主键值,在mysql中,有一种机制可以委会一个主键值,

16.auto increase自增 

17.外键约束

外键约束:一种约束,外键字段:该字段添加了外键约束,外键值外键字段当中的每一个值,业务背景.设计数据库表,来描述,删除表的顺序是先删子再删父,创建表时先创父,在创子

drop table if exists t_student;
DROP TABLE if exists t_class;
create table t_class(
    classno int PRIMARY KEY,
    classname varchar(255)
    
);

create table t_student(
    no int primary key auto_increment,
    name varchar(255),
    cno int,
    foreign key(cno) references t_class(classno)
);

insert into t_class(classno,classname) values(100,"北京市");
insert into t_class(classno,classname) values(101,"北京市");

insert into t_student(name,cno) values("a",100);
insert into t_student(name,cno) values("f",100);
insert into t_student(name,cno) values("e",100);
insert into t_student(name,cno) values("fd",100);
insert into t_student(name,cno) values("wd",101);
insert into t_student(name,cno) values("des",101);
insert into t_student(name,cno) values("ds",101);
insert into t_student(name,cno) values("dasd",101);
select * from t_student;
select * from t_class;

外键约束只能写外键有的东西,非空约束,主键约束,唯一性约束,外键约束,

约束是非常重要的,

存储引擎

什么是存储引擎?指定不同的存储引擎方式不一样,是mysql特有的术语,oracle中有,存储引擎实际上存储引擎是一个表存储组织数据的方式,存储方式不同,怎么给表添加存储引擎,指定存储引擎,展示出,可以在建表的时候指定存储引擎,建表时指定存储引擎以及编码方式.怎么查看mysql支持哪些存储引擎?

mysql> show engines \G
*************************** 1. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

mysql常用的存储引擎,innodb存储引擎,memory存储引擎, 对于一张表,只要是主键或者加油unique约束的字段会自动添加索引,格式数据和索引都是固定的文件,可以转换为压缩,只读节省空间.innodb是默认的的存储引擎,同时也是一个重量级的存储引擎.表空间存储数据加索引,innodb最大的特点就是支持事物,保证数据的安全.memory存储引擎一断电就消失,查询效率是最高的一关机就消失,是放在内存中存储的

18.事务

一个事物就是一个完整的业务逻辑,从a到b转账10000完成就是业务逻辑,是一个最小的工作单元,要么同时成功,要么同时失败,这样才能保障钱是正确的,是一个最小的工作单元不能再分,存在事物的原因是一个语句完成不了,要共同协同,事物就是批量的dml语句同时成功或者同时失败,innodb存储引擎,提供一组用来记录事物性文件的日志文件,回滚事物标志着事物的技术,事务是多条,提交和回滚事物,事物对应的是transaction,在mysql中默认的事物行为,没执行一次则提交一次,回滚永远只能提交到上一次提交点,;如何将提交机制关闭读未提交,读已提交可重复读序列化,串行化脏读现象,读到了脏数据,可重复读解决了不可重复读取数据的问题,可能会出现幻影读取,没有提交就读到,提交后才读到,永远读取的都是开启事物的数据,验证隔离级别,read uncomited, serislizable,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值