mysql的crdu是什么意思_MySQL

数据库基本操作

SQL语句语法:单条语句可以换行,语句结束使用“;”分割,语句不区分大小写,字段大小写区分需要通过管理员进行设定。

注释分为三种,单行注释:1.“--”,2.“#”。多行注释:3.“/**/”

[]表示可以内部内容可省略

连接数据库方法:在cmd界面

mysql -h localhost -u root -p //-h为ip地址,在此使用localhost,即127.0.0.1;-u为用户名 -h为密码

后按下enter,输入密码登陆

后续默认已经连接到数据库

EXPLAIN解释当前SQL语句

1.创建、连接及删除数据库

CREATE DATABASE database_name;--创建名为database_name 的数据库

SHOW DATABASES;--展示所有数据库信息

USE database_name;--使用名为database_name的数据库

DROP DATABASE database_name;--删除名为database_name的数据库

2.数据表的基本操作

在选择数据库以后可以在数据库中进行数据表的相关操作。

查看数据库中表:SHOW TABLES;

2.1数据表的创建相关

CREATE TABLE table_name

(

字段1,数据类型 [约束条件] [默认值];

字段2,数据类型 [约束条件] [默认值];

字段3,数据类型 [约束条件] [默认值];

字段4,数据类型 [约束条件] [默认值];

......

[表级别约束条件]

);

列级约束有:主键Primary key、外键foreign key 、唯一 unique、检查 check 、默认default 、非空/空值 not null/ null

表级约束有:主键、外键、唯一、检查

主键约束(PRIMARY):表中一列或多列的组合,要求主键列数据唯一且不为空,可以定义不同数据表之间关系,且加快数据库查询速度。主键唯一。

表级主键: [CONSTRAINT ] PRIMARY KEY [字段1,字段2......]

外键约束(FOREIGN):外键用来在两个表的数据间建立连接,可以是一列或多列,一个表可以有一个或多个外键。外键可为空,若非空,则必须对应另一个表中主键的某个值。

外键约束通常创建为表级约束:

[CONSTRAINT ] FOREIGN KEY 字段1[,字段2......]

REFERENCE 主键列1[,主键列2.....]

非空约束(NOT NULL):非空约束指定的字段不能为空,一般作为列级约束出现。

唯一约束(UNIQUE):唯一约束要求该字段数据不可重复,一般作为列级约束出现。

默认约束:对该列字段指定默认值,在插入数据时如果不对该字段进行插入则自动生成默认值。

除上述约束外,在主键的某一列创建时还有自增设置(每个表只能有一个自增字段)

方法为 :字段 数据类型 AUTO_INCREMENT

自增默认增量为1,会记录该字段中最大值,而后每次自增都在最大值基础上变动

2.2 数据表修改删除操作

DESC table_name;--查看表基本结构

SHOW CREATE table_name;--查看表详细结构,包括引擎和字符编码格式

ALTER TABLE old_tablename RENAME [TO] new_tablename;--修改表名

ALTER TABLE table_name MODIFY row type;--修改字段数据类型,row为字段名,type为类型

ALTER TABLE table_name CHANGE old_rowname new_rowname new_type;

--修改字段名,类型不变则和原先一致,不可省略

ALTER TABLE table_name ADD row_name type [约束条件] [FIRST|AFTER 已有字段];

--新建字段,FIRST指作为首字段,AFTER 已有字段为在该字段后插入,默认为在尾部插入

ALTER TABLE table_name DROP rowname;--删除字段

ALTER TABLE table_name MODIFY row_name type FIRST|AFTER row_name2;

--将row_name字段放在第一列/row_name2后面

ALTER TABLE tablename ENGINE=enginename;-更换引擎

ALTER TABLE table_name DROP FOREIGN KEY keyname;--删除外键约束

DROP TABLE [IF EXISTS] table1,table2...;--删除没有与其它表相关联的表

--如果表与其它表存在外键约束,则无法直接删除,需要先删除外键约束方可

3.表数据的相关操作

3.1 表数据的查询操作

SELECT语句:

SELECT *|row1[,row2......] /*选取所有数据|某些列的数据*/

FROM tablename1[,tablename2......] /*指定表范围*/

[WHERE 筛选条件] /*筛选条件*/

[GROUP BY 分组条件[HAVING 筛选条件]]/*按条件分组,分组中进行筛选*/

[ORDER BY rowname ASC|DESC[,rowname1 ASC|DESC]]/*按rowname升序|降序排列,可多列排序 */

[LIMIT a,b]/*从a+1开始b行*/

UNION连接:

可以使用UNION或者UNION ALL进行多个SELECT语句连接,其中UNION返回不重复的搜索条件,UNION ALL返回所有值。

查询条件:

IN():在指定条件内

BETWEEN (A) AND (B):在A和B之间

LIKE: 字符串匹配

