200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Mysql的DDL DML DQL DCL

Mysql的DDL DML DQL DCL

时间:2023-08-17 18:18:33

相关推荐

Mysql的DDL DML DQL DCL

m代表长度(1-65)

d代表保留少数位(0-30)

整数型

tinyint(m)1字节 取值范围(-128-+127)

int(m)4字节 取值范围(大概20几亿)

浮点型

double(m,d)8字节

(钱)

decimal(m,d)m+2字节

字符串型

char(0-255)固定长度

varchar(0-65535)可变长度

tinytext(0-255)

text(0-65535)

日期类型

date格式yyyy-mm-dd

datetime格式yy-mm-dd hh-mm-ss

time格式hh-mm-ss

year格式yyyy

常见约束属性

unsigned 无符号(没有符号‘-’)

zerofill 零填充长度不足以0填充

null 空

not null 非空

default'xx' 默认

unique key(uk)唯一键

primary key(pk)主键

foreign key(fk)外键

auto_increment

(整数类型可用自增属性,可设初始值和步长,初始值可在创建表的括号外写)

(步长是全局的修改后所有的自增列都会被改变)

(auto_increment=初始值、set @@auto_increment=步长)

例:

create table if not exists Table(

`ID` int(4) primary key auto_increment not null comment'序号'

)auto_increment=100; //这是从100开始自增 影响所有使用自增表

9

set @@auto_increment=5; //这是设置步长每次外5 影响所有使用自增表

DDL数据定义语言

create 创建

drop 删除

alter 改变

show 展示

describe(desc) 描述或者属性、结构

use 切换

index 索引

DML数据操作语言----》管理数据库数据方法

insert into增加

插入单条语句的语法 注意:字段和值是一样的数量 不能多写或者少写。使用,隔开。

示例: 注意:不写的就这样输入 null 时间用当前的时间就输入 NOW() 默认值可以直接用default

INSERT INTO geade(geadename) VALUES ('大一');

INSERT INTO geade VALUES (2,'大二');

INSERT INTO geade(geadename) VALUES ('大三'),('大四'); 其他数据库不是这样写 只有mysql 这是它独有的写法。

INSERT INTO geade(geadename,xx,xxx) VALUES ('大三','xxx','xxx'),('大四','xx','xxx');

update 修改

UPDATE 表名 SET 列名='值',列名='值' WHERE 条件

示例:

UPDATE school SET schoolname='输入我要修改的数据' WHERE ID='1';

WHERE条件子句:简单的理解为 :有条件地从表中筛选数据

WHERE的运算符

BETWEEN 在某个范围内 示例:BETWEEN 5 AND10 解释: 大于等于5到小于等于10的里面数据执行 (之)

AND 并且示例:5>1 AND 1>2 解释:5>1并且1>2的里面数据执行 (到)

OR 或者的意思 示例:5>1O OR 1>2 解释:5>10 或者 1>2的里面数据执行 (和)

示例:

UPDATE 表名 SET 字段=CONCAT("姓名",字段);解释CONCAT是函数表示连接字符串的意思,在之前的字段前面加姓名.

delete 删除 注意::[WHERE 条件]不写的话则删除该表的的所有列数据。 删除的时候自增不会重置 INNODB

DELETE FROM 表名[WHERE 条件];

示例:

DELETE FROM school WHERE schoolname=1; 解释就是删除school表里的schoolname列的1

+

删除的区别

drop一般用于删除整体性数据 如表,模式,索引,视图,完整性限制等

delete用于删除局部性数据 如表中的某一元组

注意 truncate:它是删除,它删除不能恢复,结构都给您整没了。自增的值会重置 INNODB

示例:

TRNUCATE FROM school

注意:小伙慎重使用!

DQL数据查询语言

select

DCL数据控制语言

grant 同意

commit 犯错 把……交托给

rollback 回滚

show status;状态

show version();版本

show engines 产看支持的引擎

show variables like '%storage_engine%';查看默认引擎

show create table 表名 查看当前表的引擎

#创建数据库

CREATE DATABASE IF NOT EXISTS school;

#使用某个数据库

USE school;

#删除

DROP DATABASE IF EXISTS school;

查看库show databases

查看表show tables

删除库drop database if exists 库名

