Mysql——入门

客户端的连接

mysql数据库管理软件:C/S
(1)服务器必须先启动
(2)客户端连接服务器端
一、连接的方式:
用命令行客户端连接服务器
mysql -hlocalhost F-P3306 -uroot-p回车
Enter password:密码

说明:

(1)如果你连接的是localhost本地的mysql,那么可以省略-hlocalhost
(2)如果你连接的mysql服务的端口号就是默认的3306,那么可以省略-P3306
(3)-h,-P,-u这三个options后面可以有空格,例如:-hlocalhost
但是-p与密码之间不要加空格,否则会认为这个空格是密码的其中一个字符
*二、*mysgl5.5版本等,安装后,有自带的一个命令行客户端 只需要输入密码 典能以root用户,并且只能连接本机的,mysql服务
三、可视化工具例如:SQLyog,Navicate…四、Java程序 JDBC的内容

Mysql数据类型

数值类型、
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值

MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215)
大整数值

INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295)
大整数值

BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615)
极大整数值

FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)
单精度浮点数值

DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
双精度浮点数值

DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值


日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型 大小
( bytes) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值

TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间

YEAR 1 1901/2155 YYYY 年份值

DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳


字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型 大小 用途
CHAR 0-255 bytes 定长字符串

VARCHAR 0-65535 bytes 变长字符串

TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串

TINYTEXT 0-255 bytes 短文本字符串

BLOB 0-65 535 bytes 二进制形式的长文本数据

TEXT 0-65 535 bytes 长文本数据

MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据

MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据

LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据

LONGTEXT 0-4 294 967 295 bytes 极大文本数据

注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
Mydql运算符、
算术运算符
MySQL 支持的算术运算符包括:
运算符 作用

  • 加法
  • 减法
  • 乘法
    / 或 DIV 除法
    % 或 MOD 取余
    比较运算符
    SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。
    符号 描述 备注
    = 等于
    <>, != 不等于

大于
< 小于
<= 小于等于
= 大于等于
BETWEEN 在两值之间 >=min&&<=max
NOT BETWEEN 不在两值之间
IN 在集合中
NOT IN 不在集合中
<=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
LIKE 模糊匹配
REGEXP 或 RLIKE 正则式匹配
IS NULL 为空
IS NOT NULL 不为空

逻辑运算符
逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。
运算符号 作用
NOT 或 ! 逻辑非
AND 逻辑与
OR 逻辑或
XOR 逻辑异或
位运算符
位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。
运算符号 作用
& 按位与
| 按
^ 按位异或
! 取反
<< 左移

SQL语句的规范:

1、mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写
show databases;
SHOW DATABASES;
至于表中的数据是否区分大小写,和字符编码,和数据类型,和校对规则有关。
ci:不区分大小写
cs:区分大小写
bin:最严格,区分大小写,以二进制值存储

2、在sql语句中的值,除了数值类型(整数、小数),其他的类型,都使用’引起来。 例如:select * from t_employee where gender =‘男’;

3、如果在sQL中需要给字段取别名时,可以给别名加""。
如果别名中间没有空格,""可以省略,如果有空格,不能使用"↵

4、所有标点符号使用英文状态下的半角输入方式5、必须保证所有(),单引号,双引号是成对结束的I
可以使用(1)#单行注释(2)–空格单行注释(3)/多行注释/
命名规则:
数据库、表名不得超过30个字符,变量名限制为29个
必须只能包含A-Z,a-z0-9,_共63个字符
不能在对象名的字符间留空格
必须不能和用户定义的其他对象重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表
里是整数,那在另一个表里可就别变成字符型了

SQL语言类型:

1、DDL:Data Define Language
数据定义语言,即定义数据的结构。 例如:create, drop, alter

2、DML:Data Manage Language
数据管理语言,对数据值的增、删、改、查 例如:insert,delete, update, select

3、DCL:Data Control Language
数据控制语言,对权限、事务等的控制 例如:grant, revoke, commit, rollback等

