SQL包含6个部分:
一:数据查询语言(DQL):
保留字SELECT,WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML):
其语句包括动词INSERT,UPDATE和DELETE。
三:事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。
五:数据定义语言(DDL):
其语句包括动词CREATE和DROP。
1.在数据库中,SQL语句大小写不敏感
表具有固定的列数和任意的行数
MySQL的常用存储引擎:
InnoDB: 支持外键关系,支持事务(Transaction). 性能低.
MyISAM:不支持外键关系,不支持事务管理. 性能高.
如果MySQL服务没有启动,则不能访问MySQL
net start 服务:开启一个服务,如:net start MySQL
net stop 服务:关闭一个服务,如:net stop MySQL
连接MySQL数据库:
方式1:进入MySQL, 在命令行中输入密码;
方式2:在运行中输入命令:
格式:mysql -u账户 -p密码 -h数据库服务器安装的主机 -P数据库端口
mysql -uroot -padmin -h127.0.0.1 -P3306
若连接的数据库服务器在本机上,并且端口是3306。
则可以简写: mysql -u root -p admin
数据库对象:存储,管理和使用数据的不同结构形式,如:表、视图、存储过程、函数、触发器、事件等。
-----------------------------------------------------------------------------
数据库分两种:
1):系统数据库(系统自带的数据库):不能修改
information_schema:存储数据库对象信息,如:用户表信息,列信息,权限,字符,分区等信息。
performance_schema:存储数据库服务器性能参数信息。
mysql:存储数据库用户权限信息。
test:任何用户都可以使用的测试数据库。
2):用户数据库(用户自定义的数据库):一般的,一个项目一个用户数据库。
1 查看数据库服务器存在哪些数据库.
SHOW DATABASES;
2 使用指定的数据库.
USE database_name;
3 查看指定的数据库中有哪些数据表:
SHOW TABLES;
4 创建指定名称的数据库.
CREATE DATABASE database_name
5 删除数据库.
DROP DATABASE database_name
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供不同的功能和能力。
-------------------------------------------------------------------------------------
MyISAM:拥有较高的插入,查询速度,但不支持事务,不支持外键。
InnoDB:支持事务,支持外键,支持行级锁定,性能较低。
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但会占用更多的磁盘空间以保留数据和索引。
MySQL列类型 Java数据类型
-------------------------------------------------------
INT: int/Integer
BIGINT: long/Long
FLOAT float/Float
DOUBLE double/Double
DECIMAL BigDecimal
指定一个字段的类型为 INT(6),就可以保证所包含数字少于6个的值能够自动地用0填充。
FLOAT[(s,p)] :DOUBLE[(s,p)] : 小数类型,可存放实型和整型 ,精度(p)和范围(s);money double(5,2): 整数和小数一共占5位.其中小数占2位.
定点数据类型: DECIMAL,高精度类型,金额货币优先选择。
char(size ) 定长字符,0 - 255字节,size指N个字符数,若插入字符数超过设定长度,会被截取并警告。
varchar(size) 变长字符,0 - 255字节,从MySQL5开始支持65535个字节,若插入字符数超过设定长度,会被截取并警告。
一般存储大量的字符串,比如文章的纯文本,可以选用TEXT系列类型。
注意:在MySQL中,字符使用单引号引起来。 相当于Java中字符串(String,StringBuilder/StringBuffer);
日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
注意:在MySQL中,日期时间值使用单引号引起来。 相当于Java中Date,Calender。
BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB:
存放图形、声音和影像,二进制对象,0-4GB。开发中,我们一般存储二进制文件保存路径。
------------------------------------------------------------
BIT:我们一般存储0或1,存储是Java中的boolean/Boolean类型的值。
1.先进入某一个数据库.
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE 表名(
列名1 列的类型 [约束],
列名2 列的类型 [约束],
....
列名N 列的类型 [约束]
);
表的约束(针对于某一列):
1.非空约束:NOT NULL,不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束:UNIQUE,在该表中,该列的内容必须唯一。
4.主键约束:PRIMARY KEY, 非空且唯一。给一行数据做标识
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。
6.外键约束:FOREIGN KEY, A表中的外键列的值必须参照于B表中的某一列(B表主键)
查看表结构:
DESC table_name;
查看表的详细定义(DDL):
SHOW CREATE TABLE table_name;
删除表:
DROP TABLE table_name;
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE t_student(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) UNIQUE,
age INT DEFAULT 18,
gender VARCHAR(10) NOT NULL
);
执行DML 语句会有返回受影响的行: 指的是操作的数据行数
3.插入多条数据记录(MySQL特有)
消除结果中重复的数据。
SELECT DISTINCK (列名) FROM table_name;
对NUMBER型数据可以使用算数操作符创建表达式(+ - * /)
对DATE型数据可以使用部分算数操作符创建表达式 (+ -)
设置列名的别名。as
4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加单引号;
CONCAT(**,**,**)连接字符串
AND(&&) OR(||) NOT(!)
优先级 运算符
1 所有比较运算符
2 NOT
3 AND
4 OR
BETWEN...AND , IN(),IS NULL,LIKE
ORDER BY 列名1 [ASC(升序,缺省)/DESC],列名2 [ASC/DESC]...;
注意:如果列的别名使用 '' 则按此别名进行的排序无效;
LIMIT (currentPage-1)*pageSize,pageSize;
带有排序的分页操作:先排序,后分页
聚集函数:COUNT:统计结果记录数 Java中必须使用long接受;MAX: MIN: SUM: AVG:
主键约束(PRIMARY KEY): 列的值非空且唯一.
外键约束(FOREIGN KEY): A表中的外键列的值必须参照于B表中的主键列;在MySQL中,InnoDB支持事务和外键.
修改表的存储引擎为InnDB: ALTER TABLE 表名 ENGINE='InnoDB';
等值连接:在WHERE加连接条件 where A.id=B.id
内连接:A [INNER] JOIN B ON A.列 = B.列
外连接查询:
左外连接:查询出JOIN左边表的全部数据查询出来,JOIN右边的表不匹配的数据使用NULL来填充数据.
右外连接:查询出JOIN右边表的全部数据查询出来,JOIN左边的表不匹配的数据使用NULL来填充数据.
左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
在写连接查询的时候,on后面只跟连接条件,而对中间表限制的条件都写到where子句中。
第一、 单表查询:根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据select的选择列选择相应的列进行返回最终结果。
第二、 两表连接查询:对两表求积(笛卡尔积)并用on条件和连接类型进行过滤形成中间表;然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。
第三、 多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。
语法格式
SELECT <selectList> FROM A LEFT/RIGHT JOIN B ON (A.column_name = B.column_name)
使用表名前缀可以提高执行效率。如果使用了表的别名,则不能再使用表的真名
MySQL自身的数据库维护:
1.导出:mysqldump -u账户 -p密码 数据库名称>脚本文件存储地址
mysqldump -uroot -padmin jdbcdemo > C:/shop_bak.sql(磁盘文件路劲)
2.导入:mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
mysql -uroot -padmin jdbcdemo< C:/shop_bak.sql
Navicat工具的导入和导出:
Navicat工具的备份和还原:需要工具支持