mariadb sql

SQL语句

关系型数据库的常见组件

  • 数据库:database
  • 表:table 行:row 列:column
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege
  • 存储过程:procedure
  • 存储函数:function
  • 触发器:trigger
  • 事件调度器:event scheduler,任务计划

数据库的组件(对象):

数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
  • 命名规则: \-必须以字母开头 \-可包括数字和三个特殊字符(# \_ $) \-不要使用MySQL的保留字 \-同一database(Schema)下的对象不能同名

SQL语句分类

  • DDL: Data Defination Language 数据定义语言 CREATE,DROP,ALTER
  • DML: Data Manipulation Language 数据操纵语言 INSERT,DELETE,UPDATE
  • DCL:Data Control Language 数据控制语言 GRANT,REVOKE,COMMIT,ROLLBACK
  • DQL:Data Query Language 数据查询语言 SELECT

SQL语句构成

  • SQL语句构成: Keyword组成clause 多条clause组成语句
示例:

数据库操作

创建数据库
查看支持所有字符集
查看支持所有排序规则(一般使用默认即可)
查看数据库默认字符集
关于UTF8与UTF8MB4区别http://ourmysql.com/archives/1402
修改数据字符集
查看数据库列表:
在服务/客户端配置文件中必修改字符集

表:二维关系 设计表:遵循规范 定义:字段,索引 字段:字段名,字段数据类型,修饰符约束 索引:应该创建在经常用作查询条件的字段上 横行 记录 纵列 字段
创建表 1、直接创建 2、通过查询现存的创建,新表会被直接插入查询而来的数据 3、通过复制现存的表的表结构创建,但不复制数据 注意 1、Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎,同一库中不同表可以使用不同的存储引擎 2、同一个库中表建议要使用同一种存储引擎类型

数据类型

数据类型是限定数据的,而修饰符则是限定字段变量的 系统内置数据类型和用户定义数据类型
MySql支持多种列类型
  • 数值类型
  • 日期/时间类型
  • 字符串(字符)类型
  • ttps://dev.mysql.com/doc/refman/5.5/en/data-types.html
选择正确的数据类型对于获得高性能至关重要,三大原则
  • 更小的通常更好,尽量使用可正确存储数据的最小数据类型
  • 简单就好,简单数据类型的操作通常需要更少的CPU周期
  • 尽量避免NULL,包含为NULL的列,对MySQL更难优化
notion image
1、整型
  • tinyint(m) 1个字节 范围(-128~127)
  • smallint(m) 2个字节 范围(-32768~32767)
  • mediumint(m) 3个字节 范围(-8388608~8388607)
  • int(m) 4个字节 范围(-2147483648~2147483647)
  • bigint(m) 8个字节 范围(+-9.22\*10的18次方) 加了unsigned,则最大值翻倍,如:tinyint unsigned的取值范围为(0~255)int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范 围,规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1)和Int(20)是相同的
  • BOOL,BOOLEAN:布尔型,是TINYINT(1)的同义词。zero值被视为假,非zero值视为真
2、浮点型(float和double),近似值
  • float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
  • double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位
  • 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
3、定点数
  • 在数据库中存放的是精确值,存为十进制
  • decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位
  • MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如,decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节
  • 浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用8个字节
  • 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal——例如存储财务数据。但在数据量比较大的时候,可以考 虑使用bigint代替decimaltimestamp字段,当数据发生改变时,会自动更新时间
4、字符串(char,varchar,\_text)
  • char(n) 固定长度,最多255个字符
  • varchar(n) 可变长度,最多65535个字符
  • tinytext 可变长度,最多255个字符
  • text 可变长度,最多65535个字符
  • mediumtext 可变长度,最多2的24次方-1个字符
  • longtext 可变长度,最多2的32次方-1个字符
  • BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
  • VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
  • 内建类型:ENUM枚举, SET集合
char和varchar 1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉,所以char类型存储的字符串末尾不能有空格,varchar不限于此 2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将占用4个字节 3.char类型的字符串检索速度要比varchar类型的快
varchar和text 1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255),text是实际字符数+2个字节。 2.text类型不能有默认值 3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text
5、二进制数据:BLOB BLOB和text存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写 BLOB存储的数据只能整体读出 TEXT可以指定字符集,BLOB不用指定字符集
6、日期时间类型 date 日期 ‘2008-12-2’ time 时间 ‘12:25:36’ datetime 日期时间 ‘2008-12-2 22:06:44’ timestamp 自动存储记录修改时间 YEAR(2), YEAR(4):年份
timestamp字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间
修饰符 可以理解字段的变量
  • 所有类型:
类型
说明
数据列可包含NULL值
数据列不允许包含NULL值
默认值
唯一键
指定一个字符集
  • 数值型
类型
说明
自动递增,适用于整数类型
无符号
一个主键可以针对一张表多个字段

表操作

查看所有的引擎
查看表
查看表结构
删除表
查看表状态
查看库中所有表状态
删除表
修改表 表和字段尽量用英文,对中文支持不太友好
查看表上的索引
示例

DML语句

DML: INSERT, DELETE, UPDATE INSERT:一次插入一行或多行数据
UPDATE 更新、更改数据注意:一定要有限制条件,否则将修改所有行的指定字段 限制条件: WHERE LIMIT
DELETE
DQL语句 SELECT 查询 用法很复杂 别名中的as 可省略 表也可以加别名;多表一般加别名
示例

多表操作

一般3张就可以,超过或包含4张表,说明设置有问题
notion image
竖着合并,或者横着合并 竖着合并,两张表的字段数一样,或者选两个字段,数据类型相符合,顺序 union 纵向合并 select stuid,name from user1 union select tid,name from user2;
如果数据相同,会去重 select \* from user1 union select \* from user2; 也可以单表,自己对自己去重 select \* from user union select \* from user1; 也支持这种写法 select distinct \* from user1;
1、交叉连接 横向合并 cross join
2、内连接 inner josin (两张表交集的部分) 3、外连接 左外连接 (A表加上AB交集的部分)
右外连接 right join (B表加上AB交集的部分)
扩展用法,过滤 左外连接(A表去掉AB交集的部分)
右外连接(B表去掉AB交集的部分)
完全外连接,在mysql没有这个写法(不支持),可以使用左右外连接,还有自动去重功能(AB所有的部分) full outer join 左外(left join)和右外(right josin)在连接起来去重(union)
不用交集的部分(和交叉相反,AB去掉交集的部分) 需要用到子查询功能
子查询 在查询语句嵌套着查询语句,性能较差 基于某语句的查询结果再次进行的查询
自连接(自己和自己边连接)
三张表链接

小结

1、将表的数据单独存放在一个文件中 frm后缀 表定义,字段和类型数据默认存放在ibdtaba1 老版本存放在这个文件中,这样会影响性能和臃肿 新版本的mariabd 10 以上都是一张表数据一个文件
后缀为ibd为一个表存放数据的文件
2、禁止主机解析,建议使用
3、创建、修改、删除 DML 语句
4、可以将sql语句写到一个文件,重定向执行
5、select 查询顺序
notion image
表(from) > 条件(where) > 分组(group by) > 过滤(having) > 排序(order by) > 字段(\*) > 记录(limit)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...