mysql 小雨_MYSQL

数据库:存储数据的仓库

指长期存储在计算机内 有组织 可共享的数据的集合

按一定的数学模型组织 描述和存储 具有较小的 较高的

数据独立性和易扩展性 可为各种用户共享

SQL及其规范:

1. 在数据库系统中 SQL语句不区分大小写 但字符串常量区分大小写

建议命令大写 表名库小写

2.SQL语句可单行或者多行书写 以分号结尾 关键词不能跨多行或简写

3.用空格和缩进来提高语句的可读性 子句通常位于独立行

便与编辑 提高可读性

4.注释 单行:--

多行: /*。。。。。。*/

5.SQL语句可以折行操作

数据库操作:

1.创建数据库(在磁盘上创建一个对应的文件夹):

create database [if not exists] db_name[character set xxx];

2.查看数据库

show databases;查看所有

show create database db_name;查看创建时候的信息

3.修改数据库

alter database db_name [character set xxx];

4.删除数据库

drop database [if exists] db_name

5.使用数据库

切换数据库use db_name;

查看当前使用数据库 select database();

数据表规范:

创建 create table table_name(

Att_name_1 Data_type_1,

Att_name_1 Data_type_1,

Att_name_1 Data_type_1,

Att_name_1 Data_type_1,

)

查看表 show tables

删除表 drop table table_name

修改表名 rename oldtablename to newtablename

增加字段 alter table table_name add Att_name_1 Data_type_1

删除字段 drop table table_name Att_name_1

修改字段

修改类型

alter table table_name modify Att_name_1 New_data_type

修改名字

alter table table_name change old_att_name New_att_name Old_data_type

查看 dese table_name

查:::::

select * from table_name

select name1,name2 from table_name 获取某一列

select name,JS+10,Django+10,Flask from table_name +10显示

select name as 姓名 from table_name

筛选XXX

select name from table_name where name>80

select name from table_name where name between 90 and 100

select name from table_name where name like "a%"

select name,JS from table_name where JS>80 order by JS 默认升序

select name1,data1+data2+data3 as 总成绩 from table_name order by 总成绩

select JS as JS成绩 from table_name where JS成绩>70 不可以!

执行语句的顺序 from where select group by hacing order by