一DDL

① 操作database的sql
对数据库的增删和使用及创建和查看所有数据库信息
② 操作表结构的sql
Ⅰ包括查看某个数数据库下的所有表结构
如果出现:mysql> show tables;
ERROR 1046 (3DO0o) : No database selected
解决方案有两种:
(1)先use,再操作表格
use数据库名;
show tables;
(2)show tables from数据名;
Ⅱ、创建某个表格
create table表名称(字段名1数据类型,字段名2数据类型,字段名3数据类型);

Ⅲ查看表结构
Desc 表格名
Ⅳ修改表名
Rename table 旧表名 to 新表名
Alter table 旧表名 rename 新表名
Ⅴ修改表结构

(1)增加一列,增加一个字段
alter table表名称add 【column】字段名数据类型;#默认添加到最后 a
lter table表名称add【column】字段名数据类型first;
alter table表名称add 【column】字段名数据类型after另一个字段;
例如:增加一列,存储电话号码
alter table t_stu addtel char (11);
增加一列,存储地址,添加到第一列的位置
alter table t_stu addaddress varchar(50) first;
增加一列,年龄,添加到sname的后面
alter table t_stu addage int after sname;
(2)修改,字段的数据类型或位置
alter table 表名称modify column 字段名新的数据类型;
alter table表名称modify [column 字段名数据类型 first;
alter table 表名称modify [ column 字段名数据类型 after另一个字段;
例如:修改gender的数据类型为char(2)
alter table t_ stu modify
gender char(2) ;

(3)修改,列的名称
alter table表名称change【column】旧字段名新的字段名数据类型; 例如:修改列的名称tel为phone
alter table 表名 change tel phone char (11);
(4)删除一列
alter table表名称drop【column】字段名;
例如:删除地址列
alter table 表名drop 列名
6、删除整张表
drop table表名称;

二、DML: 增删改查

1、添加数据,往表中插入数据
(1) insert into表名称values(值列表) ;
要求为所有列赋值,(值列表) 的类型、数量与表结构中列的类型、数量-致
(2) insert into 表名称(字段列表) values (值列表) ;
为(字段列表)指定的列赋值,(值列表) 的数量与(字段列表)的类型、数量对应
(3)insert into 表名称values (值列表1) , (值列表2)。。。;
(4) insert into 表名称(字段列表) values(值列表1) , (值列表2)。。。;
2、修改
update [数据库名.]表名称set字段名1 =新值,字段名2=新值,字段名3=新值。。
where【条件】;
3、删除数据
delete from表名称[where条件];
例如:删除所有数据,表结构还在
delete from t stu;
例如:删除成绩是82.5的学生
delete from t stu where score = 82.5;
4、查询数据
(1) selectfrom表名称;
select*(2)from 表名称[where条件];|
例如:查询全部
select * from t stu;
例如:查询哪些学生没有填写性别
select * from t stu where
5、查询时给字段取别名
字段名as “别名”
其中:
(1)如果"中的别名没有空格,可以省略"
(2)这个as可以省略
例如:查询没有填写性别的学生的姓名和成绩,查询结果sname显示姓名,score显示成绩 select sname as “姓名” ,score as成绩" from t_stu where gender is null;
select sname姓名,score成绩from t_stu where gender is null;
**

关系型数据库设计规则

**
。遵循ER模型和三范式
oEentity代表实体的意思对应到数据库当中的一张表
oR relationship代表关系的意思
,三范式:1、列不能拆分2、唯一标识3、关系引用主键
,具体体现
。将数据放到表中,表再放到库中。
。一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
o表具有一些特性,这些特性定义了数据在表中如何存储,类似java和python中“类”的设计。
。表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段 的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和字段名。每个字段类似 java或者python中的"实例属性”。
。表中的数据是按行存储的,一行即为一条记录。每一行类似于java或python中的"对象"。

1、数据完整件LData Integrity)
是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应5止数据库中 存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
数据的完整性要从以下四个方面考虑:
,实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
。域完整性(Domain Integrity):例如:年龄范围0-120,性别范围"男/女”
。引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
,用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不 得高于本部门职工的平均工资的5倍。
2、根据约束的特点,分为几种:
●主键约束:主键约束
外键约束
唯一键约束
Not NULL约束:非空约束
Check约束:检查约束
Default约束:默认值约束
自增约束

3、约束(CONSTRAINTS)与索引(INDEX)

约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,约束可以被当做数 据库对象来处理,它们具有名称和关联模式。

索引是一个单独、物理的存储在数据页上的数据库结构,它是表中一列或若干列值的集合和相应的指向表中数据值的物理标识数据页的逻辑指针清单(类似于新华字典的目录索引页)。索引的存在会增加数据库的存储空间,也会使插入、修改数据的时间开销变多(因为插入和修改数据时,索引也要随之变动) , 但是可以大大提高查询速度。

因此应该在键列、或其他经常要查询、排序、按范围查找的列上建立索引,而对于在查询中很少使用和参考的列、
修改非常频繁的列。值很少的列(例如性别只有男和女)等列上不应该创建索引。Mysq|会在主键、唯一键、 外键列上自动创建索引,其他列需要建立索引的话,需要手动创建。其中主键删除.对应的索引也会删除删除唯-键的方式是通过删除对应的索引来实现的删除外键,外键列上的索引还在,如果需要删除,需要单独删除索引。

Mysq|会在主键、唯一键、 外键列.上自动创建索引,其他列需要建立索引的话,需要手动创建。
其中主键删除,对应的索引也会删除
删除唯一键的方式是通过删除对应的索引来实现的
删除外键,外键列上的索引还在,如果需要删除,需要单独删除索引
1、主键约束
特点:
(1)一个表有且只能有一个主键约束.
(2)主键约束意味着,唯一并且非空
(3)主键约束名PRIMARY
(4)创建主键会自动创建对应的索引,同样删除主键对应的索引也会删除
2、在建表的时候如何指定主键约束 create table[数据库名.]表名称(
字段名1数据类型primary key,
字段名2数据类型
。。。
),
3、建表后如何指定主键约束
alter table [ 数据库名.]表名称add primary key (字段列表) ;
4、主键约束分为两种:
(1)单列主键约束
(2)复合主健约束
创建表时
icreate table【数据库名.】表名称(
字段名1数据类型,
字段名2数据类型,
。。 o o,
primary key(字段列表)
) ;
建表后如何指定复合主键约束:
alter table【数据库名.】表名称add primary key(字段列表);
5、删除主键约束
alter table[数据库名.]表名称drop primary key;

2、唯一键约束
特点:
(1)一个表可以有多个唯一键约束
(2)唯一键约束意味着,唯一,可以为NULL
(3)唯一键的约束名可以自己指定,也可以默认,
如果默认的话,一般如果单列唯一,默认就是列名,
如果是多列组合唯一,那么默认是该组合第1列的名称。
(4)创建唯一键约束,也会在对应列上建立索引。
而且删除唯一键约束的方式是通过删除对应索引来实现的。
2、唯一键约束也是分为两种
(1) 单列的唯一一键
(2)多列组合的唯一键
3、建表时如何指定唯一键
create table[数据库名.]表名称(
字段名1数据类型primary key
字段名2数据类型unique key,#只适用于单列的唯一键
);
create table[数据库名.]表名称(
字段名1数据类型primary key,
字段名2数据类型

);
4、建表后如何指定唯一键约束
alter table
[数据库名.]表名称add unique key(字 段列表) ;
5、删除唯一 键约束
alter table [ 数据库名.]表名称drop index 索引名;
6、如何查看某个表格的索引名
show index from[ 数据库名.] 表名称;
3、非空约束
特点:
(1)一个表可以有很多的非空约束
(2)非空约束只能针对某一个字段来说
(3)非空约束意味着,改字段不能存入null值
2、如何在建表时指定非空约束呢
create table [数据库名.]表名称(
字段名1数据类型
primary key,
字段名2数据类型unique key]not null ,
字段名3数据类型
not null,
。。);
3、建表后如何指定某个字段非空呢?
alter table【数据库名.】表名称modify字段名数据类型not null;
create table test.t_stu (
sid int primary key,
sname varchar (20),
gender char
) ;
alter table t_stu modify sname varchar (20) not null;
4、建表后,取消某个字段的非空约束
alter table【数据库名.】表名称modify字段名数据类型;
alter table t_stu modify sname varchar(20);
4、默认值约束
1、特点:
(1)一个表可以有很多的默认值约束
(2)默认值约束只能针对某一个字段来说
(3)默认值约束意味着,该字段如果没有手动赋值,会按默认值处理
2、如何在建表时指定默认值约束?
create table[数据库名.]表名称(
字段名1数据类型primary key,
字段名2数据类型(unique key] [not null]default默认值,
字段名3数据类型default默认值,
oooc
);
例如:
);
create table test.t_stu(
sid int primary key,
sname varchar (20) not null工
gender char default’男’

insert into t stu values(1, 张三’) ;
ERROR 1136 (21S01) : Column count doesn’t match value count at row 1 '列数与值不对应
insert into t stu values(1, ‘张三’ ,default) ;
insert into t_ stu (sid, sname) values(2, ‘李四’) ;
3、建表后如何指定某个字段有默认值呢?
alter table[数据库名.]表名称modify字段名数据类型default 默认值;
4、 如何取消某个字段的默认值约束
al ter table [数据库名.]表名称modify字段名数据类型[not null ] #不写默认
5、自增约束
特点:
(1)一个表只能有一个自增约束
因为一个表只有一个维护自增值的变量。
(2)自增约束的列只能是整数列
(3)自增约束的列必须是键列(主键,唯一键,外键),
实际中一般是主键自增最多
2、如何在建表时指定某个列自增
create table t stu(sid int auto increment,
sname varchar(20)
);
ERROR 1075 (42000):Incorrect table definition;
there can be only one auto column and it must be defined as a key as

3、建表后增加自增
alter table[数据库名.] 表名称modify 字段名数据类型auto_ increment ;

4、如何取消自增
alter table[数据库名.]表名称modify字段名数据类型;
外键约束:
2、外键约束
(1) Cascade方式:级联
主动权在主表上。
如果主表被依赖字段修改了,从表对应的外键字段跟着修改
(2)如果主表被依赖字段的记录删除了,从表对应的外键字段的记录也会删除 Set null方式
主动权在主表上。
如果主表被依赖字段修改了,从表对应的外键字段设置为null
如果主表被依赖字段的记录删除了,从表对应的外键字段的值设置为null
(3)这里要求,外键字段必须不能有非空约束。
No action方式:不作为
(4) Restrict方式:严格
(3)(4),如果主表的被依赖字段的值被引用了,那么主表对该字段的修改和删除就
(3)(4)主表没有主动权。必须先处理从表对应的值,然后才能修改和删除。
3、如何在建表时指定外键
create table【数据库名.】从表名称(
字段名1 xxIntprimary key auto_increment,
字段名2数据类型【unique_key)【not null】default默认值,
字段名3数据类型default默认值,
) ;
foreign key(从表的某字段)references主表名(被参考字段)【on update等级】【on delete等级】
4、建表后如何添加外键
Alter table [数据库名.]从表名称add foreign key (从表的某字段) references 主表名【主表被引用的字段】
5、如何删除外键
alter table .[数据库名.]从表名称drop foreign key约束名; .
6、如何查看某个表的外键约束名
SELECT * FROM information_ schema. table_ constraints WHERE table_ name = ‘表名称’

