Mariadb/MySQL数据库单表查询基本操作及DML语句
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一数据库及表相关概述
1>.数据库操作
创建数据库: CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME'; CHARACTER SET 'character set name’COLLATE 'collate name' 修改数据库: ALTER DATABASE DB_NAME character set utf8; 删除数据库 DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME'; 查看支持所有字符集: SHOW CHARACTER SET; 查看支持所有排序规则: SHOW COLLATION; 获取命令使用帮助: HELP KEYWORD; 查看数据库列表: SHOW DATABASES;
2>.创建表
创建表:CREATE TABLE (1) 直接创建 CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修饰符, col2 type2 修饰符, ...) (2) 通过查询现存表创建;新表会被直接插入查询而来的数据 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [partition_options] select_statement (3) 通过复制现存的表的表结构创建,但不复制数据 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) } 注意: Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎,同一库中不同表可以使用不同的存储引擎 同一个库中表建议要使用同一种存储引擎类型 字段信息 col type1 PRIMARY KEY(col1,...) INDEX(col1, ...) UNIQUE KEY(col1, ...) 表选项: ENGINE [=] engine_name SHOW ENGINES;查看支持的engine类型 ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} 获取帮助:
mysql> HELP CREATE TABLE;
3>.表操作
表: 二维关系 设计表: 遵循规范 定义:字段,索引 字段:字段名,字段数据类型,修饰符 约束,索引:应该创建在经常用作查询条件的字段上 查看所有的引擎: SHOW ENGINES 查看表: SHOW TABLES [FROM db_name] 查看表结构: DESC [db_name.]tb_name SHOW COLUMNS FROM [db_name.]tb_name 删除表: DROP TABLE [IF EXISTS] tb_name ALTER TABLE 'tbl_name' 字段: 添加字段:add ADD col1 data_type [FIRST|AFTER col_name] 删除字段:drop 修改字段: alter(默认值), change(字段名), modify(字段属性) 索引: 添加索引:add index 删除索引:drop index 表选项 修改: 查看表上的索引: SHOW INDEXES FROM [db_name.]tbl_name; 查看帮助: Help ALTER TABLE
查看表创建命令: SHOW CREATE TABLE tbl_name 查看表状态: SHOW TABLE STATUS LIKE 'tbl_name’ 查看库中所有表状态: SHOW TABLE STATUS FROM db_name
二.数据类型
数据类型: 数据长什么样 数据需要多少空间来存放
系统内置数据类型和用户定义数据类型
MySql支持多种列类型: 数值类型 日期/时间类型 字符串(字符)类型 更多数据类型说明参考:https://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) int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1)和Int(20)是相同的 bigint(m) 8个字节 范围(+-9.22*10的18次方) 加了unsigned(最高位不为符号位),则最大值翻倍, 如:tinyint unsigned的取值范围为(0~255)
2>.布尔型
BOOL,BOOLEAN:布尔型,
是TINYINT(1)的同义词。zero值被视为假,非zero值视为真
3>.浮点型(float和double),近似值
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位 double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
4>.定点数
在数据库中存放的是精确值,存为十进制
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代替decimal
5>.字符串
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字节 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
6>.内建类型
ENUM枚举, SET集合
7>.二进制数据:BLOB
BLOB和text存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写
BLOB存储的数据只能整体读出
TEXT可以指定字符集,BLOB不用指定字符集
8>.日期时间类型
date
日期 '2008-12-2'
time
时间 '12:25:36'
datetime
日期时间 '2008-12-2 22:06:44'
timestamp
自动存储记录修改时间
YEAR(2), YEAR(4):
年份
timestamp
字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间
9>.修饰符
所有类型:
NULL
数据列可包含NULL值
NOT NULL
数据列不允许包含NULL值
DEFAULT
默认值
PRIMARY KEY
主键
UNIQUE KEY
唯一键
CHARACTER SET name
指定一个字符集
数值型
AUTO_INCREMENT
自动递增,适用于整数类型
UNSIGNED
无符号
三.增
MariaDB [(none)]> help CREATE #查看CREATE命令的帮助信息 Many help items for your request exist. To make a more specific request, please type 'help <item>', where <item> is one of the following topics: CREATE DATABASE CREATE EVENT CREATE FUNCTION CREATE FUNCTION UDF CREATE INDEX CREATE PROCEDURE CREATE SERVER CREATE TABLE CREATE TABLESPACE CREATE TRIGGER CREATE USER CREATE VIEW SHOW SHOW CREATE DATABASE SHOW CREATE EVENT SHOW CREATE FUNCTION SHOW CREATE PROCEDURE SHOW CREATE TABLE SPATIAL MariaDB [(none)]> MariaDB [(none)]>