IS NULL:查询空值

DISTINCT:结果不重复

COUNT()统计总数

MAX()最大值

MIN()最小值

SUM()总和

AVG()平均值

子查询:

ANY():有一个就为真

SOME():同ANY()

ALL():同时满足所有条件

EXISTS():存在就行

IN():存在就行

EXISTS和IN的区别

in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;

例如:表A(小表),表B(大表)

select * from A where cc in(select cc from B)  -->效率低,用到了A表上cc列的索引;

select * from A where exists(select cc from B where cc=A.cc)  -->效率高,用到了B表上cc列的索引。

相反的:

select * from B where cc in(select cc from A)  -->效率高,用到了B表上cc列的索引

select * from B where exists(select cc from A where cc=B.cc)  -->效率低,用到了A表上cc列的索引。

连接查询

INNER JOIN 两个表都有才返回连接

LEFT JOIN 左表有就返回

RIGHT JOIN 右表有就返回

FULL JOIN 直接返回

JOIN 默认INNER JOIN ,后面要接 ON [条件]

3.2 表数据的插入操作

直接插入

INSERT INTO table_name (column1[,column2....]) VALUE (val1[,val2......]);

--向目标column中插入数据,未显示部分为默认值

INSERT INTO table_name VALUE(val1,val2......);--不设置column时需要对所有字段赋值,不然会报错

INSERT INTO table_name (column1[,column2....]) VALUE (val11[,val21......]), (val12[,val22......]), (val13[,val23......]);

--向目标column中插入多条数据,此时执行结束后会返回插入结果

Records:插入数目

Duplicates:被忽略的记录,可能是记录包含了重复主键

Warings:有问题的数据记录,如发生数据类型转换

插入查询结果

INSERT INTO table_name (column1[,column2....])

SELECT 对应字段数目 FROM table_name1 WHERE 条件;

3.3表数据更新、删除

UPDATE table_name SET column1=value1[,.....] WHERE 条件;--更新数据

DELETE FROM table_name WHERE 条件;--删除符合条件的数据

DELETE FROM table_name;--删除表数据

TRUNCATE table_name;--复制表结构后,删除整个表,将表结构作为结果

增加计算列

ALTER TABLE table_name ADD row_name type [GENERATED ALWAYS] AS(计算列表达式)

[约束条件] [FIRST|AFTER 已有字段] ;--创建计算列

4.索引

索引是单独的,存储在磁盘上的数据结构,包含对数据表中所有记录的引用指针,可以快速找出在某个或多个列拥有特定值的行,是提高查询速度的最佳途径。

索引的优点:

1.创建唯一索引,保证数据库表中每一行数据的唯一性

2.大大加快数据查询速度

3.加速表和表之间连接

4.进行分组和排序子查询时可以减少分组和排序时间

索引的缺点:

1.创建和维护索引需要时间,随数据量呈正相关关系

2.需要占用物理空间,当使用大量索引时可能比数据占用更大空间

3.当表中数据进行改动的时候,索引相应也要动态维护,降低了数据维护速度

索引设计原则:

1.索引数目不是越多越好

2.经常更新的表索引尽量少,且索引中列数目尽量少

3.数据量小的表最好不要使用索引

4.在字段中不同值情况较多的时候使用索引,在不同值很少的情况下尽量不使用索引

5.当唯一性是某种数据本身特征时,使用唯一索引

6.在频繁进行排序或分组的列上建立索引,若排序列有多个,则进行组合索引建立

索引分类:

聚集索引:索引文件即数据文件;非聚集索引:索引文件存放的是数据文件地址。

按照存储类型,可分为BTREE索引和HASH索引。

HASH索引:在建立索引时对索引字段进行哈希算法计算,得到哈希值并在哈希数组排序,查找时一次定位。

哈希索引缺点:

1.由于结果是哈希运算后的哈希值,无法直接用其比较大小,无法进行排序操作,只能使用=,IN,<=>查询,无法使用范围查询

2.多列索引的情况下,由于HASH操作是对所有索引列进行操作,因此无法对部分索引键进行查询。

3.由于多个不同信息可能存在相同HASH值,因此即使获取到符合条件的信息,也必须进行表扫描

4.当存在大量HASH值相同的情况,HASH索引速度不一定高于BTREE索引

BTREE索引:使用BTREE作为底层数据结构,在INNODB和MYISAM中差别较大。

INNODB中为聚集索引,

在创建表时添加索引在字段设置完毕后添加

[UNIQUE] INDEX [indexname](column1[,column2.......]);--unique表示唯一索引

在已有表上添加索引:

ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name [length],......) [ASC|DESC];

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name[length],......) [ASC|DESC];

存储过程和函数:

创建存储过程:

CREATE PROCEDURE procrdure_name(参数列表)

BEGIN

[存储过程]

END

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值