函数

字符串函数

(1)length (zx):求字节数,和字符集有关
(2)char_length (zz):求字符数
(3)CONCAT(str1,str2,…)
( 4)CONCAT_WS(分隔符,strl,str2,…)
UPPER(S)或UCASE(S)
将字符串s的所有字母转成大写字母
LOWER(s)缆LCASE(s)
将字符串s的所有字母转成小写字母
LEFT(s,n)
返回字符串S最左边的n个字符
RIGHT(s,n)
返回字符串s最右边的n个字符
LPAD(str, len, pad)
用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str ,len, pad)
用字符串pad对str最右边进行填充,直到tr的长度为len个字符
LTRIM(S)
去掉字符串s左侧的空格
RTRIM(s)
去掉字符串s右侧的空格
TRIM(s)
去掉字符串s开始与结尾的空格
TRIM( [BOTH ] s1 FROMs)
去掉字符串s开始与结尾的s1
TRIM( [LEADING] s1 FROM s)
去掉字符串s开始处的s1
TRIM( [TRALING] s1 FROM s)
去掉字符串s结尾处的s1

数学函数

ROUND(x,y)
返回参数x的四舍五入的有y位的小数的值
TRUNCATE(x.y)
返回数字x截断为y位小数的结果
SORT(x)_
返回的平方根
POW(x,y)
返回x的y次方

