MYSQL

MySQL数据库:

MYSQL数据库也是关系型数据库。使用的标准SQL语言格式,所以MYSQL和ORACLE数据库的操作大同小异,简单来总结下:

MySQL 特点:

MySQL 是开源的,所以你不需要支付额外的费用。
MySQL 支持大型系统的数据库。可以处理拥有上千万条记录的大型数据库。
MySQL 使用标准的 SQL 数据语言形式。
MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
MySQL 存储数据量较大,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB。
MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
MySQL跟ORACLE差不多,官方都提供的命令行窗口,当然也可以使用第三方的可视化工具(Navicat Premium)进行连接操作。本次总结主要针对对命令行操作进行;

连接操作数据库:

创建于/查询/删除/选择数据库

查看数据库:show databases;

查看数据库编码等信息:select * from information_schema.schemata


创建数据库: create database 数据库名 default character set 编码集;

default character set 编码集:可以不用写,数据库会使用默认系统的编码集进行创建;

删除 数据库.  drop database   数据库名;

选择数据库 use 数据库名

MySQL 中的数据类型

数值类型

MySQL 支持所有标准 SQL 数值数据类型。

数值类型中的长度 m 是指显示长度,并不表示存储长度,只有字段指定 zerofill 时有用

例如:int(3),如果实际值是 2,如果列指定了 zerofill,查询结果就是 002,左边用 0 来 填充

浮点型


字符串型

char 和 varchar

1)char(n) 若存入字符数小于 n,则以空格补于其后,查询之时再将空格去掉。所以 char类型存储的字符串末尾不能有空格,varchar 不限于此。
2)char 类型的字符串检索速度要比 varchar 类型的快。

varchar 和 text

1)varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字 节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节
2)text 类型不能有默认值
3)varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快 于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

日期类型

二进制数据(BLOB)

1)BLOB 和 TEXT 存储方式不同,TEXT 以文本方式存储,英文存储区分大小写,而 Blob是以二进制方式存储,不分大小写。
2)BLOB 存储的数据只能整体读出。
3)TEXT 可以指定字符集,BLOB 不用指定字符集。

查看/创建/修改/删除表

创建表:create table 表名(

列名1  数据类型,

……………………

)

删除表:drop table 表名

查看表:show tables

修改表名: alter table 旧表名 rename 新表名

为表添加列:alter table 表名 add column 列名 数据类型 

修改列名:alter table 表名 change column 就列名 新列名 数据类型

删除列:alter table 表名 drop column 列名

MySQL 中的约束

• 非空约束(not null)
• 唯一性约束(unique)
• 主键约束(primary key) PK
• 外键约束(foreign key) FK

需要注意的是   • 检查约束(目前 MySQL 不支持、Oracle 支持)

MYSQL中的自动增长(auto_increment)

• 一个表中只能有一个列为自动增长。
• 自动增长的列的类型必须是整数类型。
• 自动增长只能添加到具备主键约束与唯一性约束的列上。
• 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后在删除约束。

默认值处理 

在 MySQL 中可以使用 DEFAULT 为字段设定一个默认值。

如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中。

语法:create table 表名( 列名 数据类型 default  默认值);

查询/添加/删除约束

创建表时可以直接添加约束,或者后续再进行添加;

创建表添加约束:

