MYSQL

目录

SQL语句书写规范

数据库的操作

创建数据表

字段类型

完整性约束条件

主键

自增长

外键

非空 

默认值

唯一性

存储引擎

修改表结构的操作

表重命名

添加字段

删除字段

修改字段

修改字段名称

添加默认值

删除默认值

添加主键

删除主键

添加和删除唯一

修改表的存储引擎

设置自增长的值

删除表

数据操作

插入数据

更新和删除记录

查询数据

运算符

算数运算符

比较运算符

逻辑运算符

运算符优先级

函数

数学函数

字符串函数

日期时间函数

条件函数

系统函数

加密函数

其他函数

索引

创建索引

删除索引


cmd-->mysql -uroot -p 输入密码进入mysql

SQL语句书写规范

1.关键字和函数名称全部大写,数据库、表和字段名称全部小写

2.语句必须以分隔符分开,分号或者\t,也可以修改

3.支持分行书写,只要不把单词、标记和引号分开,都可以在下一行继续写

4.数据库和表的名称不要使用MYSQL保留字,如必须使用,用''括起来

数据库的操作

CREATE DATABASE 创建数据库 或者CREATE SCHEMA IF NOT EXISTS+库名称

CREATE TABLE IF NOT EXISTS+表名称

SHOW WARNINGS 查看上一步产生的警告

SHOW DATABASES或者SCHEMAS 查看生成的数据库

SHOW TABLES 查看库中的表

查看数据库的编码方式以及修改数据库的编码方式

USE +数据库名 打开数据库

SELECT DATABASE() 显示当前打开的数据库名称

DROP DATABASE +数据库名称 删除数据库

DESC+表名称 查看表结构

SELECT *FROM+表名称 查看表内容

创建数据表

CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型[完整性约束条件(UNSIGNED表示数据不带符号|ZEROFILL用0补齐位数)] [NOT NULL] [DEFAULT默认值] [PRIMARY KEY] [UNIQUE KEY] [AUTO_INCREMENT]) ENGINE=引擎名称(默认INNODB) CHARSET=编码方式(默认UTF8) 

字段类型

整数、字符串、浮点数、日期时间类型、二进制型

没有布尔型,用TINYINT(1)表示,0为假,非0为真

完整性约束条件

主键

主键字段自动非空,不能重复

主键有单一主键,直接在字段类型后面加PRIMARY KEY 也可以直接写KEY

复合主键(多字段主键),另起一行PRIMARY KEY(id,name),复合主键可以有一个字段重复,不能两个字段同时重复

自增长

AUTO_INCREMENT 自增长的一定是主键,主键不一定是自增长,在KEY后面写AUTO_INCREMENT

外键

非空 

NOT NULL

默认值

DEFAULT

唯一性

UNIIQUE或者UNIQUE KEY

表示字段内容必须唯一,但是NULL不算不唯一

存储引擎

表的类型,可以根据不同存储方式和是否事务处理来进行选择

MyISAM 查询写入速度快

InnoDB 较高的事务处理

MEMORY 需要用临时表

修改表结构的操作

表重命名

ALTER TABLE 表名称 RENAME TO/AS/不写AS或者TO 新表名

RENAME TABLE 表名称 TO 新表名

两种写法都可

添加字段

ALTER TABLE tbl_name ADD 字段名称 字段类型[完整性约束条件] 字段位置(FIRST/AFTER+字段名称)

一次性添加多个字段

ALTER TABLE 表名称

ADD 字段名称1 字段名称 字段类型[完整性约束条件] 字段位置,

ADD 字段名称2...,

ADD 字段名称3...;

删除字段

ALTER TABLE tbl_name DROP 字段名称

ALTER TABLE tbl_name

DROP 字段名称1,

DROP 字段名称2,

DROP 字段名称3;

也可以删除和添加结合起来

修改字段

ALTER TABLE tbl_name MODIFY 字段名称 字段类型[完整性约束条件] [FIRST/AFTER 字段名称]

修改字段名称

ALTER TABLE 字段名称 CHANGE 字段名称 新字段名称 字段类型[完整性约束条件] [FIRST/AFTER 字段名称]

添加默认值

ALTER TABLE 表名称 ALTER age SET DEFAULT 18 给age字段添加默认值18

删除默认值

ALTER TABLE 表名称 ALTER age DROP DEFAULT

添加主键

