Mysql之二
MySQL的数据类型
SQL接口
- 标准:
- ANSI SQL:SQL-86--------SQL-89--------SQL-99---------SQL-03
- 数据类型
- 字符型:
- CHAR(不区分字母大小写),BINARY(不区分字母大小写):定长数据类型
- VARCHARE(不区分字母大小写),VARBINARY(不区分字母大小写):变长数据类型;需要结束符
- TEXT系列(不区分字符大小写):TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
- BLOB系列:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB
- ENUM(枚举),SET(集合)
- 数值型
- 精确数值型:
- 整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
- 十进制
- 近似数值型:
- 浮点型:FLOAT,DOUBLE
- 时间日期型
- DATE
- TIME
- DATETIME
- YEAR(2),YEAR(4)
- 内建类型
- ENUM
- SET
数据类型详解:
- 字符型:
![](https://images2015.cnblogs.com/blog/973067/201701/973067-20170108130858456-212048111.jpg)
- 字符型修饰符:
- NOT NULL:非空约束
- NULL
- DEFAUL ‘STRING’:默认值
- CHARATER SET ‘UTF8’ :使用的字符集
- COLLATION:使用的排序规则
MariaDB [(none)]> show character set; #查看支持的字符集
MariaDB [(none)]> show collation; #查看支持的字符集
- 整型数据
- 整形数据修饰符
- NOT NULL
- NULL
- AUTO_INCREDENT:
- UNSINED
- PRIMARY KEY | UNIQUE KEY
MariaDB [(none)]> select last_insert_id(); #查看最后一个插入数值的ID
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
栗子:
- 内建类型set和人enum的修饰符
- NULL
- NOT NULL
- DEFAULT
MariaDB [tt]> create table enum_set (en ENUM('a','','1'),se SET('a','1'));
- MariaDB [tt]> insert into enum_set (en,en) values("a","a");
MariaDB [tt]> insert into enum_set (en,se) values("a","a");
- MariaDB [tt]> insert into enum_set (en,se) values("a","b");
- MariaDB [tt]> insert into enum_set (en,se) values("b","a");
- MariaDB [tt]> select * from enum_set;
+------+------+
| en | se |
+------+------+
| a | a |
| a | |
| | a |
+------+------+
3 rows in set (0.00 sec)
- SQL MODE:定义MySQL对约束等的响应行为
- 常用的SQL_MODE:TRADITIONAL,STATIC_TRANS_TABLES,STATIC_ALL_TABLES
查看方式:
MariaDB [tt]> show global variables like "sql_mode"; #sql_mode查询
- +---------------+--------------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------------+ | sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+--------------------------------------------+ 1 row in set (0.00 sec)
- MariaDB [tt]> show global variables like "sql_%"; #模糊匹配查询方式 +------------------------+--------------------------------------------+ | Variable_name | Value | +------------------------+--------------------------------------------+ | sql_auto_is_null | OFF | | sql_big_selects | ON | | sql_buffer_result | OFF | | sql_log_bin | ON | | sql_log_off | OFF | | sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | | sql_notes | ON | | sql_quote_show_create | ON | | sql_safe_updates | OFF | | sql_select_limit | 18446744073709551615 | | sql_slave_skip_counter | 0 | | sql_warnings | OFF | +------------------------+--------------------------------------------+ 12 rows in set (0.00 sec)
修改方式:
MariaDB [tt]> set global sql_mode='MODE';
MariaDB [tt]> set @@global.sql_mode='MODE';
MariaDB [tt]> set session sql_mode='MODE';
MariaDB [tt]> set @@session.sql_mode='MODE';
注意事项:需要具有管理员权限,仅对修改之后的会话有效,对已建立的会话无效:
栗子:
MariaDB [mydbl]> create database ttt;
MariaDB [mydbl]> use ttt;
- MariaDB [ttt]> create table t1 (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,name CHAR(5) NOT NULL);
- MariaDB [ttt]> insert into t1 (name) values('wang'),('xuexusd'); #没修改之前会有警告,但不报错
- MariaDB [mydbl]> set sql_mode='TRADITIONAL'; #改之后,超过字符限制就会报错
- Query OK, 2 rows affected, 2 warnings (0.00 sec) Records: 2 Duplicates: 0 Warnings: 2
- MariaDB [ttt]> insert into t1 (name) values('wang'),('xufsdsexu');
- ERROR 1406 (22001): Data too long for column 'name' at row 1 #错误信息
SQL语言
- DDL:数据定义语言
- create alter drop
- DB组件:数据库,表,索引,视图,用户,存储过程,存储函数,触发器,事件调度器等
- create相关的常用命令
MariaDB [ttt]> help 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
- DML:数据操作语言
- insert delete update select
- 数据库相关指令:
- create,alter,drop {database|schema} [if exists] [if not exists]
- 表:二维关系
- 设计表:遵循规范
- 定义:字段,索引
- 字段:字段名(不区分大小写),字段数据类型,修饰符
- 约束:索引(
- 1.应该创建在查询条件最多的字段上;
- 2.实现级别在存储引擎;
- 3.分类:
- 稠密索引;稀疏索引;
- B+索引;hash索引;R树索引;FULLTEXT索引
- 聚集索引;非聚集索引
- 创建表:
- 直接创建
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
- 根据已经存在的表创建,新表会被直接插入查询而来的数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
select_statement
- 根据已经存在的表结构创建,不复制数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
注意:storage engine是指表类型,也就是在创建表得时候指明其使用的数据存储引擎
同一个库中的表要使用同一种存储引擎类型
- 查看表
MariaDB [ttt]> desc t1; #查看表结构 +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | char(5) | NO | | NULL | | +-------+------------------+------+-----+---------+----------------+ 2 rows in set (0.01 sec)
MariaDB [ttt]> show tables; #查看表个数 +---------------+ | Tables_in_ttt | +---------------+ | t1 | +---------------+ 1 row in set (0.00 sec)
- MariaDB [ttt]> show table status like 't1'\G; #查看表状态 *************************** 1. row *************************** Name: t1 Engine: InnoDB Version: 10 Row_format: Compact Rows: 2 Avg_row_length: 8192 #平均每行宝库奥的字节数 Data_length: 16384 #表中数据的大小 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: 3 Create_time: 2017-01-07 13:51:08 Update_time: NULL Check_time: NULL Collation: utf8mb4_general_ci #排序规则 Checksum: NULL #表的校验和(性能优化) Create_options: #额外选项 Comment: #注释信息 1 row in set (0.00 sec)
- 修改表:alter table
- 删除表:drop table