SQL: structured query language 结构化查询语言
下载地址:(windos/linux环境下的安装文件)
http://downloads.skysql.com/archive/index/p/mysql/v/5.0.96
安装文档 见附件: MySQL安装图解.doc
作为自学,安装时一路next,到设置数据库语言的时候,设置为utf-8即可,细节见附件文档。
参考手册 见附件: MySQL_5.1_zh.chm
一些说明:
a) mysql 内可以创建多个数据库,这个和oracle不同(只能有一个);
b) mysql 是数据库服务器(数据库管理程序),不是一个数据库,我们利用这个服务器(工具)可以创建多个数据库,在利用这个服务器(工具)在指定数据库内创建表,下图是这三者关系:
常用数据类型:
分类 | 数据类型 | 说明 |
数值类型 | bit, boolean tinyint(对应java的byte) smallint(对应java的short), int, bigint(对应java的long) float, double |
|
文本、二进制类型 | char 最大255 varchar(20) --->最大长度为20,长度根据里面存储的内容长度而动态改变 最大255 BLOB (二进制大对象 LOB(对象 eg 图片) )
TEXT(eg:txt文件里面的内容) LONGTEXT(longclob) 比如存放帖子内容 |
1 VARCHAR BLOB TEXT 是变长类型
2 每个类型的存储需求取决于列值的实际长度 |
时间日期 | DATE (YYYY-MM-DD) DATETIME ((YYYY-MM-DD HH:MM:SS) TimeStamp 当前这一刻的时间数, |
常用表/字段操作命令:
1 创建一个使用utf-8字符集的mydb2数据库 : create database zmdb character set utf8; (这里utf-8需要写成 utf8)
2 显示所有数据库 : show databases;
3 显示创建数据库的详细信息: show create database mydb;
4 删除数据库: drop database mydb;
5 修改mydb的字符集: alter database mydb character set gb2312;
6 创建表:
create table employee
(
id int,
name varchar(40),
sex varchar(8),
birthday date,
entry_date date,
job varchar(20),
salary double,
resume text
)character set utf8 ; 创建表 并设置编码格式、
7 修改表的名称: rename table employee to employee2;
8 修改表的字符集: alter table employee character set utf8;
9 表中增加列: alter table employee add image blob;
10 修改列的长度: ALTER TABLE employee MODIFY COLUMN image VARCHAR(40);
11 修改列的名称: ALTER TABLE employee CHANGE COLUMN image images VARCHAR(20);
12 删除列: ALTER TABLE employee DROP COLUMN images;
如下是mysql CRUD(create read update delete)命令:
1 insert:
a) 插入数据时, 字符和日期类型应该放在单引号内
b) 插入字段中不包含列的话,那么此列在数据库中的数值为Null'
c) inseret into tablename(字段1,字段2....) values (value1,value2...); 建议这种写法,方便自己和别人查询
2 update/delete,建议在执行时,先写where 条件, 然后在完善 update/delete语句,防止表数据全部被操作。
将所有员工薪水修改为5000元。
update employee set salary=5000;
删除表中名称为’李一’的记录
delete from employee where name='李一';
3 truncate语句: 删除表
truncate table employee; 和 delete from employee; 的区别:
a) 前者删除时操作流程--> 0 记住表结构 1 摧毁表 2 在新建表
b) 后者是一条条的删除表中的记录,效率低于前者
4 select 详解
where子句用于过滤,常跟着运算符进行过滤,
where子句中常用的运算符如下:
比较运算符 |
> < <= >= = <> |
|
BETWEEN ...AND... |
||
IN | 显示在in列表中的值,例:in(100,200) |
|
LIKE | % 代表零个或多个任意字符,_ 代表一个字符 | |
is null | ||
逻辑运算符 |
and | |
or | ||
not |
ADDTIME (date2 ,time_interval ) | 将time_interval加到date2 |
CURRENT_DATE ( ) | 当前日期 |
CURRENT_TIME ( ) | 当前时间 eg: SELECT CURRENT_TIME ( ) 13:34:19 |
CURRENT_TIMESTAMP ( ) | 当前时间戳 eg: SELECT CURRENT_TIMESTAMP ( ) 2014-06-03 13:34:19 |
DATE (datetime ) | 返回datetime的日期部分 |
DATE_ADD (date2 , INTERVAL d_value d_type ) | 在date2中加上日期或时间 |
DATE_SUB (date2 , INTERVAL d_value d_type ) | 在date2上减去一个时间 |
DATEDIFF (date1 ,date2 ) | 两个日期差 |
NOW ( ) | 当前时间 |
YEAR|Month|DATE (datetime ) | 年|月|日 eg:SELECT YEAR( CURRENT_DATE ( )) 2014 |
字符串相关函数:
CHARSET(str) | 返回字串字符集 | SELECT CHARSET("111"); |
CONCAT (string2 [,... ]) | 连接字串 | |
INSTR (string ,substring ) | 返回substring在string中出现的位置,没有返回0 | |
UCASE (string2 ) | 转换成大写 | |
LCASE (string2 ) | 转换成小写 | |
LEFT (string2 ,length ) | 从string2中的左边起取length个字符 | |
LENGTH (string ) | string长度 | |
REPLACE (str ,search_str ,replace_str ) | 在str中用replace_str替换search_str | |
STRCMP (string1 ,string2 ) | 逐字符比较两字串大小, | |
SUBSTRING (str , position [,length ]) | 从str的position开始,取length个字符 | |
LTRIM (string2 ) RTRIM (string2 ) | 去除前端空格或后端空格 |
数学相关函数:
ABS (number2 ) | 绝对值 | 案例待补充 |
BIN (decimal_number ) | 十进制转二进制 | |
CEILING (number2 ) | 向上取整 | |
FLOOR (number2 ) | 向下取整 | |
CONV(number2,from_base,to_base) | 进制转换 | |
FORMAT (number,decimal_places ) | 保留小数位数 | |
HEX (DecimalNumber ) | 转十六进制 | |
LEAST (number , number2 [,..]) | 求最小值 | |
MOD (numerator ,denominator ) | 求余 | |
定义表的约束:
定义主键约束
primary key:不允许为空,不允许重复
删除主键:alter table tablename drop primary key ;
定义主键自动增长
auto_increment
定义唯一约束
unique
定义非空约束
not null
定义外键约束
constraint ordersid_FK foreign key(ordersid) references orders(id),
推荐一个不错的mysql客户端软件 SQLyog-9.2.0-2Community