mysql 的连接过程
1注册驱动
Class.forName(JDBC_DRIVER);
2 连接数据库
Connection conn = null;
Statement stmt = null;
// 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS);
3 创建实例化连接Statement 对象
System.out.println(" 实例化Statement对象...");
stmt = conn.createStatement();
4 查询sql
String sql; sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql);
Mysql 的语法:
SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
实例操作:
SELECT TOP 50 PERCENT * FROM Websites;
INNER JOIN
关键字在表中存在至少一个匹配时返回行。
INNER JOIN 与 JOIN 是相同的。 两个表中存在一样的数据
FULL OUTER JOIN 关键字
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
UNION
UNION 操作符合并两个或多个 SELECT 语句的结果。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SELECT INTO 语句
您可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
我们可以复制所有的列插入到新表中:
INTO newtable [IN externaldb]
FROM table1;
或者只复制希望的列插入到新表中:
INTO newtable [IN externaldb]
FROM table1;
SELECT *
INTO newtable
FROM table1
WHERE 1=0;
还有另外一种写法
sql 把一个表中的信息复制到另一个表中:
insert into newtable select * from table;
SQL CREATE DATABASE 语句
CREATE DATABASE 语句用于创建数据库。
CREATE DATABASE dbname;
CREATE TABLE 语句
CREATE TABLE 语句用于创建数据库中的表。
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
索引
使用sql 语句创建 索引,
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
语法:
CREATE INDEX index_name
ON table_name (column_name)
如果创建多个索引就用逗号隔开
CREATE INDEX PIndex
ON Persons (LastName, FirstName)
删除索引
alter table tableName(表名) drop index index_name(索引名)
AUTO INCREMENT 字段
会在新记录插入表中时生成一个唯一的数字, 每次插入新的值的话, 都会自动创建主键的值
默认的 AUTO_INCREMENT 是从1开始的, 每次新增都会自动增加1。
要是想从别的是值开始 语法如下:
ALTER TABLE Persons AUTO_INCREMENT=100
还可以写成:
IDENTITY 的开始值是 1,每条新记录递增 1
CREATE TABLE Persons ( ID int IDENTITY(1,1) PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
使用视图
视图是可以监控一个或者多个数据库表中的数据的 是可视化表,
视图的语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图的语法:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
撤销视图的语法:
DROP VIEW view_name
视图的优点:
视图的数据是根据表中的数据而创建的, 表中的数据增加或者是删除对应的视图就重建。视图是不能被修改的
视图是可以被嵌套,一个视图是可以嵌套另一个视图,
视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。
简化数据的操作,易维护,视图可以限定查询数据。
视图的缺点:
操作视图会比直接操作基础表要慢,尽量避免在大型表上创建视图。
尽量不要使用视图嵌套视图, 这样查询视图的时候,会多次访问基础表, 会带来性能的消耗。
在大型表的或者复杂定义的视图中, 可以使用存储过程来代替。
视图的表的创建可以使用navicat 来创建是视图
为什么使用存储过程?
- 存储过程只有在创建的时候进行编译, 以后每次执行存储过程都不需要重新在编译了,一般sql语句每执行一次就编译一次,所以使用存储过程后可提高数据的执行速度。
- 当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来于数据库提供的数据处理结合一起使用,这些操作,如果用程序来完成就的用sql语句一条条执行可能还要执行多次,而换成存储过程,只需要连接一次数据库据就可以了。
- 存储过程可以重复使用 ,可减少数据库开发人员的工作量。
- 安全性高。可设定只有某此用户才具有对指定存储过程的使用权。
存储过程就是一堆sql的合并, 中间添加了逻辑控制,使用存储过程只要执行一次就可以了。
好处 : 运行效率提高。安全性高。
对sql的优化?
应该考虑 在where 和 order by 上建立索引。
一个表中不索引越多越好, 一个表最多不能超过6个索引, 多的好会影响性能
建立索引的方法:
- 多数查询经常使用的列,
- 很少进行修改操作的列,
- 索引需要建立在数据差异化大的列上。
union 和union All 的区别?
union 是把两表或者是多个表中的结果集展示出来 , 会去掉重复的 ; union All 会把两个或者多个表中的全部展示出来。
top 在sql中用法?
查询出要展示的几行 select top 2 * from table 是展示一个表中前两行的所有字段的数据。
# 和 $ 的区别?
# 是会预编译的, 传入的是值, $ 是不会通过预编译的传入的时候字符串。
函数的应用:
group_concat : 是把分组后的数据合并一起, 默认使用逗号隔开,
======================================登录失败========================================
远程连接别的mysql数据库 出现的错误
错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve
错误1130:主机192.168.1.3”不允许连接到thismysql服务
原因:被连接的数据不允许使用 192.168.1.3访问,只允许是用 localhost;
解决的办法:
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host"项,从"localhost"改称"%"
1、启用 cmd
输入 : mysql -u -root -p
若是提示 ‘mysql’不是内部或外部命令,也不是可运行的程序.那需要配置环境变量 在配置 path 变量添加 “……mysq/MYSQL Server5.7in”
总体运行语句:
mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';
运行完毕后再次连接测试,若还不行重启mysql服务,或是直接重启电脑