select * from table_name group by name 分组哦`~

select name,sum(JS) from table_name group by having sum(JS)>150

select * from table_name having id=3 若未分组 where实现更好

聚合函数

count(列名)

sum(列名)

avg(列名)

max(列名)

min(列名)

limit

select * from table_name limit 3

select * from table_name limit 1,4 取索引

正则: 相对于此 like更快

select * from table_name there 列表名 recexp '^yu'

select * from table_name there 列表名 recexp 'yu$'

外键: 作为外键一定要和关键数据类型保持一致

创建主表:

create table classch(

id int primary key auto_increment,

name varchar (20),

age INT,

is_marriged boolean

);

insert into classch (name,age,is_marriged) values ("冰冰",52,0),

("丹丹",34,0),

("歪歪",32,0),

("杉杉",28,0),

("小雨",61,0);

创建子表:

create table student(

id int primary key auto_increment,

name varchar (20),

charger_id tinyint) engine=innodb;

insert into student (name,charger_id) values ("alex1",2),

("alex2",3),

("alex3",3),

("alex4",4),

("alex5",1),

("alex6",1),

("alex7",2);

创建外键:

create table student(

id int primary key auto_increment,

name varchar(20),

charger_id int,

foreign key (charger_id) peferences classch(id)

) engine=innodb;

修改id

update student set charger_id=4 where id=1 or id=7;

添加

insert into student (name,charger_id) values ("alex8",2)

多表格查询

连接查询:

内连接:inner join

内连接:left join right join

全连接:full join

create table tableA (id int primary key,name varchar(20));

create table tableB(

id int primary key,

name varchar(20),

tableA_id int);

insert into tableA values(1,"alvin");

insert into tableA values(2,"xialv");

insert into tableA values(3,"yuan");

insert into tableB values(1,"小雨",1);

insert into tableB values(2,"小小",2);

insert into tableB values(3,"冰冰",4);

select * from tableA,tableB;

select tableA.id,tableA.name,tableB.name from tableA,tableB

where tableA.id=tableB.tableA_id

内连接

select * from tableB inner join tableA on tableB.tableA_id=tableA.id

左右连接:以X为基准 匹配到的显示 匹配不到显示null

select employee.emp_name,department.dept_name from department left join

employee on employee.dept_id = department.dept_id;

复合查询

子查询

select * from employee where dept_id in (1,2,3,4);

带in的子查询

select dept_id from employee where dept_id in

(select dept_id from department);

select dept_id,dept_name from department where dept_id in

(select distinct dept_id from employee where age>=25);

exists关键字的子查询

select dept_id,dept_name from department where exists

(select dept_id from employee where age>=25);

后面如果是true 则执行where之前 否则不执行

索引语法

索引 创建和维护消耗很多时间和磁盘空间 但查询速度大大提高

create table test1(

id int primary key auto_increment,

name varchar(20),

salary int default 1000);

insert into test1(name) values ("111"),

("222"),

("333");

id 本身就是一个唯一的索引哦

正儿八经:

create table table_name(

字段名1 数据类型,

字段名2 数据类型,

[unique | fulltext | spatial ] index | key

[索引名] (字段名[length]) [ASC | desc]

);

创建普通索引示例:

create table emp1(

id int,

name varchar(20),

resume varchar(50),

index index_emp_name (name)

);

创建全文索引示例:

create table emp3(

id int,

name varchar(20),

resume varchar(50),

fulltext index index_emp_name (name)

);

创建多列索引示例:

create table emp4(

id int,

name varchar(20),

resume varchar(50),

index index_emp_name (name,resume)

);

任务描述:表user1中有id,name,code;表user2中有id,name,code;

目的:对比user1和user2两张表数据并将user2中名称和user1相同的code写入到user1中;

实现sql:

UPDATE user1 a,user2 b SET a.name=b.name WHERE a.code = b.code

事务的四个特性:

原子性,一致性,隔离性,持久性ACID

关于一些术语:

开启事务start transaction

事务结束end transaction

提交事务commit transaction

回滚rollback transaction

和事务有关的两条语句

commitrollback

开启和结束的标志:

开始:任何一条DML语句执行,标志开始

结束:提交或者回滚

在事务进行过程中,未结束之前,DMl语句不会更改底层数据库文件中的数据

只是将历史操作记录一下,在文件中完成记录,只有在事务结束的时候,

而且是成功的结束才会修改底层一啊光盘的数据

默认情况下自动提交,但是实际情况可以手动开启

一种方式

start transaction;

insert into tablename (name) values (XXX);

commit;

start transaction;

DML;

DML;

rollback;

关闭自动提交的第二种方式;

set autocommit = off;

set session autocommit = off;

此方式只对当前终端有效

事务的四个特性之一:隔离性,

读未提交read uncommited

读已提交read committed

可重复读repeatable read

串行化serializable

读未提交:事务A未提交,事务B可以读取到,这里读取到的叫做脏数据

读已提交:避免脏数据,但是会导致“不可重复读取”,产生了矛盾~~Oracle默认

可重复读:事务A提交之后的事务B读取不到,数据B可重复读取,导致”幻象读“MYSQL默认

串行化:A在操作时候,B只能排队等待,吞吐量太低,用户体验不好,用的少

*****************索引********

表查询,第一种,全表扫描,第二种,通过索引检索

数据庞大,很少用DML语句,经常用where找它,可加索引

三范式

要求有主键,并且每一个字段原子性不可再分

要求所有非主键字段完全依赖主键,不可产生部分依赖

要求所有非主键不可传递依赖于主键

一对一:

分两个,共享主键

分两张,分两张,外键唯一

一对多:

在多的一方添加外键,外键引用1的主键字段

多对多:

分三张表,学生表,课程表,学生学课表存学生和课程关系信息

实例~~

https://blog.csdn.net/qq_22339269/article/details/84549751

标签:name,dept,MYSQL,table,where,id,select

来源: https://www.cnblogs.com/louzhiyuan/p/11332911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值