时间函数

CURDATE()或CURRENT _DATE()
返回当前日期
CURTIME()或CURRENT TIME()
返回当前时间
NOW() / SYSDATE() / CURRENT
TIMESTAMP() / LOCALTIME()/
返回当前系统日期时间
LOCALTIMESTAMP()
YEAR(date) / MONTH(date) / DAY(date) 1 HOUR(time) 1
返回具体的时间值
MINUTE(time) / SECOND(time)
WEEK(date) / WEEKOFYEAR(date)
返回一年中的第几周
DAYOFWEEK()
返回周几,注意:周日是1,周一是
2,。。。周六是7
WEEKDAY(date)"
返回周几,注意,周1是0,周2是
1…。。周日是6
DAYNAME(date)
返回星期:
MONDAY,TUESDA…UNDAY
MONTHNAME(date)
返回月份:January…。
DATEDIFF(date1,date2) / TIMEDIFF(time1, time2)
返回date1 - date2的日期间隔/返回
time1 - time2的时间间隔
DATE ADD(datetime, INTERVAL expr type)
返回与给定日期时间相差INTERVAL时间
段的日期时间
DATE
FORMAT(datetime ,fmt)
按照字符串fmt格式化日期datetime值
其他函数、
password(str)
返回字符串str的加密版本, 41位长的字符串
md5(str)
返回字符串str的md5值,也是一种加密方式

