一.MySQL的安装
使用命令终端打开服务启动项:services.msc
安装MySQL后,应注意以下配置:
1.选择第一项Reconfigure Instance进行重新配置。
2.选择第一项详细配置。
3.用户类型选择:开发者选择第一项。
4.数据库的使用方式:选择我们是否用到事务。选择第一项多功能的。
5.文件保存路径:一般选择默认的
6.选择数据库的连接并发数:一般选择第三项
7.数据库作为网络服务器设置端口号
8.设置数据库字符集:选择第三项,并设置为utf8。.
9.设置path:把第二项选择上
10.设置用户名密码
安装配置MySQL视图软件:
先启动MySQL服务,在任务管理器中查看mysqld.exe
配置连接项
刚安装的MySQL有如下几个数据库:information_schema,mysql,test。
二.MySQL入门
1.概述
数据库
数据库管理系统
数据库应用系统
数据实例
2.连接MySQL方式
连接方式:
(1)cmd中输入mysql -uroot -p123456 -h
(2)直接使用自带的管理器输入密码进入
3.常用命令
show databases;显示当前拥有的数据库
use数据库名称;打开指定数据库
show tables;显示当前数据库有哪些表
creat database数据库名称;创建一个新的数据库
drop database数据库名称;丢弃一个数据库
desc表名;查看表结构
drop table表名:删除表
4.MySQL常用字段类型
char(size):定长字符(0-255)[存放的字符串长度不够就需要使用空格补齐,长度多了会报错。方便查询]
varchar(size):变长字符(0-255)[节省空间]
date:日期类型[默认格式:yyyy-MM-dd]
DATETIME:日期+时间类型[默认格式:默认格式:'yyyy-MM-dd hh:mm:ss']
int(size):整形类型[对应java中的byte,short,int,long(Long):bigint(11)]
double[(s,p)]:浮点数[s指总长度,p指小数点后尾数]
举例:double(2,2)
blob:大二进制数据[0-4GB,一般不要把大的二进制数据放到数据库]
text:大文本数据[0-4GB]
三.SQL
1.sql语句分类:
SELECT查询语句
DML语句(数据操作语言)INSERT/UPDATE/DELETE
DDL语句(数据定义语言)CREATE/DORP/ALTER
DCL语句(数据控制语言)
事务控制语句
2.SQL书写规则:
在mysql中,sql语句大小写不敏感。(不论什么操作系统,mysql关键字大小写不敏感;但是字段名、表名、数据库名的敏感性是由操作系统规定的,尽量使用小写。)
在sql语句中,关键字不能跨多行或缩写。
四.SELECT语句
1.创建表
CREATE TABLE table_name(
column_name1 column_properties constraint_definition,
列名类型约束(最后一行没有逗号)
)
注意:如果列名中的名字变蓝(即为关键字)则需要加上单引号。
2.表的查询
基本的查询语句格式:
SELECT {*,column[alias],...} FROM table_name;
在select中使用运算符:
注意,运算符两边的数据结构必须相等且能参与对应运算。
对NUMBER型数据可以使用算数操作符创建表达式(+ - * /);
对DATE型数据可以使用部分算数操作符创建表达式(+ -):加减是天数。
3.字段别名
①改变列的标题头。
②用于表示计算结果的含义。
③作为列的别名(用在java里面)。
④如果别名中使用特殊字符,或者是强制大小写敏感(ORACLE),或有空格时,都需加双引号。
如:SELECT id编号,productname货品名称,(costprice+1)*50进50加运费
FROM product;
SELECT id "编号",productname "Descr"
FROM product;
4.使用WHERE子句限定返回的记录
语法:SELECT [DISTINCT] {*, column [alias], ...} FROM table
[WHEREcondition(s)];
举例:查询分类编号不等于2的货品信息
SELECT * FROM product WHERE dir_id<>2;
5.binary:二进制
日期值格式敏感,字符串是大小写敏感的(不一定):默认情况下,字符串查询不区分大小写,如果必须区分大小写,比如使用binary关键字。
举例:查询罗技M100的编号和零售价
SELECT id,saleprice,productname FROM product
WHERE productname = '罗技M100';
SELECT id,saleprice,productname FROM product
WHERE binary productname = '罗技m100';
举例:我这里能用别名吗?
SELECT id,productname,saleprice*cutoff disprice FROM product
WHERE disprice>350;
结论:不能在where中使用select中的别名,执行顺序:先过滤,再选择,再别名。
6.其他关键字
BETWEEN..AND..:在两个值之间,闭区间,通常用在数值,日期,字符串上。
举例:选择id,货品名称,批发价在300-400之间的货品
SELECT id,productname,saleprice*cutoff FROM product
WHERE saleprice*cutoff BETWEEN 300 AND 400;
IN:在列出的值之中,符合某一个就行。
举例:查询分类编号不等于2的货品信息
SELECT id,productname,dir_id FROM product
WHERE dir_id IN (3,4);
使用LIKE运算符执行通配查询
查询条件可包含文字字符或数字
(%) :可表示零或多个字符
( _ ) :可表示一个字符
举例:查询所有罗技鼠标
SELECT * FROM product
WHERE productname LIKE '罗技%';
举例:查询所有的M系列鼠标id,货品名称
SELECT * FROM product
WHERE productname LIKE '%M%';
举例:查询所有的M双数系列鼠标id,货品名称
SELECT * FROM product
WHERE productname LIKE '%M__';
7.逻辑运算符
使用AND模拟BETWEEN..AND
举例:选择id,货品名称,批发价在300-400之间的货品
SELECT id,productname,saleprice*cutoff FROM product
WHERE saleprice*cutoff >=300 AND saleprice*cutoff <=400;
使用OR模拟IN
举例:查询分类编号不等于2的货品信息
SELECT id,productname,dir_id FROM product
WHERE dir_id =3 OR dir_id =4;
8.order by
使用ORDER BY子句将记录排序
ASC:升序,缺省
DESC:降序
SELECT ... FROM ... WHERE ... ORDER BY...
举例:查询货品信息并按照成本从高到底排序:
SELECT * FROM product ORDER BY costprice DESC;
SELECT * FROM product ORDER BY costprice;
日期的排序:ASC:远-近DESC:近-远
举例:查询M系列的鼠标并按照批发价降序排序
SELECT id,productname,saleprice*cutoff FROM product
WHERE productname LIKE '%M%'
ORDER BY saleprice*cutoff DESC;
举例:在这里可以使用别名么?
SELECT id,productname,saleprice*cutoff disprice FROM product
WHERE productname LIKE '%M%'
ORDER BY disprice DESC;
结论:ORDER BY字句中可以使用select的别名,执行顺序:最后执行排序
多列排序
SELECT id,productname,dir_id,saleprice FROM product
ORDER BY dir_id DESC,saleprice ASC;
不能使用中文的别名排序
9.多表查询
SELECT * FROM product,productdir WHERE product.dir_id = productdir.id;
使用表连接从多个表中查询数据
SELECTtable1.column, table2.column
FROMtable1, table2
WHEREtable1.column1 = table2.column2;
在WHERE子句中写入连接条件
当多个表中有重名列时,必须在列的名字前加上表名作为前缀。
使用表的别名
使用表的别名简化了查询
提高了查询的性能
SELECT p.id,p.productname,d.dirname
FROM product p,productdir d
WHERE p.dir_id= d.id;
查询三张表连接
SELECT * FROM product p,productdir d,productstock s
WHERE p.id=s.product_id AND p.dir_id = d.id
10.其他
五.INSERT语句
语法:INSERT INTO table[(column[,column...])]
VALUES(value[,value...])
①insert语句将values中给定的值插入到表中的各个字段中,每次使用insert语句只能插入一行数据(在MYSQL下不一定)。
INSERT INTO productdir(dirname)
VALUES ('无线键盘'),('机械键盘');
慎用
②在insert语句中,table后面的方括号内是要插入数据的字段列表,字段列表包含了所有需要在插入时插入值的字段名称,在插入时不需要值的字段可以不出现在字段列表中。
③values后面是值的列表,也就是要插入到表中的各个字段的值。如果前面列出了字段列表,那么列表必须与字段列表一一对应,包括了个数,数据类型,位置的对应,如果忽略了字段列表,那么列表必须与表中字段一一对应(创建表时字段的顺序)。
④如果有些字段在插入的时候不能确定初始值,则需要插入空值表示。
在字段中插入空值有两种方式,一种是在需要空值的地方使用null关键字代替;
另一种是通过列出不完全的字段列表实现,在字段列表中没有出现的字段,在插入记录后自动被赋予空值。
1,自增
INSERT INTO productdir
VALUES (null,'abc1',null)
自增生成下一个值的策略:该表中出现过的最大的值+1
2,默认值
INSERT INTO productdir
VALUES (null,'abc1',null);
INSERT INTO productdir(dirname)
VALUES ('abc2');
⑤字符串类型的字段值必须用单引号括起来,例如:’GOOD DAY’
六.UPDATE语句
语法:UPDATE table
SET column = value[,column=value]...
[WHERE condition]
1、在update语句中,where子句是可选的部分,如果使用了where子句,则修改的数据是符合where条件的所有记录;如果省略了where子句,则全表的数据都会被修改。
2、set子句后面是对表中一个或者多个字段的修改,如果修改多个字段的值,使用逗号将多个字段分开。
七.DELETE语句
语法:DELETE FROM table
[WHERE condition]
八.NOT的使用
BETWEEN..AND..:
举例::NOT (price BETWEEN 200 AND 300)
举例::price NOT BETWEEN 200 AND 300
IN..:NOT dir_id IN (2,3) 2: dir_id NOT IN(2,3)
LIKE
IS NULL:IS NOT NULL
九.主键和外键
主键:是一个非空且唯一的列。
外键:A表的某一列数据参照B表的某一列数据。
十.MySQL的数据库存储引擎
1.InnoDB
优点:支持事务和外键;
缺点:存取速度相对较慢。
2.MyISAM
优点:读取、存储速度很快;
缺点:不支持事务,不支持外键。
知识点滴:
元数据:用来描述数据结构的数据叫元数据。
MySQL的注释:#注释内容
字段名、表名等Windows系统对其大小写不敏感,但是linux对其大小写敏感。
SQL关键字一般我们需要大写。
在mysql中连接字符串一般用CONCAT(str1,str2)。