#####################################################################
开发DBA:数据库设计(E-R关系图)、SQL开发、内置函数、存储例程(存储过程和存储函数)、触发器、事件调度器(event scheduler)
管理DBA:安装、升级,备份、恢复,用户管理、权限管理,监控、分析、基准测试,语句优化(SQL语句),数据字典,按需要配置服务器(服务器变量:MyISAM, InnoDB, 缓存, 日志)
SQL语言组成部分:
DDL:
DML:
完整性定义语言:DDL的一部分功能
主键、外键、惟一键、条件、非空、事务
视图定义:虚表,存储下来的SELECT语句
事务控制:
嵌入式SQL和动态SQL:
DCL:授权
数据类型的功用:
1、存储的值类型;
2、占据的礁存储空间;
3、定长,变长;
4、如何被索引及排序;
5、是否能够被索引;
数据字典:系统编目(system catalog)
保存数据库服务器上的元数据
元数据:
关系的名字
每个关系的各字段的名字
各字段的数据类型和长度
约束
每个关系上的视图的名字及视图的定义
授权用户的名字
用户的授权和帐户信息
统计类的数据:
每个关系字段的个数;
每个关系中行数;
每个关系的存储方法;
保存元数据的数据库:
information_schema
mysql
performance_shcema
数据类型:
字符型
char
varchar
binary
varbinary
text
blob
数值型
精确数值型
整型
十进制数据:decimal
近似数值型
单精度浮点型
双精度浮点型
日期时间型
日期型
时间型
日期时间型
时间戳
布尔型
内建类型
ENUM, SET
数值型:
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
DECIMAL
FLOAT
DOUBAL
BIT
字符型:
CHAR
VARCHAR
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
BINARY
VARBINARY
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
ENUM
SET
日期时间型:
DATE
TIME
DATETIME
TIMESTAMP
YEAR
CHAR、VARCHAR和TEXT几种字符型常用的属性修饰符:
NOT NULL:非空约束
NULL:允许为空
DEFAULT 'string':默认值,不适用于TEXT类型
CHARACTER SET '字符集'
mysql> SHOW VARIABLES LIKE '%char%';
mysql> SHOW CHARACTER SET
COLLATION '规则': 排序规则
mysql> SHOW COLLATION;
BINARY、VARBINARY和BLOB几种字符型常用的属性修饰符:
NOT NULL
NULL
DEFAULT: 不适用于BLOB
整型的常用属性修饰符:
AUTO_INCREMENT:自动增长
前提:非空,且惟一;支持索引,非负值;
UNSIGNED:无符号
NULL
NOT NULL
DEFAULT
浮点型常用修饰符:
NOT NULL
NULL
DEFAULT
UNSIGNED
日期时间型的修饰符:
NOT NULL
NULL
DEFAULT
ENUM和SET的修饰符:
NOT NULL
NULL
DEFAULT ''
MySQL SQL_MODE: SQL模式
TRADITIONAL, STRICT_TRANS_TABLES, or STRICT_ALL_TABLES
设定服务器变量的值:(仅用于支持动态的变量)
支持修改的服务器变量:
动态变量:可以MySQL运行时修改
静态变量:于配置文件中修改其值,并重启后方能生效;
服务器变量从其生效范围来讲,有两类:
全局变量:服务器级别,修改之后仅对新建立的会话有效;
会话变量:会话级别,仅对当前会话有效;
会话建立时,从全局继承各变量;
查看服务器变量:
mysql> SHOW [{GLOBAL|SESSION}] VARIABLES [LIKE '']; mysql> SELECT @@{GLOBAL|SESSION}.VARILABLE_NAME; mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='SOME_VARIABLE_NAME'; mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='SOME_VARIABLE_NAME';
修改变量
前提:默认仅管理员有权限修改全局变量
mysql> SET {GLOBAL|SESSION} VARIABLE_NAME='VALUE';
注意:无论是全局还是会话级别的动态变量修改,在重启mysqld后都会失效;想永久有效,可定义在配置文件中的相应段中[mysqld];
创建数据库
mysql> CREATE DATABASE mydb; mysql> USE mydb;
创建表:××× 非空 唯一 非负 AUTO_INCREMENT
UNSIGNED 无符号 就是不支持负数
mysql> CREATE TABLE t1 (ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,Name CHAR(30)); mysql> DESC t1; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | Name | char(30) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ mysql> SELECT * FROM t1; mysql> insert into t1 (Name) VALUES ('TOM'),('Jerry'); mysql> SELECT * FROM t1; +----+-------+ | ID | Name | +----+-------+ | 1 | TOM | | 2 | Jerry | +----+-------+ 2 rows in set (0.00 sec)
显示最后一次修改记录
mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.02 sec) mysql> insert into t1 (Name) VALUES ('lily'),('haha'); mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+
清空表
mysql> DELETE FROM t1; mysql> insert into t1 (Name) VALUES ('lucy'); Query OK, 1 row affected (0.11 sec) mysql> SELECT * FROM t1; +----+------+ | ID | Name | +----+------+ | 5 | lucy | +----+------+ mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 5 | +------------------+ 1 row in set (0.00 sec)
LAST_INSERT_ID()只记录上次的第一个插入的数据,即使delete清空表记录也一样存在
##########################################################
TRUNCATE 清空
mysql> HELP TRUNCATE mysql> TRUNCATE t1; Query OK, 0 rows affected (0.06 sec) mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 5 | +------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM t1; Empty set (0.00 sec) mysql> insert into t1 (Name) VALUES ('lucy'); Query OK, 1 row affected (0.07 sec) mysql> SELECT * FROM t1; +----+------+ | ID | Name | +----+------+ | 1 | lucy | +----+------+ 1 row in set (0.00 sec) mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec)
########################################################
超出字符长度,默认会被截取
mysql> create table t2 (name CHAR (3)); Query OK, 0 rows affected (0.14 sec) mysql> INSERT INTO t2 VALUES ('jerry'); Query OK, 1 row affected, 1 warning (0.10 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1265 | Data truncated for column 'name' at row 1 | +---------+------+-------------------------------------------+ mysql> SELECT * from t2; +------+ | name | +------+ | jer | +------+
###############################################
mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+