删除表drop table if exists 表名

切块 use 库名/表名

看指定表的详细信息 desc 表名

创建库create database if not exists 库名

创建表create table if not exists 表名()engine=innodb charset=utf8

修改表名alter table 原表名 rename to 新表名

添加字段alter table 表名 add 字段名 数据类型 约束属性

修改字段alter table 表名 change 原字段名 新字段名 数据类型 约束属性

alter table 表名 modify 字段名 数据类型 约束属性

删除字段alter table 表名 drop 字段名

创建外键(删除的话只能先删除子表在父表)

CONSTRAINT FK_geadeid FOREIGN KEY(geadeid) REFERENCES grade(geadeid)

删除外键

CONSTARINT DABLE 表的名字 DROP FOREIGN KEY 外键的名字;

CONSTARINT DABLE 表的名字 INDEX(索引)FK_外键的名字;

添加主键约束 alter table 表名 add constraint 主键名 primary key 表名(主键字段名)

添加外键约束 alter table 表名 add constraint 外键名 foreign key (外键字段名)references 关联表名 (关联字段名)

帮助文档目录列表 help contents

帮助 ?关键字

engine 表引擎类型

常见表引擎类型 MyIASM、InnoDB、CSV、HEAP 等。

类型区别(支持为1、不支持为0)

名称 MyIASM InnoDB

事务处理 0 1

数据行锁定 0 1

外键约束 0 1

全文索引 1 0

表空间大小 较小 较大2倍

表的结构

创建的表在隐藏在c/programdate/mysql/

innodb{ib-logfile0、ib-logfile1、拓展文件(.frm文件)}

mysiam{.frm、.myd、.myi}

一个问题默认值设置一些中文时会报错?

doc窗口默认GBK,如果当前编码格式不是GBK就会产生乱码。

输出信息之前先执行语句:set names gbk;就可以解决了(相当于执行了三条语句)

(set character_set_client=gbk、set character_set_result=gbk、set character_set_connection=gbk)

修改表的字符集

alter table 表名 default character set utf8;

InnoDB和MyISAM的使用场合:

MyISAM储存引擎:由于不支持事物处理,也不支持外键,访问速度比较快,以访问为主优先选择。

InnoDB储存引擎:在事务处理上有优势,有事物控制能力,可以保证事物的完整性,还可实现并发控制。这样的需求优选。

默认引擎的的更改:在配置文件my.ini文件中可以修改。

修改defaultstorage-engine=InnoDB

也可以在创建表时修改:engine=MyISAM;

MySIAM:每个MySIAM文件都有这样三个文件。

.frm:表结构定义文件。主要存放表的元数据。

.MYI:索引文件,存放表的索引信息。

.MYD:数据文件,存刚表中数据文件。

InnoDB:每个表都有一个.frm文件,ibdate1文件是共享的。

.frm:同上。

.ibdata1:数据文件,保存所有InnoDB类型表数据。

修改表的操作

ALTER TABLE `库名`.`表名` AUTO_INCREMENT=1000;

DML语句知识点。

插入单行数据语法:insrt into 表名 (字段名列表)values(值列表) ;

1省略字段名列表时,要依次插入所有值。

2字段名列表和值列表一一对应就行。

3值的类型要和字段的类型匹配。

4字段名和字段名之间用逗号隔开。值与值之间也用逗号隔开。

插入多行值的方法:insrt into 表名 (字段名列表)values(值列表1),(值列表2),……;

更新、修改,数据的语法:update 表名 set 字段名1=value1,字段名2=value2 where 条件

删除数据语法:delete from 表名 where 条件(删除的是一整条数据)一行

摧毁时删除(连带表一起删除且不可恢复):truncate table 表名

查询的语法:select * from 表名 where 条件

其中*表示所有列。可以用某一字段来替换。

重新命名字段名(列名)显示的语法:select 字段名 as 新字段名 from 表名;伪修改就是改变显示了;

重新修改数据显示的语法:select 'value' as 自定义值 from 表名 ;伪修改就是改变显示了

将查询结果插入到新表的方法:crate table 新表 (select 字段1,字段二,……from 原表);

DQL语言

DQL(Data Query Language 数据查询语言)

1、查询数据库数据,如SELECT语句

