MySQL部分

目录

一、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

--------函数查询:掌握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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值