目录
一、mysql引擎介绍 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
二、写在前面。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
三、sql基本规则。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
四、实例操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
总结:
1. like、in、between and 必须先有where作为条件引出字段后才能够搭配使用
2. 统计函数(sum、count)是在group by 分完组后才被执行的语句,它反馈的值是每组的统计结果
一、Mysql 中引擎
MyISAM存储引擎:
1) MyISAM管理非事务表。提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,是默认的存储引擎。
2) MyISAM存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。
3) MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型。
innoDB存储引擎:
1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。
2)innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。
3)innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。
4)innodb存储引擎最重要的是支持事务,以及事务相关联功能。
5)innodb存储引擎支持mvcc的行级锁。
总结:读操作多用MyISAM,各种查询,例如:12306,尤其是春节期间。写操作多用innodb,交易系统,股票交易系统。
二、写在前面:
1> 在dos和Linux环境下进入数据库:cmd进入mysql安装的bin目录下
2> 登录数据库: cmd>mysql -uroot -p
3> 列出所有库: mysql>show databases
4> 进入某个数据库: mysql>use <库名>
5> 列出库中所有表:mysql>show tables
6> 描述表结构: DESC <表名>
三、sql基本规则
1)Sql语句执行顺序:
〖❸确定要使用的数据列〗DELECT[DISTINCT]*|列名(别名),...常量;
〖❶确定要查找的数据来源〗FROM 表名称 [别名],表名称 [别名]
〖❷针对数据行的筛选〗WHERE 过滤条件
〖❹针对于返回结果进行排序〗ORDER BY 字段 [ASC|DESC,....]
语句执行顺序问题
一、sql执行顺序 、
(1)from
(2) on
(3) join
(4) where
(5)group by
(6) avg,sum....
(7)having
(8) select
(9) distinct
(10) order by
2)表的命名规则
Ø 必须以字母开头
Ø 必须在1-30个字符之间
Ø 必须只能包含A-Z,a-z,0-9,_,$,#
Ø 不能和用户定义的其他对象重名
Ø 不能是mysql的保留字(关键字)
3)SQL的两种注释形式:
1.单行注释:以 ‐‐ 开头,该行之后的内容以及SQL代码将会被注释掉。
2.多行注释:以 /* 开头,以 */ 结尾的,中间的部分将会被全部注释掉。
4)表的约束类型:
1.NOT NULL(非空约束):必须有值,值可以重复。
2.UNIQUE KEY(唯一键):该列不可以重复,可以为空(NULL)。
3.primary key(主键):简称PK=NOT NULL+NUIQUE,主键不允许为空,主键一定是唯一的标识,主键可以是一个或多个字段。
4.foreign key(外键):外键对应了另外表的主键,外键的值可以为空,如果不为空就必须是对应主键所在表的主键列表的值。
5.check 校验约束
4)ENGINE=MyISAM AUTO_INCREMENT=170 DEFAULT CHARSET=utf8
5)基本查询:
l Where 条件查询:>、<、>=、<=、<>(!=)不等于发;AND、OR、NOT
l 谓词范围查询:IN、NOT IN
l 带BETWEEN AND 的范围查询,在---之间。Between 200 and 300
l NULL空值查询:IS NULL、IS NOT NULL
l LIKE 模糊查询:LINK后面要用单引号 ‘ ‘,和LIKE一起使用的通配符有 "%"、"_"
n "%":作用是能匹配任意长度的字符。
n "_":只能匹配任意一个字符
n % 和 _ 可以同时使用
l 关键字DISTINCT(查询结果不重复)
l 对查询结果排序:ORDER BY 字段|表达式 ASC升序|DESC降序
l 分组查询:GROUP BY
l --------函数查询:掌握sql中的函数使用规则
四、实例操作
创建一个库
CREATE DATABASE rz_data;
创建空表(NOT NULL、AUTO_INCREMENT、DEFAULT、primary key)
CREATE TABLE rz_adduser(
id INT(20) NOT NULL AUTO_INCREMENT COMMENT '编号'
ename CHAR(20) ,
dept CHAR(20),
role CHAR(20),
email CHAR(20),
casetype CHAR(20))
ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;;
插入数据
value(‘数据1’,’数据2’,。。。。’数据n’,)
2.插入全部字段:Insert into <表名称> values(‘数据1’,’数据2’,。。。’数据n’,)
示例:
INSERT INTO rz_adduser VALUES
('wu1','xing1','2','1','123456','123456','213423543@qq.com','1'),
('wu2','xing2','2','1','123456','123456','113423543@qq.com','1'),
('wu3','xing3','2','1','123456','123456','213423543@qq.com','1'),
('wu4','xing4','2','1','123456','123456','3413423543@qq.com','1'),
('w','xing5','2','1','123456','123456','513423543@qq.com','1'),
('wu6','fff','2','1','123456','123456','613423543@qq.com','1');
('wu6','ff','2','1','123456','123456','613423543@qq.com','1');
('wu6','','2','1','123456','123456','613423543@qq.com','1');
('wu6','','2','1','123456','123456','613423543@qq.com','1');
曾
增加字段id在首列
ALTER TABLE rz_adduser ADD COLUMN id CHAR(20) FIRST;
id 设为自增
ALTER TABLE rz_adduser CHANGE id id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
增加字段id且为自增型,整型,首列
ALTER TABLE USER ADD (COLUMN) id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
设置主键:
alter table tablename add primary key(field_name);
删
删除字段pid
ALTER TABLE rz_adduser DROP COLUMN pid
ALTER TABLE USER DROP pid
删除某一行数据
DELETE FROM rz_adduser WHERE idd=10;
删除表中所有行数据,表结构不变化;
DELETE FROM table_name;
改
重命名表
Alter table 旧表名 rename 新表名
修改id的数据类型
ALTER TABLE rz_adduser MODIFY (COLUMN)id CHAR(20);
修改字段名称:id-->pid
ALTER TABLE rz_adduser CHANGE id pid CHAR(30);
修改字段中的数据
UPDATE rz_adduser SET casetype='name_wrong' WHERE pid=5;
UPDATE rz_adduser SET casetype='Tname_wrong' WHERE pid = 6;
查
Select就是一个输出显示函数
Select hhhh/88888 输出常量
SELECT NOW() /*显示当前日期时间*/
SELECT YEAR(NOW()) /*显示当前年份*/
SELECT CURTIME() /*显示当前时间*/
SELECT CURDATE() /*显示当前的年、月、日*/
SELECT WEEKDAY(NOW()) /*返回当前日期是星期几(0是星期一。。6是星期六)*/
SELECT MONTHNAME(NOW()) /*返回日期月份*/
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H-%i-%s') /*指定格式输出时间*/
Select <字段> as <别名>。。。。
1>查询
SELECT * FROM rz_adduser;
2>查询字段
SELECT ename,tname,dept,role,pwd1,pwd2,email,id FROM rz_adduser
3>查看id的数据类型,查看表结构
DESC rz_adduser;
4>查询字段时,过滤重复行DISTINCT(所要查询的所有字段的数据都相等才可被过滤掉)
Select distinct <字段1>,<字段2>,<字段3> from <表名>
5>插入常量、连接字段
>concat_ws函数concat(separator,str1,str2,...) 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
mysql>SELECT CONCAT_WS(':','姓名',ename,'真实姓名',tname) FROM rz_adduser
6>定义别名(AS可以不要)字段后面接别名
SELECT ename AS sdd,tname FROM rz_adduser
7>四则运算
Select ename,tname,dept*3+7 总计 from rz_adduser
8>两张表合二为一显示(两张表的字段相同)
SELECT * FROM table1 UNION SELECT * FROM table2
9>过滤分组HAVING:作为group by 的过滤条件
(1) 在分组之后进行条件过滤
(2) 满足HAVING子句中的条件的分组将被显示
(3) 不满足的不被显示
例如:查询不及格科目数大于等于2的学生 学号和不及格科目数量:
10>嵌套查询:(内查询出的结果作为外查询的条件)
查询 不及格科目数大于等于2的学生学号、学生姓名、科目号、科目名称和分数,
并按学号降序、科目号升序排序:
查询员工工龄大于10 的员工信息
SELECT * FROM employee
WHERE (YEAR(NOW()) - YEAR(hireDate)) > 10;
Like查询:
DELETE FROM pw_members WHERE username LIKE 'zhou%'
MySQL(三) 数据库表的查询操作【重要】
https://www.cnblogs.com/whgk/p/6149009.html