2、简单的单表查询或多表的复杂查询和嵌套查询

3、数据库语言中最核心、最重要的语句

4、使用频率最高的语句

示例: 别名的意思是起外号(伪名称):容易区分 。不会修改原表的名称 AS可以不写。

搜索表的列

SELECT 列名 ,列名 FROM 表名

搜索表的列、取别名

SELECT 列名 AS 别名,列名 AS 别名 FROM 表名

SELECT 列名 别名,列名 别名 FROM 表名

搜索表的列、取别名、取表别名

SELECT 列名 AS 别名,列名 AS 别名 FROM 表名 AS 别名

SELECT 列名 别名,列名 别名 FROM 表名 别名

为查询结果取一个新名字

SELECT CONCAT("姓名",sudentname) AS 新表名 FROM 表名

基本查询:

WHERE 1=1

ORDER BY(从) score DESC(从大到小)

LIMIT 0 (下标),3(长度)

去除重复项 distinct 默认的时候是ALL

SELECT DISTINCT 列名 FROM 表名 相反的是 SELECT ALL 列名 FROM 表名 -----不加ALL 也行

可以跟表达式

SELECT CERSION();查询版本号

SELECT @@AUTO_INCREMENT_INCREMENT查询当前步长数

SELECT 100*3-1 AS 计算结果 算出结果是299列名叫计算结果

满足分数+1

SELECT 学生名字,学生分数+1 AS '提分后' FROM 表名

满足条件的查询(where) 这是模糊查询 想写那种写那种!

SELECT 学生名字,学生分数 FROM 表名 WHERE 学生分数>=95 AND 学生分数<=100;

SELECT 学生名字,学生分数 FROM 表名 WHERE 学生分数 DEWEEN 95 AND 学生分数<=100;

这是精确查询

SELECT 学生名字,学生分数 FROM 表名 WHERE 学生名字='张三 ';

还可以这样写

SELECT 学生名字,学生分数 FROM 表名 WHERE 学生分数>=95 && 学生分数<=100;

除了叫张三的同学,看其他同学

SELECT 学生名字 FROM 表名 WHERE 学生名字!='张三';

SELECT 学生名字 FROM 表名 WHERE NOT 学生名字 ='张三'

like(像什么样)结合通配符:%(0到任意一个字符)_(一个字符) 模糊查询

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '张%'; 示例:张三,张一三,张二三....

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '张_'; 示例:张三,张思,张四(只能显示一字)

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '张__'; 示例:张思思,张李四(只能显示两个字)

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '%张%' 示例:一张三,二三张,张四五(包含张字就行)

查询带有%或者_的字符 转义符:\ ESCAPE:把某个符号变成\的意思

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '%\%%'; 示例:李%三,%离散,李三%(包含有%)

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '%_%%'; 示例:李_三,_李三,李三_(包含有_)

ESCAPE:把某个符号变成\的意思

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 LIKE '%:%' ESCAPE':';

in的查询用法: 模糊查询

SELECT 学生姓名 FROM 表名 WHERE 学生姓名 IN('张三','123','wangwu') 示例:张三 123 wangwu

查询NULL 不能这些列名=NULL, 只能写IS NULL

SELECT 学生姓名 FROM 表名 MHERE 学生姓名 IS NULL;示例:查询是NULL 的值

查询不为NULL

SELECT 学生姓名 FROM 表名 MHERE 学生姓名 IS NOT NULL 示例:查询不是NULL 的值

查询没写的值

SELECT 学生姓名 FROM 表名 WHERE 学生姓名=''; 示例:查询出来没写的值

判断为空的一般都用这个

SELECT 学生姓名 FROM 表名 WHERE 学生姓名='' OR 学生姓名 IS NULL 示例:查询出来没写和是NULL的

注意:NULL值不是代表什么也没写。没写的值是被删除了没写的或者没写。

链接查询:

JION:链接 INNER:内 LEFT:左 FEGHT:右

内链接 inner join 查询两个表中的结果集中的交集

示例:和等值链接的查询结果一样,写法不同 加上表名,WHERE 换成ON JOIN:链接

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

INNER JOIN result AS rINNER:内(加不加都行)

ON r.StudentNo=s.StudentNo

外链接 outer join:

