1.MySQL概述
1.数据库基本概念:存储数据的仓库,数据是有组织的进行存储
2.数据库管理系统:操纵和管理数据库的大型软件
3.SQL:操作关系型数据库的编程语言,定义了一套操作型数据库统一标准
2.MySQL数据库
关系型数据库(RDBMS):
概念:建立在关系型模型基础上,由多张相互连接的二维表组成的数据库
好处:1.用表存储数据,方便维护
2.用SQL语言操作,标准统一,使用方便
基于表进行数据存储的数据库就是关系型数据库
3.分类
DDL:数据定义语言,用来定义数据库对象
DML:数据操作语言,用来对数据库表中的数据进行增删查
DQL:数据查询语言,用来潮汛数据库表中记录
DCL:数据控制语言,创建数据库用户,控制数据,库访问权限
4.DDL语言相关操作
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| biaoge |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| biaoge |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| biaoge |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
+--------------------+
7 rows in set (0.00 sec)
mysql> select database();
+------------+
| database() |
+------------+
| biaoge |
+------------+
1 row in set (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_biaoge |
+------------------+
| testbiaoge |
+------------------+
1 row in set (0.00 sec)
mysql> desc testbiaoge;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| ID | int | NO | PRI | NULL | |
| score | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.内部类
内部类
类里面:成员内部类 ,静态内部类(区别就是是否有static)
方法里面:匿名内部类,局部内部类(匿名内部类没有类名,局部内部类有)
class Outer{ //外部类
public class Inner{ //内部类 (这里是成员内部类)
int age = 1;
}
public void test(){
Inner inner = new Inner();
System.out.println(inner.age);
}
public static void main(String[] args){
Outer outer = new Outer; //外部类对象创建
Outer.Inner inner = outer.new Inner() //内部类对象的创建
}
}
1.局部内部类
可以直接访问外部类的所有成员,包含私有的
不能添加访问修饰符,因为他的地位就是一个局部变量,但是可以用final修饰
作用域,仅仅在定义他的方法或者代码块里面
局部内部类访问外部类的成员–>直接访问
外部类访问局部内部类,在局部内部类的作用域内创建对象然后访问
局部内部类里的属性和外部类属性重名,怎么搞?solution:外部类名.this.属性名,你可能会有疑问,为什么不能直接this.属性名,因为局部内部类他始终是一个局部变量,创建它的对象只能在方法体内或者代码块内,调用的时候也是外部类的对象调用这个方法进而使用这个对象,所以用this.属性名的this指的是方法体中创建的局部内部类对象,但是你加上一个外部类名的话,就能表示这个this是外部类的对象
2.匿名内部类
2.1基于接口的匿名内部类
引入:一般情况下你要实现一个接口是写一个类实现接口,然后创建类的对象实例来使用。但是我现在的需求是只想使用一次,后面不再使用这个类,那我们就引入了匿名内部类
public class AnonymousInnerClass {
public static void main(String[] args) {
IA ia = new IA(){
@Override
public void wang() {
System.out.println("汪汪叫....");
}
};
}
}
interface IA{
void wang();
}
每日一题:
Watering the Fields
最小生成树模版题,但是需要进行路径压缩(状态压缩)不然会被卡TLE
#include<bits/stdc++.h>
using namespace std;
long long n;
long long c;
long long x[2005];
long long y[2005];
long long f[4000001];
long long cnt;
long long sum;
long long ans;
long long flag;
struct lu
{
int a,b;
long long w;
}q[4000005];
int cha(int x)
{
if(f[x] == x)
return x;
return f[x] = cha(f[x]);//路径压缩
}
void bing(int r1,int r2)
{
if(r1==r2)
return ;
f[r2]=r1;
}
bool cmp(lu x,lu y)
{
return x.w<y.w;
}
int main()
{
cin>>n>>c;
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
for(int j=1;j<i;j++)
{
long long dis=((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
if(dis>=c)
{
cnt++;
q[cnt].a=i;
q[cnt].b=j;
q[cnt].w=dis;
}
}
}
if(cnt<n-1)
{
printf("-1\n");
return 0;
}
sort(q+1,q+1+cnt,cmp);
for(int i=1;i<=cnt;i++)
{
int x=cha(q[i].a);
int y=cha(q[i].b);
if(x!=y)
{
bing(x,y);
sum+=q[i].w;
ans++;
if(ans==n-1)
break;
}
}
if(ans==n-1)
printf("%lld\n",sum);
else
printf("-1\n");
return 0;
}