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更难优化

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字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间
修饰符
可以理解字段的变量
- 所有类型:
类型
说明
- 数值型
类型
说明
自动递增,适用于整数类型
无符号
一个主键可以针对一张表多个字段
表操作
查看所有的引擎
查看表
查看表结构
删除表
查看表状态
查看库中所有表状态
删除表
修改表
表和字段尽量用英文,对中文支持不太友好
查看表上的索引
示例
DML语句
DML: INSERT, DELETE, UPDATE
INSERT:一次插入一行或多行数据
UPDATE 更新、更改数据注意:一定要有限制条件,否则将修改所有行的指定字段
限制条件:
WHERE
LIMIT
DELETE
DQL语句
SELECT 查询 用法很复杂
别名中的as 可省略
表也可以加别名;多表一般加别名
示例
多表操作
一般3张就可以,超过或包含4张表,说明设置有问题

竖着合并,或者横着合并
竖着合并,两张表的字段数一样,或者选两个字段,数据类型相符合,顺序
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 查询顺序

表(from) > 条件(where) > 分组(group by) > 过滤(having) > 排序(order by) > 字段(\*) > 记录(limit)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...
keepalived