数据库与数据表的创建、修改、删除
创建数据库:
Create database 数据库名
删除数据库:
drop database 数据库名
修改字符集为utf8并指定校对集(mysql默认字符集为latin1):
Alter databases 数据库名 default character set utf8 collate uf8_general_ci
查看mysql支持的字符集:
Show character set
查看mysql支持的校对集:
Show collation set
查看数据库:
show databases
使用数据库:
use 数据库名
创建数据表并指定数据表的字符集:
create table 表名(内容)ENGINE=INNODB DEFAULT CHARSET='utf8‘
删除数据表:
Drop table 表名
Mysql支持的数据类型:
整形:tinyint(1字节,-128-127)、smalint(2字节,-215-215-1)、mediumint(3字节,-223-223-1)、int(4字节,-231-231-1)、bigint(8字节,-9.22*1018-9.22*1018-1)
浮点型:float(m,d):4字节,单精度浮点型,m个总数,d个小数位
Double(m,d):8字节,双精度浮点型,m个总数,d个小数位
Decimal(m,d):decimal是存储为字符串的浮点数
字符串类型:
char(n):固定长度字符串,最大为255个字符 效率高
Varchar(n):可变长度字符串,最大为65535个字符 节约空间
时间和日期:
Date:3字节,日期,yyyy-mm-dd
Time:3字节,时间,hh-mm-ss
Datetime:8字节,日期时间,yyyy-mm-dd-hh-mm-ss
其他类型:
Enum数据类型、set类型
当数据表中的属性定义为这两种类型时,代表只能从指定的集合中取值,最多允许65535个成员值
它们之间的区别是:enum类型只能取一个值,set类型可以取多个值,最多允许64个成员值
数据表约束:
主键约束:primary key
主键约束:通过数据表中的一个或多个属性能够标识表中的唯一一行记录,这一个或多个属性称为该表的主键
外键约束:foreign key
外键约束:建立和强调两个表之间的关联,确保数据的完整性和一致性
例如:A表中的属性是另外一个B表中能够唯一确定一行记录的键,这个属性就称为A表的外键,其中B表被称为主表或外表,A表称为从表
唯一约束:unique
唯一约束:确保不是主键的属性不会出现重复数据
定义唯一约束时,也会自动创建唯一索引
非空约束:not null 空值约束:null
非空约束:确保属性列中的数据不能为空,如果没有明确指定非空约束,则默认允许为空
空值约束刚好相反
默认值约束:default
默认值约束:即向表中插入数据时,如果用户没有明确给出属性的值,数据库会自动为该属性添加默认值
自动加一:auto-increment
AUTO_INCREMENT:当属性列定义为AUTO_INCREMENT时,能够为新插入的行赋值为上一次插入的值+1
修改数据库:alter
修改数据库字符集:
Alter database 数据库名 default character set 字符集(utf8) collate 校对集(utf8_general_ci)
新增属性:
Alter table 表名 add 属性名 数据类型(约束)
修改属性数据类型(约束):
Alter table 表名 modify 属性 数据类型(约束)
修改属性名称:
alter table 表名 change 旧属性 新属性 数据类型(约束)
删除属性:
Alter table 表名 drop 属性名
新增属性约束:
alter table 表名 add constrint 约束别名 约束
删除属性约束:
alter table 表名 drop 约束
修改表名:
Alter table 表名 rename to 新表名
插入数据:insert into(当使用INSERT语句向表中插入数据时,如果不指定具体属性,则表示向所有属性中插入数据)
Insert into 表名(属性1,属性2….) values(值1,值2…)
数据更新:Update
Update 表名 set 属性1=新值1,属性2=新值2,….[where 条件子句]
数据删除:delete
Delete from 表名 [where 条件子句]
数据查询语言:select
基本语法:select 属性1,属性2 from 表名(*代表所有属性)
限定查询:
使用where条件子句、having条件子句
MySQL中常用的运算符有几类:数学运算符、比较运算符、逻辑运算符
普通比较运算符:等于=、大于等于>=、小于等于<=、小于<、大于>、不等于!=或<>
特殊比较运算符:
Between … and … :(在两值之间,包含边界值)
In(list):匹配列出的值
Like:匹配一个字符模式
Is null:匹配空值
逻辑运算符:与:and或择&&(条件均为真返回结果为真)
或:or(条件至少有一个满足返回结果为真)
非:not或!(条件为假返回结果为真)
运算符优先级:
数学运算符>比较运算符>逻辑运算符
去除重复:distinct
设置别名:as(可省略)
排序:order by (可指定多个属性排序,按照指定先后顺序排,默认为升序)
Order by 属性 asc:按照升序排列
order by 属性 desc :按照降序排列
分组:group by(也可指定多个属性进行分组)
函数:
计数函数:count():统计某个属性对应的记录数
平均值函数:avg():统计某个属性的平均值
求和函数:sum():统计某个函数的总和
最大值函数:max():统计某个属性的最大值
最小值函数:min():统计出某个属性的最小值
列值拼接函数:group_concat():将表中某个属性的所有值拼接成一个结果,值与值之间默认用逗号分隔,也可以使用separator关键字指定分隔符
限定结果:limit
使用limit子句可以限定返回查询的结果条数
LIMIT子句后面可以有一个参数,也可以有两个参数
如果有一个参数,该参数表示从表开始位置查询对应的记录数量
如果有两个参数,那么第一个参数表示起始位置与第一行的偏移量,第二个参数表示查询的数量
多表查询:
等值连接:在进行内连接查询时,使用比较运算符‘=’作为匹配条件
外连接:进行多表查询时,分为主、从表,在结果集中保留主表中的所有记录以及从表中满足匹配条件的记录,分为左连接和右连接
左外连接:在连接查询过程中,以左表为主表,在结果集中保留左表中的全部记录及右表中满足匹配条件的记录
右外连接:在连接查询过程中,以右表为主表,在结果集中保留右表中的全部记录及左表中满足匹配条件的记录
子查询:
单行子查询:子查询语句只返回一行一列
单行比较运算符:=、> 、< 、<= 、>= 、!=
例:查询上级领导编号是董事长编号的员工姓名
SELECT ename FROM hzdl_emp WHERE mgr = (SELECT empno FROM hzdl_emp WHERE ename='董事长');
多行子查询:即子查询语句返回多行一列
多行比较运算符:IN(等于列表中的任何值) 、ANY(只能有一个值满足就返回true)、ALL(每一个都要满足才返回true)
例:查询工作地点为成都的员工姓名,主要满足多行子查询的行,全部展示
SELECT ename FROM hzdl_emp WHERE deptno IN (SELECT deptno FROM hzdl_dept WHERE loc='成都’);
多列子查询:子查询语句返回多行多列
多列比较运算符:IN
例:查询入职日期大于2016-6-1的所有员工姓名
SELECT ename FROM hzdl_emp WHERE (deptno,hiredate) IN (SELECT deptno,hiredate FROM hzdl_emp WHERE hiredate>‘2016-6-1’);
合并结果集:使用union语句可以将多个SELECT语句的结果合并并消除表中任何重复行(如果不消除重复行,要使用UNION ALL),在合并时SELECT语句中使用ORDER BY、LIMIT子句,需要使用括号将SELECT语句括起来
使用UNION进行合并时要求:
1、多个SELECT语句中的列名(别名)可以不一样, UNION结果集中的列名是等于第一个SELECT语句中的列名
2、多个SELECT语句必须拥有相同数量的列
3、多个SELECT语句列必须拥有相似的数据类型
4、多个SELECT语句列的顺序必须相同
例:SELECT empno FROM hzdl_emp WHERE deptno=3
UNION
SELECT empno FROM hzdl_emp WHERE deptno=4;
数据库用户:
创建用户:
Create user 用户名@用户地址 identified by(用户密码:口令)”123456”
删除用户:
Drop user 用户名@用户地址
修改密码:
update user set passwd=passwd(‘123456’) where user=“用户名”
立即生效指令、刷新权限指令:flush privileges
授权:grant
查看当前用户权限:
Show grants
查看指定用户权限:
Show grants for 用户名@用户地址
取消授权:revoke
语法:REVOKE 权限 ON 数据库对象 FROM 用户名@用户地址
索引:index
创建索引:CREATE INDEX 索引名称 ON 表名(属性名称)
在使用ALTER语句更新数据表时,新增索引
例子:ALTER TABLE test ADD INDEX index_test(id);
视图:view(类似于硬链接)
创建视图:CREATE VIEW 视图名称 AS SELECT语句
可以使用ALTER或者CREATE OR REPLACE语句更新视图
语法: ALTER VIEW 视图名称 AS SELECT语句
函数:
查看函数功能是否开启:
SHOW VARIABLES LIKE '%func%';
创建函数:
CREATE FUNCTION 函数名称(参数1 数据类型,参数2 数据类型,…..)
RETURNS 返回值类型
函数体
函数体可以是一条SQL语句,也可以是多条SQL语句
函数体以BEGIN开始,END结束
函数定义完成后,使用SELECT语句调用:
自定义函数的函数体不能被修改,当函数不再被使用时,使用DROP语句删除
语法:drop function 函数名称
存储过程:
存储过程是一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中,用户可以通过存储过程的名称来调用并执行它
创建存储过程:
语法:CREATE PROCEDURE 存储过程名称(参数列表) in代表输入 、out代表输出、inout既可以代表输入也可以代表输出
程序体
存储过程的程序体以BEGIN开始,END结束,可以包含一组语句集
存储过程创建完成后,使用CALL来调用存储过程
最后在用select 查询
存储过程的程序体也不能被修改,当存储过程不再被使用时,使用DROP语句删除
Drop procedure 存储过程名称
函数、存储过程的区别:
函数中不能包含返回结果集的语句,例如SELECT,而存储过程可以
函数必须定义返回值且只能返回一个值,存储过程可以有返回值,也可以没有返回值,还可以返回多个值
函数可以作为SQL语句的一部分来调用,存储过程作为独立的部分来执行,不能用于SQL语句中
函数、存储过程的相同点:
函数和存储过程都需要主动调用执行
控制流语句:
定义变量:declare
语法:DECLARE 变量名 变量类型 DEFAULT 默认值
变量赋值:
给BEGIN…END程序体中的变量赋值有两种方法
语法:SET 变量名=值;
语法:SELECT 属性 INTO 变量名 FROM 表名;
第二种是我们在存储过程中给输出参数赋值的方法
例子:
SET abc=10;
IF语句:
IF语句主要用于条件判定,根据条件成立与否,后续执行不同的命令
语法:IF 条件 THEN …
ELSEIF 条件 THEN …
ELSE …
END IF
CASE语句:
CASE语句为多分枝语句结果,从WHEN后面查找与CASE后的变量相等的值,如果找到,执行该分支语句,否则执行ELSE语句
语法:CASE 变量
WHEN 值1 THEN …
WHEN 值2 THEN …
ELSE …
END CASE
WHILE语句:
WHILE循环语句,判断条件成立与否,如果成立则循环执行程序体
语法:WHILE 条件 DO
END WHILE
脑子不够用当然只能脚踏实地的做事情!