组函数

组函数类型
。AVG()【求平均数】
。SUM()【求总和】
。MAX()【求最大值】
。MIN()【求最小值】
。COUNT()【求数量之和】

连接

1、I内连接:inner join
2、外连接(1)ANB
(1)左外连:left join
(2)A
(3)A-ANB
(2)右外连接:rightjoin
(4)B
(5)B-AnB
(3)全外连接:full join但是可以使用union(合并)结果来实现以下两种结果
但是不直接支持全外连接,(2) Aunion(合并)(4)B
(6) AUB 用
(7)AUB-AnB用(3) A - A nB union(合并)(5)B-AnB
内连接:AnB、
两张表内连接关联查询
select字段列表
from A表名inner joinB表名
on 1个关联条件
where其他条件等
三张表内连接关联查询
select字段列表
from A表名inner joinB表名inner joinc表名
on 2个关联条件
where其他条件等
关联条件的个数=表数- 1
如果少了关联条件,就会笛卡尔积
全外连接
使用union来实现全外连接的查询结果:
(1)AUB
(2)AUB- A B 迂回成
(1)A UNION B
(2)A - A B UNION B - A∩B

Select的六大子句

使用规则:按顺序使用
(1)form子句:后面跟字段列表等表状工具
(2)where子句:后面跟条件 where意思取那几行,要哪些行(where后面不能跟分组语句)
(3) group by:后面跟字段 group by意思是分组
select结果字段列表
from表名称
where条件
group by.分组字段列表;
要求:结果字段列表中不要出现和分组无关的字段
(4)having:后面跟条件
having:意味着在分组统计结果中再次对统计结果加条件,不是对原表中的记录加条件
(5)order by: 后面跟字段或表达式
order by:. 排序
升序:省略asc或加asc
降序: desc
(6)limit:取几条记录
limit m, n
m表示从第几天记录开始取,n表示最多取n条件 通常用于分页

