SQL语言基础
- SELECT user_name, age(查询的字段名称)
- FROM tbl_user(所查询的数据库表)
- WHERE age>18(查询条件)
数据定义
- CREATE TABLE
- DROP TABLE
- ALTER TABLE(修改表结构)
- CREATE INDEX(创建索引)
- DROP INDEX
- CREATE PROCEDURE(创建存储过程)
- DROP PROCEDURE
数据操作
- SELECT
- INSERT
- UPDATE
- DELETE
权限控制
- GRANT(设置访问权限)
- REVOKE(解除权限)
事务控制
- COMMIT(提交事务)
- ROLLBACK(回滚事务)
MySQL数据类型
整型
MySQL数据类型 | 含义(有符号) |
---|---|
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~256).
浮点型
MySQL数据类型 | 含义 |
---|---|
FLOAT(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
DOUBLE(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。decimal(m,d)
参数m<65
是总个数,d<30
且d<m
是小数位。
字符串
MySQL数据类型 | 含义 |
---|---|
CHAR(n) | 固定长度,最多255个字符 |
VARCHAR(n) | 可变长度,最多65535个字符 |
TINYTEXT | 可变长度,最多255个字符 |
TEXT | 可变长度,最多65535个字符 |
MEDIUMTEXT | 可变长度,最多2的24次方-1个字符 |
LONGTEXT | 可变长度,最多2的32次方-1个字符 |
char和varchar:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
- char类型的字符串检索速度要比varchar类型的快。
varchar和text:
- varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
- text类型不能有默认值。
- varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
二进制数据
-
_BLOB
和_text
存储方式不同,_TEXT
以文本方式存储,英文存储区分大小写,而_BLOB
是以二进制方式存储,不分大小写。 -
_BLOB
存储的数据只能整体读出。 -
_TEXT
可以指定字符集,_BLOB
不用指定字符集。
日期时间类型
MySQL数据类型 | 含义 |
---|---|
DATE | 日期 |
TIME | 时间 |
DATETIME | 日期时间 |
TIMESTAMP | 自动存储记录修改时间 |
数据类型的属性
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
MySQL运算符
算术运算符
+ - * / %
例:
select 1 + 2;
select 2 / 0; -- 返回null
select 2 + null; -- 返回null
select '2' * '5'; -- 返回10,自动转为数字
select '20aa' * '5'; -- 返回100,aa被忽略
select 'aa20' * 5; --返回0
比较运算符
= , <>/!= , > , <=> , between , in , is null , like , regexp
例:
select 1 <=> null; -- return 0
select null <=> null; -- return 1
select 'duyue' = 'DUYUE '; -- return 1, 空格会被忽略
select binary 'duyue' = 'DUYUE'; -- return 0, 二进制
select 'b' between 'a' and 'c'; -- return 1
select 'd' between 'a' and 'c'; -- return 0
select 5 in (2, 3, 5, 6); -- return 1
select null in (2, 3, 5, null); -- return null
select 'duyue' like 'du%'; -- return 1, %匹配后续字符,like很慢
select 'duyue' like 'd_yue'; -- return 1, 匹配1个字符
逻辑运算符与位运算符
逻辑运算符:
not/! , and/&& , or/|| , xor
例:
select (4>3) and (3>5);
select (4>3) xor (3>5); -- 异或,两者值不同即为真,返回1
位运算符:
& , | , ^ , ~ , >> , <<
例:
select 9 | 4; -- return 13, 位取或
select 9 >> 1; -- return 4, 右移
select 9 ^ 5; -- return 12, 异或
MySQL基本操作
例:
create database test_db;
create table tbl_user(
user_name varchar(20),
age int,
signup_date date
);
insert into tbl_user values('darkmi', 28, '2015-01-01');
select * from tbl_user;
select * from tbl_user where user_name = 'darkmi' and age = 18;
update tbl_user set age = 30 where user_name = 'darkmi';
delete from tbl_user where user_name = 'darkmi';
alter table tbl_user add email varchar(50); -- 添加列
alter table tbl_user drop email;
alter table tbl_user change age user_age int; -- 修改列名
alter table tbl_user change user_age user_age tinyint(1) not null; -- 修改类型定义
alter table tbl_user rename user_tbl; -- 重命名
drop table user_tbl; -- 删除表