我的小站
1、MySQL的劣势
- 运行速度快
- 应用成本低
- 可移植性强
- 实用用户广
2、MySQL的运行机制
一个SQL语句,如select * from tablename ,从反对接口进来后,进入连接池后做权限、验证等环节,而后判断是否有缓存,有则间接放回后果,否则进入SQL接口,在查问之前查问优化器进行优化,最初进行解析,查问。并通过存储引擎与文件交互。
3、MySQL的配置
端口号:3306
默认字符集:utf8
将bin目录写入
环境变量
root明码设置
注:utf8:一种Unicode编码,解决国内上字符不对立的多字节编码,通用性强
my.ini:记录MySQL配置信息,可批改配置内容,如端口号,字符集等
4、命令行连贯MySQL
首先查看是否启动服务
**属性窗口****DOS命令:**
启动:net start mysql57
进行:net stop mysql57
57代表是5.7的版本,以下的不需接57
注:如果批改了配置文件,必须重启MySQL服务能力失效
命令行连贯MySQL语法:mysql –h服务器主机地址 –u 用户名 –p明码
l –h服务器主机地址(如果是本机能够省略这名句) 明码可省略,按回车再输出
5、零碎数据库和用户数据库
零碎数据库:
information_schema:次要存储系统中的一些数据库对象信息,如用户表信息、字段信息、权限信息、字符集信息和分区信息等。
performance_schema:次要存储数据库服务器性能参数
mysql:次要存储系统的用户权限信息
test:MySQL数据库管理系统主动创立的测试数据库,任何用户都能够应用
用户数据库:
用户数据库是用户依据理论需要创立的数据库。本章前面的解说次要针对用户数据库。
6、创立数据库
set names utf8;
语法: create database 数据库名
示例:create database myschool;
7、查看数据库列表
语法:show databases;
8、抉择数据库
语法:use 数据库名;
注:应用数据前必须先抉择该数据库!
9、删除数据库
语法:drop database 数据库名;
10、MySQL数据类型
11、创立表
语法:CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [字段属性|束缚][索引][正文], …… 字段n 数据类型 [字段属性|束缚][索引][正文] )[表类型][表字符集][正文];
例:
CREATE TABLE `student` ( `studentNo` INT(4) PRIMARY KEY auto_increment not null, ` name` CHAR(10), …… );
12、字段的束缚及属性
名称 关键字 阐明
非空束缚 NOT NULL 字段不容许为空
默认束缚 DEFAULT 赋予某字段默认值
惟一束缚 UNIQUE KEY(UK) 设置字段的值是惟一的 容许为空,但只能有一个空值
主键束缚 PRIMARY KEY(PK) 设置该字段为表的主键 可惟一标识该表记录
外键束缚 FOREIGN KEY(FK) 用于在两表之间建设关系
主动增长 AUTO_INCREMENT 设置该列为自增字段,默认每条自增1,通常用于设置主键
主键:
CREATE TABLE student( `studentNo` INT(4) PRIMARY KEY, ……);
正文:
CREATE TABLE test ( `id` int(11) UNSIGNED COMMENT ‘编号’)COMMENT='测试表’ ;
设置字符集编码
CREATE TABLE [IF NOT EXISTS] 表名( #省略代码)CHARSET = 字符集名;
创立学生示意例:
CREATE TABLE `student`( `studentNo` INT(4) NOT NULL COMMENT '学号' PRIMARY KEY, `loginPwd` VARCHAR(20) NOT NULL COMMENT '明码', `studentName` VARCHAR(50) NOT NULL COMMENT '学生姓名', `sex` CHAR(2) DEFAULT '男' NOT NULL COMMENT '性别', `gradeId` INT(4) UNSIGNED COMMENT '年级编号', `phone` VARCHAR(50) COMMENT '联系电话', `address` VARCHAR(255) DEFAULT '地址不详'COMMENT '地址', `bornDate` DATETIME COMMENT '出世工夫', `email` VARCHAR(50) COMMENT'邮件账号', `identityCard` VARCHAR(18) UNIQUE KEY COMMENT '身份证号') COMMENT='学生表';
13、查看表
查看表是否存在
查看表定义
注:防止DOS窗口乱码,可执行SET NAMES gbk;
14、删除表
语法:DROP TABLE [IF EXISTS] 表名;
示例:
注:在删除表之前,先应用IF EXISTS语句验证表是否存在
15、MySQL的存储引擎
1)存储引擎的类型
MyISAM、InnoDB 、Memory、CSV等9种
2)MyISAM与InnoDB类型次要区别
教训:
实用场合
应用MyISAM: 不需事务,空间小,以查问拜访为主 应用InnoDB: 多删除、更新操作,安全性高,事务处理及并发管制
3)查看以后默认存储引擎
SHOW VARIABLES LIKE ‘storage_engine%’;
4)批改存储引擎
批改my.ini配置文件 default-storage-engine= InnoDB
5)设置表的存储引擎
语法:CREATE TABLE 表名(
#省略代码
)ENGINE=存储引擎;
16、数据表的存储地位
1)MyISAM类型表文件
*.frm:表构造定义文件*.MYD:数据文件*.MYI:索引文件
2)InnoDB类型表文件
*.frm:表构造定义文件ibdata1文件
留神:存储地位 因操作系统而异,可查my.ini
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
innodb_data_home_dir="D:/MySQL Datafiles/"
17、MySQL零碎帮忙
HELP 查问内容;
HELP contents;
HELP Data Types;
HELP INT;
补充:mysql 数值类型 中带符号的/无带符号的 区别
带符号和无符号,顾名思义,就是是否有正负之分:
比方8为二进制,如果带符号,须要用1位示意符号(1示意正数,0示意正),剩下7位示意数据.
那么示意范畴是-127---127(包含-0和+0).
如果不带符号,8位全副示意数据,
那么示意范畴是 0--256
补充: mysql 有没有nvarchar nchar
有,然而,mysql采纳utf-8编码,而传统的数据库采纳unicode,一个汉字要用两个unicode的char,而在mysql中因为应用了utf-8,所以无论汉字还是字母,都是一个长度的char,所以就不必分nvarhcar和varchar了,一律作varchar
SQL高级(一)
1、批改表
1)#批改表名
ALTER TABLE 旧表名 RENAME 新表名;
2)#增加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
3)#批改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
4)#删除字段
ALTER TABLE 表名 DROP 字段名;
2、增加主键
语法:
ALTER TABLE 表名 ADD CONSTRAINT 主键名
PRIMARY KEY 表名(主键字段);
例:设置grade表中gradeId字段为主键
alter table `grade` add constraint `pk_grade` primary key `grade`(`gradeId`);
3、增加外键
语法:
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
例:将student表的gradeId字段和grade表的gradeId字段建设外键关联
alter table `student` add constraint fk_student_grade foreign key(`gradeId`) references `grade` (`gradeId`);
4、DML语句--插入单条数据记录
语法:INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
留神:
字段名是可选的,如省略则顺次插入所有字段 多个列表和多个值之间应用逗号分隔 值列表和字段名列表一一对应 如插入的是表中局部数据,字段名列表必填
示例:
INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)VALUES('123','黄小平',1,'13956799999','1996-5-8');
5、DML语句--插入多条数据记录
语法:INSERT INTO 新表(字段名列表)VALUES(值列表1),(值列表2),……,(值列表n);
示例:
INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);
教训:
为防止表构造发生变化引发的谬误,倡议插入数据时写明具体字段名!
6、DML语句——将查问后果插入新表
CREATE TABLE `phoneList`( SELECT `studentName`,`phone` FROM `student`);
注:如新表已存在,将会报错!
7、DML语句——数据更新、删除
1)更新数据记录
update 表名 set 字段1=值1,字段2=值2,...,字段n=值n [where 条件];2)删除数据记录DELETE FROM 表名 [WHERE条件]; TRUNCATE TABLE 表名;TRUNCATE语句删除后将重置自增列,表构造及其字段、束缚、索引放弃不变,执行速度比DELETE语句快
8、DQL语句
语法:
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查问条件>]
[GROUP BY <分组的字段名>]
[HAVING <条件>]
[ORDER BY <排序的字段名> [ASC 或 DESC]]
示例:
SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` FROM `student`WHERE `gradeId` = 1ORDER BY studentNo;
9、LIMIT子句
MySQL查问语句中应用LIMIT子句限度后果集
语法:
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查问条件>]
[GROUP BY <分组的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT [地位偏移量, ]行数];
示例:
SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` FROM `student`WHERE `gradeId` = 1ORDER BY studentNo LIMIT 4,4; #(从第5条开始显示4条)
注:应用LIMIT子句时,留神第1条记录的地位是0!
10、罕用函数——聚合函数
AVG()返回某字段的平均值
COUNT() 返回某字段的行数
MAX()返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和
11、罕用函数——字符串函数
CONCAT(str1,str1...strn) 字符串连贯 SELECT CONCAT('My','S','QL'); 返回:MySQL
INSERT(str,pos,len,newstr) 字符串替换 SELECT INSERT( '这是SQL Server数据库',3,10,'MySQL'); 返回:这是MySQL数据库
LOWER(str) 将字符串转为小写 SELECT LOWER('MySQL'); 返回:mysql
UPPER(str) 将字符串转为大写 SELECT UPPER('MySQL'); 返回:MYSQL
SUBSTRING(str,num,len) 字符串截取 SELECT SUBSTRING( 'JavaMySQLOracle',5,5); 返回:MySQL
12、罕用函数——工夫日期函数
CURDATE() 获取以后日期 SELECT CURDATE();返回:2016-08-08
CURTIME() 获取以后工夫 SELECT CURTIME(); 返回:19:19:26
NOW() 获取以后日期和工夫 SELECT NOW();返回:2016-08-08 19:19:26
WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW());
YEAR(date) 返回日期date的年份 SELECT YEAR(NOW());
HOUR(time) 返回工夫time的小时值 SELECT HOUR(NOW());
DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数 SELECT DATEDIFF(NOW(),'2008-8-8'); 返回:2881
13、罕用函数——数学函数
CEIL(x)返回大于或等于数值x的最小整数 SELECT CEIL(2.3) 返回:3
FLOOR(x) 返回小于或等于数值x的最大整数 SELECT FLOOR(2.3) 返回:2
RAND() 返回0~1间的随机数 SELECT RAND() 返回:0.5525468583708134
14、子查问
1)子查问是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其余子查问中的查问
2)子查问在WHERE语句中的个别用法
语法:SELECT … FROM 表1 WHERE 字段1 比拟运算符(子查问)
注:将子查问和比拟运算符联结应用,必须保障子查问返回的值不能多于一个
示例:
SELECT `studentNo`,`studentName`,`sex`,`bornDate`,`address` FROM `student` WHERE `bornDate` > (SELECT `bornDate` FROM `student` WHERE `studentName`='李斯文');
15、应用子查问替换表连贯
1)实现办法一:采纳表连贯
SELECT `studentName` FROM `student` stu INNER JOIN `result` r ON stu.studentNO = r.studentNo INNER JOIN `subject` sub ON r.subjectNo = sub.subjectNo WHERE `studentResult` = 60 AND `subjectName` = 'Logic Java';
2)实现办法二:采纳子查问
SELECT `studentName` FROM `student` WHERE `studentNo` = (SELECT `studentNo` FROM `result` INNER JOIN `Subject` ON result.subjectNo= subject.subjectNo WHERE `studentResult`=60 AND `subjectName`='Logic Java');
子查问比拟灵便、不便,常作为增删改查的筛选条件,适宜于操纵一个表的数据
表连贯更适宜于查看多表的数据
16、IN子查问
SELECT `studentName` FROM `student` WHERE `studentNo` IN( SELECT `studentNo` FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName`='Logic Java' )AND `studentResult` = 60 );
罕用IN替换等于(=)的子查问
IN前面的子查问能够返回多条记录
注:非原创!