查询

查询的学习的顺序:
1、简单查询
2、联合查询
3、select的6个子句
4、子查询

子查询:
在一个查询中嵌套了另一个查询,那么这个嵌套在里面的查询称为子查询。 子查询的结果作为外部查询的条件或者数据的筛选范围来使用。
子查询分为三类:
1、 where
子查询的结果作为外部查询的条件使用的
(1) 子查询结果是: 单值结果
比较运算符后面可以跟单值的结果
(2)子查询结果是:一列多行的多值结果
in(),比较运算符all(), 比较运算符any()
2、 from
子查询的结果是作为外部查询的筛选范围来使用
注意:
对子查询的多行多列的二维表结构的临时表取别名
给用分组函数统计的结果列取别名
3、exists型
子查询的结果是作为外部查询的条件使用的

Mysql事务

1、事务处理(事务操作)︰保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方 式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要 么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
2、事务的ACID属性
( 1)原子性(Atomicity )
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
( 2)一致性(Consistency )
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
(3)隔离性( lsolation )
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是 隔离的,并发执行的各个事务之间不能互相干扰。
(4)持久性(Durability )
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该 对其有任何影响

事务:
事务是表示一组操作要么同时成功,要么同时失败,而且事务与事务之间是独立。
事务有ACID的特性。
(1)原子性(2)一致性(3)隔离性(4)持久性
mysql默认是自动提交事务,一句SQL是一个事务,执行成功一句就提交一句。
手动开始事务,取消自动提交。

方式一:
set autocommit = false;
这次客户端连接,在你恢复自动提交之前,
r接下来所有的sQL执行都必须手动提交了,否则就不生效。
这个设置只管一个连接,和其他的连接(登录)无关。
set autocommit = false;
…都是需要手动提交的。
set autocommit = true;
当只是部分的SQL需要构成事务,手动提交,而其他SQL还是想要自动提交的。 那么我们选择方式二。
方式二:
start transaction;
一个事务
commit;或rollback;
start transaction; 另一个事务
commit;或rollback;
tip:事务对ddl语句无效

用户与权限

1、身份认证:
( 1 )IP+用户名作为身份验证
例如:root@localhost:只允许在本机使用root用户登录
root@%:运行在任意机器上使用root用户登录
[email protected]:只运行在192.168.11.56主机上使用root用户登录 chailinyan@%∶运行在任意机器上使用chailinyan用户登录
( 2)密码
2、给每个用户权限,4个权限级别∶
( 1)全局
( 2)数据库
(3)表 l
( 4)字段
依次校验权限,如果前面通过了,后面就不校验了∶
全局>数据库>表>字段
2、忘记root用户密码问题
1:通过任务管理器或者服务管理,关掉mysqld(服务进程)
2:通过命令行+特殊参数开启mysqld
mysqld --skip-grant-tables
3:此时,mysqld服务进程已经打开,并且,不需要权限检查.
4:mysql-uroot无密码登陆服务器.
5:修改权限表
( 1 ) use mysql;
( 2 ) update user set Password = password(123456’) where User = ‘root’;
( 3 ) flush privileges;
6:通过任务管理器,关掉mysqld服务进程.
7:再次通过服务管理,打mysql服务。
8:即可用修改后的新密码登陆.

猜你喜欢

转载自blog.csdn.net/m0_52000372/article/details/114734459