create table 表名(

列名  数据类型 primary key auto_increment,                    主键,并且自增

列名  数据类型 unique,                                                      唯一约束

列名   数据类型 not null ,                                                      非空约束

外键列  数据类型,

constraint 外键名foreign key(外键列名) references 外部表名(外部列名)              外键约束

添加主键:alter table 表名 add primary key (列名)

删除主键:alter table 表名 drop primary key

添加非空约束:alter table 表名 modify 列名 数据类型 not null;

删除非空约束:alter table 表名 modify 列名 数据类型 null;

添加唯一约束:alter table 表名 add constraint 约束名 unique(列名);

约束名也可以不起,数据会自动生成

查询存在的约束:show keys from 表名


删除约束唯一约束 alter table 表名 drop key 约束名

删除外键:alter table 表名 drop key 外键名

添加外键:

alter table 表名 add constraint 约束名 foreign key(列名) references  参照的表名(参照的列名)

MySQL 中的 DML 操作:新增/修改/删除数据

选择插入数据:insert into 表名(列名1,列名2……)values(值1,值2……)

如果要插入默认值得话,使用default关键字作为值即可

如果主键是自增长的话,可以不用写主键列名和主键的值,数据会自动添加数值;

完全插入数据:insert into 表名 values(值1,值2……)

此时有多少列,就要插入多少值,插入值得顺序按照列得顺序进行填写

一次性插入多少条数据

完全插入数据:insert into 表名 values(值1-1,值1-2……),(值2-1,值2-2……)………………

修改数据:update 表名 set 列名1=值1,列名2=值2.. [where 子语句]

如果没有where子语句则修改所有的记录

删除数据: delete from 表名 [where 子语句]

如果没有where子语句,将删除所有数据;

使用 TRUNCATE 清空表:语法:TRUNCATE TABLE 表名

DELETE 与 TRUNCATE 区别
• truncate 是整体删除(速度较快), delete 是逐条删除(速度较慢);
• truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete 高的原因;
• truncate 是会重置自增值,相当于自增列会被置为初始值,又重新从 1 开始记录,而不是接着原来的值。而 delete 删除以后,自增值仍然会继续累加。

MySQL 中的事务处理

在 MySQL 中,默认情况下,事务是自动提交的,也就是说,只要执行一条 DML 语句 就开启了事物,并且提交了事务;

如果需要关闭 MySQL 的事务自动提交可以使用:start transaction 关键字。待使用DML语句操作完成后,可以使用commit关键提交事务,或者rollback滚回事务;

MySQL 的基本查询

查询语法:select * |投影列 from 表名  [where子语句]

SELECT 语句中的算术表达式

+ :加法运算
- :减法运算
* :乘法运算
/ :除法运算,返回商
% :求余运算,返回余数

需要注意的是,如果运算的数据中,有空,则返回结果也为空

MySQL 中的列别名

select 列名 as 列别名 from 表名 [where子语句]

as关键字可有可无

MySQL 连字符

MySQL 中并不支持||作为连字符,需要使用 concat 函数。在参数数量上与 oracle 的 concat函数有区别。

需要注意的是,如果连接的数据中有空值,则返回结果也是空


MySQL 中去除重复

语法:select distinct 列名 from 表名 

MySQL 中的比较条件/比较运算符

• 等于=
• 大于>
• 大于等于>=
• 小于<
• 小于等于<=
• 不等于!=或<>

逻辑运算符

• and 表示且             • or 表示或              • not  表示不是

使用 ORDER BY 排序

• 用 ORDER BY 子句排序          • ASC: 升序排序,默认           • DESC: 降序排序

MySQL 中常见的单行函数

大小写控制函数

LOWER(str) 转换大小写混合的字符串为小写字符串

UPPER(str) 转换大小写混合的字符串为大写字符串。

字符处理

CONCAT(str1,str2,...) 将 str1、str2 等字符串连接起来

SUBSTR(str,pos,len) 从 str 的第 pos 位(范围:1~str.length)开始,截取长度为 len的字符串

LENGTH(str) 获取 str 的长度INSTR(str,substr) 获取 substr 在 str 中的位置

LPAD(str,len,padstr)/RPAD(str,len,padstr)从字符串左边或者右边插入字符,

len为字符串的总长度


TRIM(str)、LTRIM(str)、RTRIM(str) 去除字符串左右的空格,或者左边空格,后者右边空格。

不能去除字符串中间的空格

REPLACE(str,from_str,to_str) 将 str 中的 from_str 替换为 to_str(会替换掉所有符合from_str 的字符串)

数字函数

ROUND(arg1,arg2):四舍五入,并指定小数的位数。

ROUND(arg1):四舍五入保留整数。

TRUNCATE(arg1,arg2):截断指定小数的值,不做四舍五入处理。

MOD(arg1,arg2):取余。

日期函数

SYSDATE() 或者 NOW() 返回当前系统时间,格式为 YYYY-MM-DD hh-mm-ss 

CURDATE() 返回系统当前日期,不返回时间

CURTIME() 返回当前系统中的时间,不返回日期

DAYOFMONTH(date) 计算日期 d 是本月的第几天

DAYOFWEEK(date) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推

DAYOFYEAR(date) 返回指定年份的天数

DAYNAME(date)返回 date 日期是星期几

LAST_DAY(date)返回 date 日期当月的最后一天

转换函数

DATE_FORMAT(date,format) 将日期转换成字符串(类似 oracle 中的 to_char())

STR_TO_DATE(str,format) 将字符串转换成日期(类似 oracle 中的 to_date())

通用函数

IFNULL(expr1,expr2)判断 expr1 是否为 null,如果为 null,则用 expr2 来代替 null

(类似 oracle 的 NVL()函数)

NULLIF(expr1,expr2) 判断 expr1 和 expr2 是否相等,如果相等则返回 null,如果不相等则返回 expr1

IF(expr1,expr2,expr3) 判断 expr1 是否为真(是否不为 null),如果为真,则使用 expr2替代 expr1;如果为假,则使用 expr3 替代 expr1(类似 oracle 的 NVL2()函数)

COALESCE(value,...) 判断 value 的值是否为 null,如果不为 null,则返回 value;如 果为 null,则判断下一个 value 是否为 null......直至出现不为 null 的 value 并返回或者返回最后一个为 null 的 value

多表连接查询

等值连接

-- 查询员工编号,姓名,薪水和部门名称

select eid,ename,sal,dname from emp,dept where emp.did=dept.did

非等值连接

-- 查询所有雇员的名称,薪水及对应薪水级别。

select ename,sal,level from emp, sal_level where sal between lowest_sal and highest_sal;

自连接

-- 查询每个有上级经理的雇员的经理的名字以及雇员的名字。

select e1.ename 员工姓名 , e2.ename 经理名称 from emp e1,emp e2 where e1.manager_id=e2.eid

外连接接(左外连接,右外连接,全外连接(MySQL不支持 full join),交叉连接)

-- 左外连接: left join 以left join左侧的表为主,左侧表的数据全部展现,右侧表只展现与左侧表相关联的数据。

右外连接: right join 以right join右侧的表为主,右侧表的数据全部展现,左侧表只展现与右侧表相关联的数据。

全外连接: full join 两种关联的表所有数据都进行展现 

select eid,ename,sal,dname from emp full join dept on(emp.did=dept.did)

mysql不支持(Oracle支持)

但是mysql中可以使用UNION:可以将两个查询结果集合并,返回的行都是唯一的,如同对整个结果集合使用了 DISTINCT。相当于Oracle中的全外连接

UNION ALL:只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据, 那么返回的结果集就会包含重复的数据了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:烨竹 数据库的基本操作 登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 ...
    DragonRat阅读 5,176评论 0 7
  • 数据库概念 定义1 数据库(database)是按照数据结构来组织、存储、管理数据的建立在计算机存储设备上的仓库 ...
    好好秦先生阅读 4,855评论 0 3
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 5,678评论 0 8
  • 1.数据库的三范式 第一范式:是指原子性,属性不可分割,即表中的字段不可分割。所谓不可分割就是最小单位,不能再被拆...
    人间六月_阅读 2,755评论 0 0
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 9,464评论 0 19