左外链接 left join 以左表作为基准,右边来一一匹配,匹配不上的,返回左表的记录,右边以NULL填充

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

left JOIN result AS r left:左

ON r.StudentNo=s.StudentNo

右外链接 reght join 以右表作为基准,左边来一一匹配,匹配不上的,返回右表的记录,左边以NULL填充

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

RIGHT JOIN result AS r right:右

ON r.StudentNo=s.StudentNo

查询缺考同学:左连接

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

left JOIN result AS r

ON r.StudentNo=s.StudentNo

WHERE studentresult IS NULL

自链接

一个表取两个别名 跟多个表一样

等值链接 ------------------------------和内链接的查询结果一样,写法不同 去掉表名,ON换成WHERE

示例:

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s, result AS r

WHERE r.StudentNo=s.StudentNo

非等值(用处不大)

返回的结果是左边表里的行数乘以右边表里的行数 左*右

示例:

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s, result AS r

注意:

1.内链接和左外链接、右外链接的不同:

内链接是依次从第一行进行比较,如果没有匹配上的ID就不匹配了。继续往下匹配比较。

左链接是依次从第一行进行比较,如果没有匹配上的ID就左表+NULL(右表)。继续往下匹配比较。

右链接是依次从第一行进行比较,如果没有匹配上的ID就左表+NULL(左表)。继续往下匹配比较。

2.如果ID列名相同就用 表名.列名 (表名可以去别名哦 表名 AS 别名)

分页:LIMIT

(当前页数-1)*当前的行数

子查询:在查询语句中的WHERE条件句子中,又嵌套了另一个查询语句

1、由里到外执行顺序

2、多个值的时候用in 一个值用=

示例: 一个值

SELECT studentno ,r.subjectno,studentresult

FROM result r WHERE subjectno=(SELECT subjectno FROM `subject` WHERE subjectname='数据库结构-1')

ORDER BY studentresult desc;

示例:连接查询+子查询

SELECT r.studentno,studentname

FROM student s

INNER JOIN result r

WHERE r.StudentResult>=80

AND subjectno = (SELECT sub.SubjectNo FROM `subject`WHERE subjectname='高等数学-2')

示例:子查询 (分部写简单SQL语句,然后将其嵌套起来)

SELECT studentno,studentname FROM student WHERE studentno IN(

SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(

SELECT SubjectNo FROM `subject`WHERE subjectname='高等数学-2'))

---------------------------------------------------------------------

SELECT gradename FROM grade WHERE gradeid=

(SELECT gradeid FROM student WHERE studentname='郭靖');

注意:嵌套查询可由多个子查询组成,求解的方式是由里到外;

子查询返回的结果一般都是集合,故而建议使用IN关键字;

逻辑操作符:

操作符名称 语法 描述

OR或&& a OR b 或 a&&b 逻辑与,同时为真结果才是真

AND || a AND b 或 a||b 逻辑或,只要有一个是真结果才是真

NOT != NOT a 或 !=a 逻辑非,若操作数为假,结果则为真

比较操作符:

操作符名称 语法 描述

IS NULL a IS NULL 若操作符为NULL,则结果为真

IS NOT NULL a IS NOT NULL 若操作符不为NULL,则结果为真

BETWEEN a BETWEEN b AND c 若a范围在b与c之间则结果为真

LIKE a LIKE b 若a等于a1,a2...中的某一个,则结果为真

注意:

1、数值数据类型的记录之间才能进行算术运算

2、相同数据类型的数据之间才能进行比较

常用聚合函数:

函数名 作用

AVG()返回某字段的平均值

COUNT()返回某字段的行数

MAX()返回某字段的最大值

MIN()返回某字段的最小值

SUM()返回某字段的和

备注:用的时候就传一个参数,参数是某个字段名;

语法:select 函数(列名) from 表名;

字符串函数:对字符串进行各类处理。

常用的字符串函数

concat(str1,str2,……)连接字符串

insert(str,index,len,str1)将str中从index开始len个长度的字符串替换为str1

lower(str)将str变成小写的新字符串

upper(str)将str变成大写的新字符串

substring(str,index,len)将str截取为从index开始len个长度的新字符串。

时间函数:得到各种时间

curdate()返回当前日期-6-8;