ALTER TABLE tbl_name ADD [CONSTRAINT[symbol] PRIMARY KEY[index_type](字段名称,...)

删除主键

ALTER TABLE tbl_name DROP PRIMARY KEY

如果一个字段有主键和自增长两个属性,应该先去掉自增长属性,才能去除主键属性

添加和删除唯一

ALTER TABLE tbl_name ADD [CONSTRAINT[symbol] UNIQUE [INDEX|KEY][索引名称](字段名称,...)

如果没有指定,会默认把字段名称作为索引名称

ALTER TABLE tbl_name DROP [INDEX|KEY][索引名称] 

修改表的存储引擎

ALTER TABLE tbl_name ENGINE=存储引擎名称

设置自增长的值

ALTER TABLE tbl_name AUTO_INCREMENT=值

删除表

DROP TABLE [IF EXISTS] tbl_name[,tbl_name...] 可以删除多个表

数据操作

插入数据

不指定具体字段

INSERT [INTO] tbl_name VALUES|VALUE(值...)

指定字段

INSERT [INTO] tbl_name(字段名称1,...) VALUES|VALUE(值1,...)

插入多条记录

INSERT tbl_name [(字段名称...)] VALUES(值...)(值...)

通过SET插入

INSERT tbl_name SET 字段名称=值,...

将查询结果插入表中

INSERT tbl_name[(字段名称)] SELECT 字段名称 FROM tbl_name [WHERE 条件]  注意复制过来的字段要一致

更新和删除记录

UPDATE tbl_name SET 字段名称=值,... [WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]

DELETE FROM tbl_name [WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]

彻底清空数据表 TRUNCATE [TABLE] tbl_name

查询数据

  • 单表查询

SELECT 指定字段或者*  FROM 表名 (星号表示所有字段)

也可以 SELECT 表名称.指定字段或者*  FROM 库名称.表名 

  • 给表名起别名

SELECT 指定字段或者*  FROM 表名 [AS] a

  • 给字段起别名

SELECT 指定字段或者* AS '编号' FROM 表名

  • 带条件的查询

SELECT 指定字段或者*  FROM 表名 WHERE 条件

!= 或者 <>都是不等于

注意,检测是否为NULL不能用=,要用<=> <=>用法比=多一个NULL

IS NULL 也可以检测NULL值

IS NOT NULL 检测不为空值

  • 范围查询

SELECT 指定字段或者*  FROM 表名 WHERE id NOT BETWEEN 3 AND 10

id不在3-10之间的

SELECT 指定字段或者*  FROM 表名 WHERE id IN(1,3,5,7,9)

id是1,3,5,7,9

NOT IN 相反

  • 模糊查询

%:代表0个1个或者多个任意字符

_:代表1个任意字符

SELECT 指定字段或者*  FROM 表名 WHERE 字段名 LIKE ' '

不区分大小写

NOT LIKE 不包含某个内容

  • 分组查询

SELECT 指定字段或者*  FROM 表名 WHERE 条件 GROUP BY 字段名   会显示字段中每个值的第一条记录

也可以不写字段名,写1/2/3/4... 第一个字段是1,第二个字段是2,以此类推

如果按多个字段来分,先按第一个字段分,再按后面的字段分

  • 分组详情

查询id,sex,以及username的详情,按照性别分组

SELECT id,sex,GROUP_CONCAT(username)  FROM 表名 GROUP BY sex

如果是想得到多个字段的详情,可以写多个GROUP_CONCAT

  • 聚合函数

查询编号,性别,用户名的详情,并且把用户名改为别名users,按照性别分组,统计各分组的总人数

SELECT id,sex,GROUP_CONCAT(username) AS users,COUNT(*) AS totalUsers  FROM 表名 GROUP BY sex

统计总数

SELECT COUNT(*) FROM 表名  COUNT不统计NULL

SELECT COUNT(DISTINCT id) FROM 表名 去掉id重复的记录

MAX() MIN() AVG() SUM() 

GROUP BY 字段名 之后可以加WITH ROLLUP 会在表格最后增加一行,在求和字段会自动求和,最大值字段会自动再求最大值

  • HAVING子句(一般放在GROUP BY后面,进行二次筛选)

GROUP BY sex HAVING COUNT(*)>2 AND MAX(age)>60  筛选每个值都大于2的记录,而且年龄最大值大于60

  • ORDER BY

SELECT *FROM  表名 ORDER BY id DESC(降序)/ASC(升序,默认)

SELECT *FROM  表名 ORDER BY RAND() 乱序排列

  • LIMIT限制查询结果显示条数

SELECT *FROM  表名 LIMIT 3 只显示前三条记录

SELECT *FROM  表名 ORDER BY id DESC LIMIT 5 得到降序的前五条记录

SELECT *FROM  表名 LIMIT 0,5  从0开始,偏移量为5,显示前五条记录

UPDATE 表名 SET age=age+10 LIMIT 3  前三条记录年龄都加3,注意在UPDATE和DELETE FROM里面LIMIT只能写一个参数

  • 连接查询,找到表和表之间的关系,连接起来

SELECT id,username,proName FROM 表名1,表名2 WHERE 表1.proId=表2.id

以上语句可以用内连接表示 

SELECT u.id,u.username,u.email.u.sex,p.proName FROM 表1 AS u INNER JOIN 表2 AS p ON u.proId=p.id

也可以

SELECT u.id,u.username,u.email.u.sex,p.proName FROM 表2 AS p CROSS JOIN 表1 AS u ON u.proId=p.id

INNER/CROSS可以省略

外连接

SELECT u.id,u.username,u.email.u.sex,p.proName FROM 表1 AS u LEFT JOIN 表2 AS p ON u.proId=p.id

把LEFT左边的表1作为主表,主表的信息都显示出来,然后把右表符合条件的数据也显示出来,这是左外连接,

右外连接同理

  • 外键

外键所在字段的表为子表,被参照的表为主表,外键的作用是保持数据一致性和完整性,可以实现一对一和一对多

父表和子表必须都使用InnoDB,外键列和参照列要有相似数据类型,必须创建索引,不创建的话会自动创建索引

父表不能进行更新和删除操作,除非子表中没有相关联的数据

FOREIGN KEY(depId) REFERENCES department(id) 创建外键depId,借鉴父表的id字段

在FOREIGN前面加CONSTRAINT 外键名称  可以给外键起名

子表中不能添加父表没有的外键字段内容

添加内容 INSERT employee(username,depId) VALUES(‘king’,3)

删除外键 ALTER TABLE employee DROP FOREIGN KEY 外键名称

添加外键 ALTER TABLE employee ADD CONSTRAINT 外键名称 FOREIGN KEY(depId) REFERENCES department

FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE 当父表中某一内容删除,对应的外键字段内容也会被删除

ON UPDATE CASCADE 更新父表时,子表相应也会更新

CASCADE 换为SET NULL,删除和更新父表时,相应的子表内容变为NULL

  • 联合查询

查多个表的记录,合并到一起

UNION合并去掉相同记录,UNION ALL 简单合并到一起

SELECT a FROM 表1 UNION SELECT b FROM 表2

  • 子查询

IN和NOT IN

SELECT id,username FROM 表1 WHERE depId IN(SELECT id FROM 表2)

NOT IN取反

使用比较运算符 = > < >= <= <> != <=>

EXISTS和NOT EXISTS 判断真假

使用ANY(也可以用SOME)或者ALL 

=ANY 相当于IN 

!=ALL 相当于NOT IN

INSERT 表1(字段1,字段2...) SELECT 字段1,字段2... FROM 表2

CREATE TABLE 表1(定义字段) SELECT 字段1,字段2... FROM 表2

  • 正则表达式查询

SELECT id,username FROM 表1 WHERE username REGEXP '正则表达式'

运算符

算数运算符

3/0=NULL

1+NULL=NULL

比较运算符

结果只能为真或者假 1 0

逻辑运算符

2&&2=1 2&&0=0 2&&NULL=NULL 1||NULL=1 0||NULL=NULL  !NULL=NULL

运算符优先级

函数

数学函数

字符串函数

日期时间函数

条件函数

系统函数

加密函数

其他函数

索引

创建索引

普通索引

CREATE TABLE 表名称(字段名称 字段类型

INDEX|KEY 索引名称(字段名称))

唯一索引

作为完整性条件创建UNIQUE 也可以UNIQUE KEY uni_card(card)来创建

全文索引

FULLTEXT INDEX

单列索引

多列索引

空间索引

在已经存在的表上创建索引

方式一:CREATE INDEX 索引名称 ON 表名(字段名称)

方式二:ALTER TABLE 表名 ADD INDEX 索引名称(字段名称)

删除索引

DROP INDEX 索引名称 ON 表名

ALTER TABLE 表名 DROP INDEX 索引名称

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值