curtime()返回当前时间12:01:50;

now()返回当前日期和时间-6-8 12:01:50;

week(now())返回一年中的第几周

year(now())返回年份

hour()返回小时值

minute()返回分钟值

datediff(date1,date2)返回date1和date2的相隔天数

adddate(date,n)返回从date那天开始过去n天的日期

数学函数:数值运算

常用的数学函数

ceil(x)向上取整

flool(x)向下取整

rand()返回0-1间随机数

排序查询:order by

升序(asc)、降序(desc)

语法:select 字段名1[,字段名2,(函数(字段名3*number))as 自定义名,……] from 表名 order by 字段名1[,字段2] 升序/降序

查询的总语法:

select <字段名列表> from <表名/试图> [where <查询条件>]

[group by <分组的字段名>] [order by <排序列名称>[asc/desc]

[limit [位置偏移量n],行数x]

位置偏移量:下标概念,一般下标从0开始计数。意思是从下标为n的那条数据开始显示。

行数:从下标为n的那条数据开始,显示x行数据。

子查询

嵌套使用查询语句 小括号里面是子查询,外面的查询叫父查询。 子查询作为 where 的一部分

语法:

select 字段名1 [,字段名2] from student where (select 字段名 from student where 条件);

备注:子查询还可以和update、insert、delete一起使用。

子查询和比较运算符使用时返回值只能是一个。

备注:*的运行效率低建议以指定字段来替代。因为*代表所有字段值所占用的资源。

in和not in

当子查询返回多个值时我可以用 in 和 not in 来判断。 表示,字段是否存在于子查询里。

单词:

AS 别名

concat("姓名",sudentname)用来字符连接

distinct 去除重复项

jion:链接

inner:内

left:左

right:右

NOT !=

OR &&

AND ||

like 像什么样

escape:把某个符号变成\的意思

order by :排序

ORDER BY(从) score DESC(从大到小)

LIMIT(想要的行数) 0 ,3

附带内容(喜欢就看看):

谈谈主键外键的意义:

1.主键是一个表的关键字,能够唯一确定这条记录的。是表的标识列。一般数据长度越短越好。

2.外键就是参考主表中某一个字段的值,一般是一个主键记录多个外键的记录。

3.字段设置了外键就制约了该字段必须在外键的范围内。

说说联合主键和复合主键:

1.都是保证其唯一性。

2.联合主键是多个主键联合形成一个主键组合;

3.复合主键是表的主键含有一个以上的其他字段组成;我理解为:表中的一个字段既是主键又是其他表中某个字段的外键关联。

4.一般主键的字段的长度和数目越少越好。

下面是网友的分析:

主从表关系

1.从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。

2.主表可用于存储主要信息,从表用来存储客户扩展信息。

示例:

只能说这两张表通过主外键相关联,比如学生和教师两张表,

教师的主键可以放到学生这张表中作为外键,

但学生这张表的信息并不是教师表的信息的扩展信息。

只是用来说明该学生的教师的编号是多少,

进而从教师这张表可以查到与之对应的教师姓名。

主外键和主从表从目前看来是没有必然联系的,

只能说主从表必然有主外键,而有主外键的两张表不一定为主从表。

外键约束的要求

1 父表和子表必须使用相同的的存储引擎,而且禁止使用临时表。

子表指的是有外键的表。

父表是子表参照的表。

2 数据表的存储引擎只能为INNODB.

3 外键列和参照列必须具有相似的数据类型。数字的长度或是否有符号位必须相同,而字符的长度则可以不同。

外键列是增加过for in关键词的那列。

参照列是外键列参照的列。

4 外键列和参照列必须创建索引。如果外键列不存在索引的话,MYSQL将自动创建索引。

注意,是外建列而不是参照列。MySQL是不可能为参照列自动创建索引的。

添加键的语法

添加主键约束 alter table 表名 add constraint 主键名 primary key 表名(主键字段名)

添加外键约束 alter table 表名 add constraint 外建名 foreign key (外键字段名)references 关联表名 (关联字段名)

联合主键的写法:

primary key (字段1,字段2,……)

备注:在添加主键时,(主键字段名)这个主键字段名也可以写多个(字段1,字段2,……)。这就算是添加联合主键的方法吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。